From f6445e01ff6b5b216f21939c1aac0e76313dcdf4 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 17 Mar 2026 17:15:20 +0300 Subject: [PATCH] add ai migration --- plans_migration.ts | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 plans_migration.ts diff --git a/plans_migration.ts b/plans_migration.ts new file mode 100644 index 0000000..629dfa9 --- /dev/null +++ b/plans_migration.ts @@ -0,0 +1,107 @@ +// ───────────────────────────────────────────────────────────────────────────── +// 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]) +}