from typing import List from sqlalchemy.orm import Session from datetime import date from app.models.attendance import Attendance from app.schemas.attendance import AttendanceCreate, AttendanceUpdate from app.services.base import CRUDBase class CRUDAttendance(CRUDBase[Attendance, AttendanceCreate, AttendanceUpdate]): def get_by_student(self, db: Session, *, student_id: int) -> List[Attendance]: return db.query(Attendance).filter(Attendance.student_id == student_id).all() def get_by_class(self, db: Session, *, class_id: int) -> List[Attendance]: return db.query(Attendance).filter(Attendance.class_id == class_id).all() def get_by_date(self, db: Session, *, date: date) -> List[Attendance]: return db.query(Attendance).filter(Attendance.date == date).all() def get_by_student_and_date(self, db: Session, *, student_id: int, date: date) -> Attendance: return db.query(Attendance).filter( Attendance.student_id == student_id, Attendance.date == date ).first() def create_with_teacher(self, db: Session, *, obj_in: AttendanceCreate, teacher_id: int) -> Attendance: obj_in_data = obj_in.dict() obj_in_data["marked_by"] = teacher_id db_obj = Attendance(**obj_in_data) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj attendance_service = CRUDAttendance(Attendance)