Files
srab/исх/миграции/миграции.tri
2025-11-26 21:32:41 +03:00

113 lines
3.2 KiB
Plaintext

модуль миграции
импорт "исх/бд/скуля"
фн мигрировать*(картотека: скуля.Картотека) {
пусть оплошность := ""
картотека.выполнить(`PRAGMA foreign_keys = ON;`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
middle_name TEXT NOT NULL,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS teachers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL UNIQUE,
education TEXT,
avatar_url TEXT,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL UNIQUE,
mentor_id INTEGER, -- "чей ученик" — id учителя (может быть NULL)
snils TEXT,
passport TEXT,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY(mentor_id) REFERENCES teachers(id) ON DELETE SET NULL
);`, оплошность)
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS classes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
number INTEGER NOT NULL,
letter TEXT NOT NULL,
creator_teacher_id INTEGER,
FOREIGN KEY(creator_teacher_id) REFERENCES teachers(id) ON DELETE SET NULL
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS class_students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
class_id INTEGER NOT NULL,
student_id INTEGER NOT NULL,
UNIQUE(class_id, student_id),
FOREIGN KEY(class_id) REFERENCES classes(id) ON DELETE CASCADE,
FOREIGN KEY(student_id) REFERENCES students(id) ON DELETE CASCADE
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
CREATE TABLE IF NOT EXISTS lessons (
id INTEGER PRIMARY
KEY AUTOINCREMENT,
class_id INTEGER NOT NULL,
date DATE NOT NULL,
title TEXT NOT NULL,
homework TEXT,
FOREIGN KEY(class_id) REFERENCES classes(id) ON DELETE CASCADE
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
картотека.выполнить(`
INSERT OR IGNORE INTO users (
first_name,
last_name,
middle_name,
username,
password
) VALUES (
'Админ',
'Админович',
'',
'admin',
'correct horse battery staple'
);`, оплошность)
если оплошность # "" {
авария(оплошность)
}
}