29 lines
1.3 KiB
Python
29 lines
1.3 KiB
Python
"""견적 서비스 파사드 — 관심사별 모듈(mixin)을 QuotationService 하나로 조립한다.
|
|
|
|
밖(라우터·테스트)에서 보는 클래스 이름·메서드 시그니처는 분할 전과 동일하다.
|
|
pricing.py 목표가·앵커 계산 + 산정내역
|
|
build.py 생성·재생성(_build_quotation)
|
|
closing.py 마감 판정·수동 마감·직접 낙찰
|
|
queries.py 조회·삭제·공용 _fetch
|
|
invites.py 초청 메일
|
|
"""
|
|
from fastapi import Depends
|
|
|
|
from crud.quotation_crud import IQuotationCRUD, QuotationCRUD
|
|
from services.quotation.build import BuildMixin
|
|
from services.quotation.closing import ClosingMixin
|
|
from services.quotation.invites import InvitesMixin
|
|
from services.quotation.pricing import PricingMixin
|
|
from services.quotation.queries import QueriesMixin
|
|
|
|
|
|
class QuotationService(PricingMixin, BuildMixin, ClosingMixin, QueriesMixin, InvitesMixin):
|
|
"""견적 비즈니스 로직.
|
|
|
|
회사 스코프(멀티테넌트)는 작성자(user_id)→users.company_id 조인으로 건다(quotations 에 company_id 컬럼이 없음).
|
|
목록(list_quotations)은 회사 스코프로 제한한다. user_id 는 '내 견적만' 추가 필터로도 쓴다.
|
|
"""
|
|
|
|
def __init__(self, quotation_crud: IQuotationCRUD = Depends(QuotationCRUD)):
|
|
self.quotation_crud = quotation_crud
|