108 lines
6.1 KiB
TypeScript
108 lines
6.1 KiB
TypeScript
// ─────────────────────────────────────────────────────────────────────────────
|
||
// 1. Подключение к базе данных и генерация клиента
|
||
// ─────────────────────────────────────────────────────────────────────────────
|
||
datasource db {
|
||
provider = "postgresql" // можно заменить на mysql, sqlite и др.
|
||
url = env("DATABASE_URL")
|
||
}
|
||
|
||
generator client {
|
||
provider = "prisma-client-js"
|
||
}
|
||
|
||
// ─────────────────────────────────────────────────────────────────────────────
|
||
// 2. Модели
|
||
// ─────────────────────────────────────────────────────────────────────────────
|
||
|
||
// Метаданные приложения (верхняя часть JSON‑файла)
|
||
model AppInfo {
|
||
id Int @id @default(autoincrement())
|
||
version String? // "НомерВерсииПриложения"
|
||
appName String? // "ИмяПриложения"
|
||
userId String? // "НомерПользователя"
|
||
userName String? // "ИмяПользователя"
|
||
fileName String? // "ИмяФайла"
|
||
protocolNumber String? // "НомПротокСовета"
|
||
note String? // "Примечание"
|
||
yearStart String? // "ГодНачалаПодготовки"
|
||
typeGOS String? // "ТипГОСа"
|
||
activeOOPCode String? // "КодАктивногоООП"
|
||
zPerWeek Float? // "ЗЕТвНеделю"
|
||
precision Float? // "Точность"
|
||
isDvig Boolean @default(false) // "ДвИГА"
|
||
isGvig Boolean @default(false) // "ГвИГА"
|
||
semestersOnCourse Int? // "СеместровНаКурсе"
|
||
creditsHours Int? // "ЧасовВКредите"
|
||
isIndividual Boolean @default(false) // "Индивидуальный"
|
||
fullName String? // "ФИО"
|
||
isMilitary Boolean @default(false) // "Военные"
|
||
educationLevel Int? // "КодУровняОбразования"
|
||
planTypeCode Int? // "КодТипаПлана"
|
||
loadStatus Int? // "СтатусВНагрузке"
|
||
studiedHours Int? // "ИзученоКонтЧасов"
|
||
hideRPD Boolean @default(false) // "СкрытьВРПД"
|
||
hideOnSite Boolean @default(false) // "СкрытьНаСайте"
|
||
minAppVersion String? // "MinAppVersion"
|
||
}
|
||
|
||
// Заезды (массив "Заезды")
|
||
model Ride {
|
||
id Int @id @default(autoincrement())
|
||
diffgrId String @map("diffgr:id") // "diffgr:id"
|
||
rowOrder Int @map("msdata:rowOrder") // "msdata:rowOrder"
|
||
code Int // "Код"
|
||
course Int // "Курс"
|
||
session Int // "Сессия"
|
||
title String? // "Название"
|
||
duration Int // "Продолжительность"
|
||
planCode Int @map("КодПлана") // "КодПлана"
|
||
|
||
// При необходимости можно связать заезды с Планом
|
||
plan Plan? @relation(fields: [planId], references: [id])
|
||
planId Int?
|
||
}
|
||
|
||
// План компетенций (опциональная справочная модель)
|
||
model Plan {
|
||
id Int @id @default(autoincrement())
|
||
code Int @unique // "Код"
|
||
oopCode Int? @map("КодООП") // "КодООП"
|
||
abbreviation String? @map("ШифрКомпетенции") // "ШифрКомпетенции"
|
||
name String? @map("Наименование") // "Наименование"
|
||
number String? @map("Номер") // "Номер"
|
||
type Int? @map("Тип") // (не встречается в примерах, но оставлено)
|
||
view Int? @map("Вид") // (не встречается в примерах, но оставлено)
|
||
source String? @map("Источник") // "Источник"
|
||
category String? @map("Категория") // "Категория"
|
||
|
||
// Связанные компетенции и заезды
|
||
competencies Competency[]
|
||
rides Ride[]
|
||
}
|
||
|
||
// Планы компетенций (массив "ПланыКомпетенции")
|
||
model Competency {
|
||
id Int @id @default(autoincrement())
|
||
diffgrId String @map("diffgr:id") // "diffgr:id"
|
||
rowOrder Int @map("msdata:rowOrder") // "msdata:rowOrder"
|
||
code Int // "Код"
|
||
oopCode Int? @map("КодООП") // "КодООП"
|
||
abbreviation String? @map("ШифрКомпетенции") // "ШифрКомпетенции"
|
||
name String? @map("Наименование") // "Наименование"
|
||
number String? @map("Номер") // "Номер"
|
||
planCode Int @map("КодПлана") // "КодПлана"
|
||
isDeleted Boolean @map("Удалена") @default(false) // "Удалена"
|
||
source String? @map("Источник") // "Источник"
|
||
category String? @map("Категория") // "Категория"
|
||
parentCode Int? @map("КодРодителя") // "КодРодителя"
|
||
|
||
// Иерархия «родитель‑дети» (само‑референция)
|
||
parentId Int?
|
||
parent Competency? @relation("Children", fields: [parentId], references: [id])
|
||
children Competency[] @relation("Children")
|
||
|
||
// Связь с Планом (если в дальнейшем план будет отдельной сущностью)
|
||
planId Int?
|
||
plan Plan? @relation(fields: [planId], references: [id])
|
||
}
|