morozovka-portal/app/models.py

35 lines
1.5 KiB
Python

from sqlmodel import SQLModel, Field
from typing import Optional
from datetime import datetime, timezone
class User(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
gitea_id: int = Field(unique=True, index=True)
username: str = Field(index=True)
full_name: Optional[str] = None
email: Optional[str] = None
role: str = Field(default="student") # admin, professor, lead, member, student
is_active: bool = Field(default=True)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class Event(SQLModel, table=True):
"""Событие в расписании."""
id: Optional[int] = Field(default=None, primary_key=True)
title: str
event_type: str = Field(default="lecture") # lecture, workshop, meeting, personal
start_time: datetime
end_time: datetime
location: Optional[str] = None
description: Optional[str] = None
status: str = Field(default="scheduled") # scheduled, moved, cancelled, delayed
is_public: bool = Field(default=True)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
class GlobalStatus(SQLModel, table=True):
"""Текущий статус Морозова."""
id: Optional[int] = Field(default=None, primary_key=True)
status: str = Field(default="free") # free, on_place, delayed, away, cancelled
delay_minutes: int = Field(default=0)
message: Optional[str] = None
updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))