Files
srab/исх/картотека/репозитории/пользователь.tri
2025-11-26 21:32:41 +03:00

131 lines
5.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
модуль репозитории
импорт "исх/бд/скуля"
импорт "исх/картотека"
импорт "исх/форматы/джесон"
импорт "исх/бюрократия"
тип Пользователь = класс {
идентификатор*: Цел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, оплошность := Строка): Лог {
пусть картотека = картотека.зайти()
пусть учитель = пользователь учитель(ид, оплошность)
если оплошность # "" {
вернуть ложь
}
пусть ученик = пользователь ученик(ид, оплошность)
если оплошность # "" {
вернуть ложь
}
вернуть учитель = пусто & ученик = пусто
}