from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, LargeBinary, UniqueConstraint from sqlalchemy.orm import relationship from database import Base import datetime class Student(Base): __tablename__ = "students" id = Column(Integer, primary_key=True, index=True) name = Column(String(100), nullable=False) email = Column(String(100), nullable=False, unique=True, index=True) __table_args__ = (UniqueConstraint('email', name='uq_student_email'),) checkins = relationship("CheckInLog", back_populates="student") encodings = relationship("StudentEncoding", back_populates="student") class StudentEncoding(Base): __tablename__ = "student_encodings" id = Column(Integer, primary_key=True, index=True) student_id = Column(Integer, ForeignKey("students.id")) encoding = Column(LargeBinary, nullable=False) created_at = Column(DateTime, default=datetime.datetime.utcnow) student = relationship("Student", back_populates="encodings") class CheckInLog(Base): __tablename__ = "checkin_logs" id = Column(Integer, primary_key=True, index=True) student_id = Column(Integer, ForeignKey("students.id")) time = Column(DateTime, default=datetime.datetime.utcnow) camera_id = Column(String(100)) student = relationship("Student", back_populates="checkins")