модуль репозитории импорт "исх/бд/скуля" импорт "исх/картотека" импорт "исх/форматы/джесон" импорт "исх/бюрократия" тип Пользователь = класс { идентификатор*: Цел64 := 0 имя*: Строка := "" фамилия*: Строка := "" отчество*: Строка := "" имя пользователя*: Строка := "" пароль*: Строка := "" } тип Учитель = класс { идентификатор*: Цел64 := 0 идентификатор пользователя*: Цел64 := 0 образование*: Строка := "" урурурл аватара*: Строка := "" } тип Ученик = класс { идентификатор*: Цел64 := 0 идентификатор пользователя*: Цел64 := 0 идентификатор ментора*: Цел64 := 0 снилс*: Строка := "" паспорт*: Строка := "" } фн авторизовать пользователя*(имя пользователя: Строка, пароль: Строка, оплошность := Строка): мб Пользователь { пусть картотека = картотека.зайти() пусть ответ = картотека.запросить безопасно(` SELECT id, first_name, last_name, middle_name FROM users WHERE username = ? AND password = ? `, оплошность, имя пользователя, пароль) если оплошность # "" { вернуть Пользователь{} } если длина(ответ.значения) = 0 { вернуть пусто } пусть объект = ответ.значения[0](:джесон.ДжесонОбъект) вернуть Пользователь{ идентификатор: объект.получить("id").число()^.значение, имя: объект.получить("first_name").строка()^, фамилия: объект.получить("last_name").строка()^, отчество: объект.получить("middle_name").строка()^, имя пользователя: имя пользователя, пароль: пароль } } фн авторизовать по паспорту*(паспорт: мб бюрократия.Паспорт, оплошность := Строка): мб Пользователь { если паспорт = пусто { вернуть пусто } вернуть авторизовать пользователя(паспорт^.имя пользователя, паспорт^.пароль, оплошность) } фн пользователь учитель*(ид: Цел64, оплошность := Строка): мб Учитель { пусть картотека = картотека.зайти() пусть ответ = картотека.запросить безопасно(` SELECT user_id, education, avatar_url, id FROM teachers WHERE user_id = ? `, оплошность, ид) если оплошность # "" { вернуть пусто } если длина(ответ.значения) = 0 { вернуть пусто } пусть объект = ответ.значения[0](:джесон.ДжесонОбъект) вернуть Учитель{ идентификатор: объект.получить("id").число()^.значение, идентификатор пользователя: ид, образование: объект.получить("education").строка()^, урурурл аватара: объект.получить("avatar_url").строка()^ } } фн пользователь ученик*(ид: Цел64, оплошность := Строка): мб Ученик { пусть картотека = картотека.зайти() пусть ответ = картотека.запросить безопасно(` SELECT * FROM students WHERE user_id = ? `, оплошность, ид) если оплошность # "" { вернуть пусто } если длина(ответ.значения) = 0 { вернуть пусто } пусть объект = ответ.значения[0](:джесон.ДжесонОбъект) вернуть Ученик{ идентификатор: объект.получить("id").число()^.значение, идентификатор пользователя: ид, идентификатор ментора: объект.получить("mentor_id").число()^.значение, снилс: объект.получить("snils").строка()^, паспорт: объект.получить("passport").строка()^ } } фн пользователь админ*(ид: Цел64, оплошность := Строка): Лог { пусть картотека = картотека.зайти() пусть учитель = пользователь учитель(ид, оплошность) если оплошность # "" { вернуть ложь } пусть ученик = пользователь ученик(ид, оплошность) если оплошность # "" { вернуть ложь } вернуть учитель = пусто & ученик = пусто }