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()