131 lines
5.6 KiB
Plaintext
131 lines
5.6 KiB
Plaintext
модуль репозитории
|
||
|
||
импорт "исх/бд/скуля"
|
||
импорт "исх/картотека"
|
||
импорт "исх/форматы/джесон"
|
||
импорт "исх/бюрократия"
|
||
|
||
тип Пользователь = класс {
|
||
идентификатор*: Цел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, оплошность := Строка): Лог {
|
||
пусть картотека = картотека.зайти()
|
||
пусть учитель = пользователь учитель(ид, оплошность)
|
||
|
||
если оплошность # "" {
|
||
вернуть ложь
|
||
}
|
||
|
||
пусть ученик = пользователь ученик(ид, оплошность)
|
||
|
||
если оплошность # "" {
|
||
вернуть ложь
|
||
}
|
||
|
||
вернуть учитель = пусто & ученик = пусто
|
||
}
|