ifixkart-backend/app/repositories/ServiceQuoteRepository.py

26 lines
1.5 KiB
Python

from sqlalchemy.orm import Session
from sqlalchemy import select
from typing import List, Optional
from app.repositories.base_repository import BaseRepository
from app.models.ServiceQuoteModel import ServiceJobQuote
from app.models.ServicePaymentModel import ServicePayment
class ServiceQuoteRepository(BaseRepository[ServiceJobQuote]):
def __init__(self):
super().__init__(ServiceJobQuote)
def get_quotes_for_job(self, db: Session, service_job_id: str) -> List[ServiceJobQuote]:
stmt = select(ServiceJobQuote).where(ServiceJobQuote.service_job_id == service_job_id).order_by(ServiceJobQuote.version.desc())
return list(db.execute(stmt).scalars().all())
def get_latest_quote_for_job(self, db: Session, service_job_id: str) -> Optional[ServiceJobQuote]:
stmt = select(ServiceJobQuote).where(ServiceJobQuote.service_job_id == service_job_id).order_by(ServiceJobQuote.version.desc()).limit(1)
return db.execute(stmt).scalar_one_or_none()
def get_payments_for_job(self, db: Session, service_job_id: str) -> List[ServicePayment]:
stmt = select(ServicePayment).where(ServicePayment.service_job_id == service_job_id).order_by(ServicePayment.created_at.desc())
return list(db.execute(stmt).scalars().all())
def get_payment_by_provider_order_id(self, db: Session, order_id: str) -> Optional[ServicePayment]:
stmt = select(ServicePayment).where(ServicePayment.provider_order_id == order_id)
return db.execute(stmt).scalar_one_or_none()