1- from sqlalchemy import Boolean , Column , ForeignKey , Integer , String
1+ from sqlalchemy import Boolean , Column , ForeignKey , Integer , String , Enum
22from sqlalchemy .orm import declarative_base , relationship
33
44from consts import LESSON_TIMES
5+ from enums import UserRole , UserStatus
56
67Base = declarative_base ()
78
@@ -29,35 +30,32 @@ class User(Base):
2930 name = Column (String , nullable = False )
3031 subgroup = Column (Integer , nullable = True ) # Подгруппа (1 или 2)
3132 group_id = Column (Integer , ForeignKey ("groups.id" ))
32- is_teacher = Column (Boolean , default = False , nullable = True )
33- is_admin = Column (Boolean , default = False , nullable = True )
33+ role = Column (Enum ( UserRole ) , default = UserRole . STUDENT , nullable = False )
34+ status = Column (Enum ( UserStatus ) , default = UserStatus . USER , nullable = False )
3435 daily_notify = Column (Boolean , default = False , nullable = True )
3536 notify_time = Column (Integer , default = 8 , nullable = False ) # Время рассылки (8 или 20)
3637 teacher_name = Column (String , nullable = True )
3738
3839 group = relationship ("Group" , back_populates = "users" )
3940
40- def is_staff (self ) -> bool :
41- return bool (self .is_admin )
42-
4341 def make_teacher (self , teacher_name : str ) -> None :
4442 self .subgroup = None
4543 self .group_id = None
4644
47- self .is_teacher = True
45+ self .role = UserRole . TEACHER
4846 self .teacher_name = teacher_name
4947
5048 def make_student (self , group_id : int , subgroup : int ) -> None :
51- self .is_teacher = False
49+ self .role = UserRole . STUDENT
5250 self .teacher_name = None
5351
5452 self .subgroup = subgroup
5553 self .group_id = group_id
5654
5755 def _get_status_str (self ) -> str :
58- if self .is_admin :
56+ if self .status == UserStatus . ADMIN :
5957 return "Администратор"
60- if self .is_teacher :
58+ if self .role == UserRole . TEACHER :
6159 return "Преподаватель"
6260 return "Пользователь"
6361
@@ -66,7 +64,7 @@ def to_text(self) -> str:
6664 notify_status = "Включена" if self .daily_notify else "Выключена"
6765 notify_time_str = f"{ self .notify_time } :00" if self .daily_notify else "-"
6866
69- if self .is_teacher :
67+ if self .role == UserRole . TEACHER :
7068 return (
7169 f"👤 Имя пользователя: { self .name } \n "
7270 f"🧑🏫 Преподаватель: { self .teacher_name or 'Не указано' } \n "
@@ -107,14 +105,14 @@ class Schedule(Base):
107105
108106 group = relationship ("Group" , back_populates = "schedules" )
109107
110- def to_text (self , is_requesting_teacher : bool = False ) -> str :
108+ def to_text (self , requesting_role : UserRole ) -> str :
111109 start_time , end_time = LESSON_TIMES .get (self .lesson_number , ("-" , "-" ))
112110 details = [
113111 f"Предмет: { self .subject or 'не указано' } " ,
114112 f"Формат: { self .lesson_type or 'не указано' } " ,
115113 f"Кабинет: { self .room or 'не указано' } " ,
116114 ]
117- if is_requesting_teacher :
115+ if requesting_role == UserRole . TEACHER :
118116 details .append (
119117 f"Группа: { self .group .get_short_name () if self .group else '??' } " ,
120118 )
0 commit comments