from datetime import date from typing import List from sqlalchemy.orm import Session from app.crud.base import CRUDBase from app.models.rental import RentalRecord from app.schemas.rental_record import RentalRecordCreate, RentalRecordUpdate class CRUDRentalRecord(CRUDBase[RentalRecord, RentalRecordCreate, RentalRecordUpdate]): """ CRUD operations for RentalRecord model. """ def get_by_customer( self, db: Session, *, customer_id: int, skip: int = 0, limit: int = 100 ) -> List[RentalRecord]: """ Get all rental records for a customer. """ return db.query(RentalRecord)\ .filter(RentalRecord.customer_id == customer_id)\ .offset(skip)\ .limit(limit)\ .all() def get_by_item( self, db: Session, *, item_id: int, skip: int = 0, limit: int = 100 ) -> List[RentalRecord]: """ Get all rental records for an item. """ return db.query(RentalRecord)\ .filter(RentalRecord.item_id == item_id)\ .offset(skip)\ .limit(limit)\ .all() def get_active( self, db: Session, *, skip: int = 0, limit: int = 100 ) -> List[RentalRecord]: """ Get all active rental records (not yet returned). """ return db.query(RentalRecord)\ .filter(RentalRecord.actual_return_date is None)\ .offset(skip)\ .limit(limit)\ .all() def get_by_date_range( self, db: Session, *, start_date: date, end_date: date, skip: int = 0, limit: int = 100 ) -> List[RentalRecord]: """ Get all rental records within a date range. """ return db.query(RentalRecord)\ .filter( RentalRecord.rental_date >= start_date, RentalRecord.return_date <= end_date )\ .offset(skip)\ .limit(limit)\ .all() rental_record = CRUDRentalRecord(RentalRecord)