69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
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) |