Spaces:
Sleeping
Sleeping
| 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") | |