39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
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)
|
|
avatar = Column(String(500), nullable=True, 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)
|
|
status = Column(String(100), nullable=True, unique=True)
|
|
camera_id = Column(String(100))
|
|
|
|
student = relationship("Student", back_populates="checkins")
|