11from __future__ import annotations
22
3+ import uuid
34import datetime
45from enum import Enum
6+ from typing import List
57
6- from sqlalchemy import Boolean , Date , Integer , String , Text , Numeric , Enum , DateTime
8+ from sqlalchemy import Boolean , Date , Integer , String , Text , Numeric , Enum as SQLEnum , DateTime , UUID , ARRAY , ForeignKey
79from sqlalchemy .orm import Mapped , mapped_column , relationship
810
911from .base import BaseDbModel
12+ from .db_editor import Document
1013
1114
1215
1316class Role (str , Enum ):
14- USER : str = "user"
1517 EDITOR : str = "editor"
1618 ADMIN : str = "admin"
1719
@@ -20,12 +22,15 @@ class User(BaseDbModel):
2022 __tablename__ = 'user'
2123
2224 id : Mapped [int ] = mapped_column (Integer , primary_key = True , autoincrement = True )
23- first_name : Mapped [str ] = mapped_column (String , nullable = False )
24- last_name : Mapped [str ] = mapped_column (String , nullable = False )
25- middle_name : Mapped [str ] = mapped_column (String , nullable = True )
26- created_at : Mapped [datetime .datetime ] = mapped_column (DateTime , default = datetime .now )
27-
28- rule : Mapped [User ] = mapped_column (Enum (Role , native_enum = False ), nullable = False )
25+ first_name : Mapped [str ] = mapped_column (String (100 ), nullable = False ) # Добавлена длина
26+ last_name : Mapped [str ] = mapped_column (String (100 ), nullable = False )
27+ middle_name : Mapped [str ] = mapped_column (String (100 ), nullable = True ) # Добавлена длина
28+ user_login : Mapped [str ] = mapped_column (String (50 ), nullable = False , unique = True )
29+ password_hashed : Mapped [str ] = mapped_column (String (255 ), nullable = False )
30+ is_active : Mapped [bool ] = mapped_column (Boolean , default = True )
31+ role : Mapped [Role ] = mapped_column (SQLEnum (Role , native_enum = False ), nullable = False )
32+
33+ documents : Mapped [List ["Document" ]] = relationship ("Document" , back_populates = "uploaded_by" )
2934
3035
3136class FinesData (BaseDbModel ):
@@ -42,34 +47,32 @@ class FinesData(BaseDbModel):
4247 fines_collected : Mapped [float ] = mapped_column (Numeric (15 , 2 ), nullable = False )
4348
4449
45- class Evacuations (BaseDbModel ):
46- __tablename__ = 'evacuations_data '
50+ class EvacuationRoute (BaseDbModel ):
51+ __tablename__ = 'evacuation_routes '
4752
4853 id : Mapped [int ] = mapped_column (Integer , primary_key = True , autoincrement = True )
49- date : Mapped [datetime .date ] = mapped_column (Date , nullable = False , index = True )
5054 year : Mapped [int ] = mapped_column (Integer , nullable = False , index = True )
5155 month : Mapped [int ] = mapped_column (Integer , nullable = False )
56+ route_path : Mapped [str ] = mapped_column (Text )
5257
53- tow_trucks_online : Mapped [int ] = mapped_column (Integer , nullable = False )
54- dispatches_count : Mapped [int ] = mapped_column (Integer , nullable = False )
55- evacuations_count : Mapped [int ] = mapped_column (Integer , nullable = False )
56- parking_receipts : Mapped [float ] = mapped_column (Numeric (15 , 2 ), nullable = False )
57-
58+ evacuations : Mapped [List ["Evacuations" ]] = relationship ("Evacuations" , back_populates = "route" )
5859
59- class EvacuationRoute (BaseDbModel ):
60- __tablename__ = 'evacuation_routes '
60+ class Evacuations (BaseDbModel ):
61+ __tablename__ = 'evacuations '
6162
6263 id : Mapped [int ] = mapped_column (Integer , primary_key = True , autoincrement = True )
64+ date : Mapped [datetime .date ] = mapped_column (Date , nullable = False , index = True )
6365 year : Mapped [int ] = mapped_column (Integer , nullable = False , index = True )
6466 month : Mapped [int ] = mapped_column (Integer , nullable = False )
6567
66- route_description : Mapped [str ] = mapped_column (Text , nullable = False )
67- route_path : Mapped [str ] = mapped_column (Text )
68+ route_id : Mapped [int ] = mapped_column (ForeignKey ('evacuation_routes.id' ), nullable = True )
6869
70+ evacuators_count : Mapped [int ] = mapped_column (Integer , nullable = False )
71+ call_count : Mapped [int ] = mapped_column (Integer , nullable = False )
72+ evacuations_count : Mapped [int ] = mapped_column (Integer , nullable = False )
73+ collected_sum : Mapped [float ] = mapped_column (Numeric (15 , 2 ), nullable = False )
6974
70- evacuations = relationship ("EvacuationsData" ,
71- primaryjoin = "and_(EvacuationsData.year == EvacuationRoute.year, "
72- "EvacuationsData.month == EvacuationRoute.month)" )
75+ route : Mapped [EvacuationRoute ] = relationship ("EvacuationRoute" , back_populates = "evacuations" )
7376
7477
7578class TrafficLight (BaseDbModel ):
@@ -81,4 +84,3 @@ class TrafficLight(BaseDbModel):
8184 installation_year : Mapped [int ] = mapped_column (Integer , nullable = False )
8285 worked : Mapped [bool ] = mapped_column (Boolean , nullable = True )
8386
84-
0 commit comments