attendance / app /models.py
AmaanP314's picture
initial commit
5e37a6e
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")