Spaces:
Sleeping
Sleeping
File size: 1,829 Bytes
5e37a6e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | from sqlalchemy import Column, Integer, String, ForeignKey, Time, DateTime, Enum as SQLAlchemyEnum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import enum
from .database import Base
class UserRole(enum.Enum):
teacher = "teacher"
student = "student"
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True, nullable=False)
hashed_password = Column(String, nullable=False)
full_name = Column(String, nullable=False)
role = Column(SQLAlchemyEnum(UserRole), nullable=False)
class Subject(Base):
__tablename__ = "subjects"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
code = Column(String, unique=True, nullable=False)
class TimetableSlot(Base):
__tablename__ = "timetable_slots"
id = Column(Integer, primary_key=True, index=True)
subject_id = Column(Integer, ForeignKey("subjects.id"), nullable=False)
teacher_id = Column(Integer, ForeignKey("users.id"), nullable=False)
day_of_week = Column(Integer, nullable=False) # 0=Monday, 1=Tuesday...
start_time = Column(Time, nullable=False)
end_time = Column(Time, nullable=False)
subject = relationship("Subject")
teacher = relationship("User")
class AttendanceRecord(Base):
__tablename__ = "attendance_records"
id = Column(Integer, primary_key=True, index=True)
student_id = Column(Integer, ForeignKey("users.id"), nullable=False)
slot_id = Column(Integer, ForeignKey("timetable_slots.id"), nullable=False)
session_id = Column(String, nullable=False, index=True)
timestamp = Column(DateTime(timezone=True), server_default=func.now())
student = relationship("User")
slot = relationship("TimetableSlot")
|