70 lines
2.1 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from app.crud.base import CRUDBase
from app.models.deposit import Deposit, DepositStatus
from app.schemas.deposit import DepositCreate, DepositUpdate
class CRUDDeposit(CRUDBase[Deposit, DepositCreate, DepositUpdate]):
def get_by_user(
self, db: Session, *, user_id: int, skip: int = 0, limit: int = 100
) -> List[Deposit]:
return (
db.query(Deposit)
.filter(Deposit.user_id == user_id)
.order_by(Deposit.created_at.desc())
.offset(skip)
.limit(limit)
.all()
)
def get_by_status(
self, db: Session, *, status: str, skip: int = 0, limit: int = 100
) -> List[Deposit]:
return (
db.query(Deposit)
.filter(Deposit.status == status)
.order_by(Deposit.created_at.desc())
.offset(skip)
.limit(limit)
.all()
)
def get_all_pending(
self, db: Session, *, skip: int = 0, limit: int = 100
) -> List[Deposit]:
return self.get_by_status(db, status=DepositStatus.PENDING, skip=skip, limit=limit)
def approve(
self, db: Session, *, db_obj: Deposit, admin_notes: Optional[str] = None
) -> Deposit:
update_data = {"status": DepositStatus.APPROVED}
if admin_notes:
update_data["admin_notes"] = admin_notes
return super().update(db, db_obj=db_obj, obj_in=update_data)
def reject(
self, db: Session, *, db_obj: Deposit, admin_notes: str
) -> Deposit:
update_data = {
"status": DepositStatus.REJECTED,
"admin_notes": admin_notes
}
return super().update(db, db_obj=db_obj, obj_in=update_data)
deposit = CRUDDeposit(Deposit)
# Aliases for convenience
get_deposit = deposit.get
create_deposit = deposit.create
get_deposits_by_user = deposit.get_by_user
get_deposits_by_status = deposit.get_by_status
get_all_pending_deposits = deposit.get_all_pending
approve_deposit = deposit.approve
reject_deposit = deposit.reject