55from datetime import datetime
66from enum import Enum
77
8- import sqlalchemy
9- from sqlalchemy import Column
8+ from sqlalchemy import and_ , or_ , Integer , String , Boolean , JSON , DateTime , Text , ForeignKey , true
109from sqlalchemy import Enum as DbEnum
11- from sqlalchemy import and_ , or_
1210from sqlalchemy .ext .hybrid import hybrid_method , hybrid_property
13- from sqlalchemy .orm import relationship
11+ from sqlalchemy .orm import relationship , Mapped , mapped_column
1412
1513from .base import BaseDbModel , ApproveStatuses
1614
1715
1816class Credentials (BaseDbModel ):
1917 """User credentials"""
2018
21- id = Column ( sqlalchemy . Integer , primary_key = True )
22- group = Column ( sqlalchemy . String , nullable = False )
23- email = Column ( sqlalchemy . String , nullable = False )
24- scope = Column ( sqlalchemy . JSON , nullable = False )
25- token = Column ( sqlalchemy . JSON , nullable = False )
26- create_ts = Column ( sqlalchemy . DateTime , nullable = False , default = datetime .utcnow )
27- update_ts = Column ( sqlalchemy . DateTime , nullable = False , default = datetime .utcnow , onupdate = datetime .utcnow )
19+ id : Mapped [ int ] = mapped_column ( Integer , primary_key = True )
20+ group : Mapped [ int ] = mapped_column ( String , nullable = False )
21+ email : Mapped [ int ] = mapped_column ( String , nullable = False )
22+ scope : Mapped [ int ] = mapped_column ( JSON , nullable = False )
23+ token : Mapped [ int ] = mapped_column ( JSON , nullable = False )
24+ create_ts : Mapped [ int ] = mapped_column ( DateTime , nullable = False , default = datetime .utcnow )
25+ update_ts : Mapped [ int ] = mapped_column ( DateTime , nullable = False , default = datetime .utcnow , onupdate = datetime .utcnow )
2826
2927
3028class Direction (str , Enum ):
@@ -33,12 +31,12 @@ class Direction(str, Enum):
3331
3432
3533class Room (BaseDbModel ):
36- name = sqlalchemy . Column ( sqlalchemy . String , nullable = False , unique = True )
37- direction = sqlalchemy . Column (DbEnum (Direction , native_enum = False ), nullable = True )
38- building = sqlalchemy . Column ( sqlalchemy . String )
39- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
34+ name : Mapped [ int ] = mapped_column ( String , nullable = False , unique = True )
35+ direction : Mapped [ int ] = mapped_column (DbEnum (Direction , native_enum = False ), nullable = True )
36+ building : Mapped [ int ] = mapped_column ( String )
37+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
4038
41- events : list [Event ] = relationship (
39+ events : Mapped [ list [Event ] ] = relationship (
4240 "Event" ,
4341 back_populates = "room" ,
4442 secondary = "events_rooms" ,
@@ -48,34 +46,34 @@ class Room(BaseDbModel):
4846
4947
5048class Lecturer (BaseDbModel ):
51- first_name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
52- middle_name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
53- last_name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
54- avatar_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("photo.id" ))
55- description = sqlalchemy . Column ( sqlalchemy . Text , nullable = True )
56- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
57-
58- avatar : Photo = relationship (
49+ first_name : Mapped [ int ] = mapped_column ( String , nullable = False )
50+ middle_name : Mapped [ int ] = mapped_column ( String , nullable = False )
51+ last_name : Mapped [ int ] = mapped_column ( String , nullable = False )
52+ avatar_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("photo.id" ))
53+ description : Mapped [ int ] = mapped_column ( Text , nullable = True )
54+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
55+
56+ avatar : Mapped [ Photo ] = relationship (
5957 "Photo" ,
6058 foreign_keys = "Lecturer.avatar_id" ,
6159 backref = "is_avatar_for" ,
6260 primaryjoin = "and_(Lecturer.avatar_id==Photo.id, not_(Photo.is_deleted))" ,
6361 )
64- photos : list [Photo ] = relationship (
62+ photos : Mapped [ list [Photo ] ] = relationship (
6563 "Photo" ,
6664 back_populates = "lecturer" ,
6765 foreign_keys = "Photo.lecturer_id" ,
6866 order_by = "Photo.id" ,
6967 primaryjoin = "and_(Lecturer.id==Photo.lecturer_id, not_(Photo.is_deleted), Photo.approve_status=='APPROVED')" ,
7068 )
71- events : list [Event ] = relationship (
69+ events : Mapped [ list [Event ] ] = relationship (
7270 "Event" ,
7371 secondary = "events_lecturers" ,
7472 order_by = "(Event.start_ts)" ,
7573 back_populates = "lecturer" ,
7674 secondaryjoin = "and_(Event.id==EventsLecturers.event_id, not_(Event.is_deleted))" ,
7775 )
78- comments : list [CommentLecturer ] = relationship (
76+ comments : Mapped [ list [CommentLecturer ] ] = relationship (
7977 "CommentLecturer" ,
8078 back_populates = "lecturer" ,
8179 foreign_keys = "CommentLecturer.lecturer_id" ,
@@ -84,7 +82,7 @@ class Lecturer(BaseDbModel):
8482
8583 @hybrid_method
8684 def search (self , query : str ) -> bool :
87- response = sqlalchemy . true
85+ response = true
8886 query = query .split (' ' )
8987 for q in query :
9088 response = and_ (
@@ -98,11 +96,11 @@ def last_photo(self) -> Photo | None:
9896
9997
10098class Group (BaseDbModel ):
101- name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
102- number = sqlalchemy . Column ( sqlalchemy . String , nullable = False , unique = True )
103- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
99+ name : Mapped [ int ] = mapped_column ( String , nullable = False )
100+ number : Mapped [ int ] = mapped_column ( String , nullable = False , unique = True )
101+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
104102
105- events : list [Event ] = relationship (
103+ events : Mapped [ list [Event ] ] = relationship (
106104 "Event" ,
107105 foreign_keys = "Event.group_id" ,
108106 order_by = "(Event.start_ts)" ,
@@ -111,31 +109,31 @@ class Group(BaseDbModel):
111109
112110
113111class Event (BaseDbModel ):
114- name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
115- group_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("group.id" ))
116- start_ts = sqlalchemy . Column ( sqlalchemy . DateTime , nullable = False )
117- end_ts = sqlalchemy . Column ( sqlalchemy . DateTime , nullable = False )
118- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
112+ name : Mapped [ int ] = mapped_column ( String , nullable = False )
113+ group_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("group.id" ))
114+ start_ts : Mapped [ int ] = mapped_column ( DateTime , nullable = False )
115+ end_ts : Mapped [ int ] = mapped_column ( DateTime , nullable = False )
116+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
119117
120- room : list [Room ] = relationship (
118+ room : Mapped [ list [Room ] ] = relationship (
121119 "Room" ,
122120 back_populates = "events" ,
123121 secondary = "events_rooms" ,
124122 secondaryjoin = "and_(Room.id==EventsRooms.room_id, not_(Room.is_deleted))" ,
125123 )
126- group : Group = relationship (
124+ group : Mapped [ Group ] = relationship (
127125 "Group" ,
128126 back_populates = "events" ,
129127 foreign_keys = "Event.group_id" ,
130128 primaryjoin = "and_(Group.id==Event.group_id, not_(Group.is_deleted))" ,
131129 )
132- lecturer : list [Lecturer ] = relationship (
130+ lecturer : Mapped [ list [Lecturer ] ] = relationship (
133131 "Lecturer" ,
134132 back_populates = "events" ,
135133 secondary = "events_lecturers" ,
136134 secondaryjoin = "and_(Lecturer.id==EventsLecturers.lecturer_id, not_(Lecturer.is_deleted))" ,
137135 )
138- comments : list [CommentEvent ] = relationship (
136+ comments : Mapped [ list [CommentEvent ] ] = relationship (
139137 "CommentEvent" ,
140138 foreign_keys = "CommentEvent.event_id" ,
141139 back_populates = "event" ,
@@ -144,22 +142,22 @@ class Event(BaseDbModel):
144142
145143
146144class EventsLecturers (BaseDbModel ):
147- event_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("event.id" ))
148- lecturer_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("lecturer.id" ))
145+ event_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("event.id" ))
146+ lecturer_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("lecturer.id" ))
149147
150148
151149class EventsRooms (BaseDbModel ):
152- event_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("event.id" ))
153- room_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("room.id" ))
150+ event_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("event.id" ))
151+ room_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("room.id" ))
154152
155153
156154class Photo (BaseDbModel ):
157- lecturer_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("lecturer.id" ))
158- link = sqlalchemy . Column ( sqlalchemy . String , unique = True )
159- approve_status = sqlalchemy . Column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
160- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
155+ lecturer_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("lecturer.id" ))
156+ link : Mapped [ int ] = mapped_column ( String , unique = True )
157+ approve_status : Mapped [ int ] = mapped_column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
158+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
161159
162- lecturer : Lecturer = relationship (
160+ lecturer : Mapped [ Lecturer ] = relationship (
163161 "Lecturer" ,
164162 back_populates = "photos" ,
165163 foreign_keys = "Photo.lecturer_id" ,
@@ -169,15 +167,15 @@ class Photo(BaseDbModel):
169167
170168
171169class CommentLecturer (BaseDbModel ):
172- lecturer_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("lecturer.id" ))
173- author_name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
174- text = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
175- approve_status = sqlalchemy . Column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
176- create_ts = sqlalchemy . Column ( sqlalchemy . DateTime , default = datetime .utcnow ())
177- update_ts = sqlalchemy . Column ( sqlalchemy . DateTime , default = datetime .utcnow (), onupdate = datetime .utcnow ())
178- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
179-
180- lecturer : Lecturer = relationship (
170+ lecturer_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("lecturer.id" ))
171+ author_name : Mapped [ int ] = mapped_column ( String , nullable = False )
172+ text : Mapped [ int ] = mapped_column ( String , nullable = False )
173+ approve_status : Mapped [ int ] = mapped_column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
174+ create_ts : Mapped [ int ] = mapped_column ( DateTime , default = datetime .utcnow ())
175+ update_ts : Mapped [ int ] = mapped_column ( DateTime , default = datetime .utcnow (), onupdate = datetime .utcnow ())
176+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
177+
178+ lecturer : Mapped [ Lecturer ] = relationship (
181179 "Lecturer" ,
182180 back_populates = "comments" ,
183181 foreign_keys = "CommentLecturer.lecturer_id" ,
@@ -186,15 +184,15 @@ class CommentLecturer(BaseDbModel):
186184
187185
188186class CommentEvent (BaseDbModel ):
189- event_id = sqlalchemy . Column ( sqlalchemy . Integer , sqlalchemy . ForeignKey ("event.id" ))
190- author_name = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
191- text = sqlalchemy . Column ( sqlalchemy . String , nullable = False )
192- approve_status = sqlalchemy . Column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
193- create_ts = sqlalchemy . Column ( sqlalchemy . DateTime , default = datetime .utcnow ())
194- update_ts = sqlalchemy . Column ( sqlalchemy . DateTime , default = datetime .utcnow (), onupdate = datetime .utcnow ())
195- is_deleted = sqlalchemy . Column ( sqlalchemy . Boolean , default = False )
196-
197- event : Event = relationship (
187+ event_id : Mapped [ int ] = mapped_column ( Integer , ForeignKey ("event.id" ))
188+ author_name : Mapped [ int ] = mapped_column ( String , nullable = False )
189+ text : Mapped [ int ] = mapped_column ( String , nullable = False )
190+ approve_status : Mapped [ int ] = mapped_column (DbEnum (ApproveStatuses , native_enum = False ), nullable = False )
191+ create_ts : Mapped [ int ] = mapped_column ( DateTime , default = datetime .utcnow ())
192+ update_ts : Mapped [ int ] = mapped_column ( DateTime , default = datetime .utcnow (), onupdate = datetime .utcnow ())
193+ is_deleted : Mapped [ int ] = mapped_column ( Boolean , default = False )
194+
195+ event : Mapped [ Event ] = relationship (
198196 "Event" ,
199197 back_populates = "comments" ,
200198 foreign_keys = "CommentEvent.event_id" ,
0 commit comments