// ───────────────────────────────────────────────────────────────────────────── // 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]) }