| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- from typing import Protocol
- from app.domains.enrollment.models import (
- AsyncTask,
- EnrollmentDraft,
- EnrollmentOrder,
- OutboxEvent,
- PaymentTransaction,
- Policy,
- Quote,
- UserConfirmation,
- )
- class EnrollmentRepository(Protocol):
- def save_quote(self, quote: Quote) -> None: ...
- def get_quote(self, quote_id: str) -> Quote | None: ...
- def save_draft(self, draft: EnrollmentDraft) -> None: ...
- def get_draft(self, draft_id: str) -> EnrollmentDraft | None: ...
- def save_confirmation(self, confirmation: UserConfirmation) -> None: ...
- def get_confirmation_by_token_hash(self, token_hash: str) -> UserConfirmation | None: ...
- def save_order(self, order: EnrollmentOrder) -> None: ...
- def get_order(self, order_id: str) -> EnrollmentOrder | None: ...
- def find_order_by_idempotency(
- self, user_id: str, idempotency_key: str
- ) -> EnrollmentOrder | None: ...
- def list_orders(self, user_id: str | None = None) -> list[EnrollmentOrder]: ...
- def save_payment(self, payment: PaymentTransaction) -> None: ...
- def get_payment(self, payment_id: str) -> PaymentTransaction | None: ...
- def get_payment_by_no(self, payment_no: str) -> PaymentTransaction | None: ...
- def get_payment_by_order(self, order_id: str) -> PaymentTransaction | None: ...
- def find_payment_by_idempotency(
- self, order_id: str, idempotency_key: str
- ) -> PaymentTransaction | None: ...
- def save_policy(self, policy: Policy) -> None: ...
- def get_policy_by_order(self, order_id: str) -> Policy | None: ...
- def list_policies(self, user_id: str | None = None) -> list[Policy]: ...
- def save_outbox_event(self, event: OutboxEvent) -> None: ...
- def save_task(self, task: AsyncTask) -> None: ...
- def get_task_by_idempotency(self, idempotency_key: str) -> AsyncTask | None: ...
- class InMemoryEnrollmentRepository:
- def __init__(self) -> None:
- self._quotes: dict[str, Quote] = {}
- self._drafts: dict[str, EnrollmentDraft] = {}
- self._confirmations: dict[str, UserConfirmation] = {}
- self._orders: dict[str, EnrollmentOrder] = {}
- self._payments: dict[str, PaymentTransaction] = {}
- self._policies: dict[str, Policy] = {}
- self._outbox_events: dict[str, OutboxEvent] = {}
- self._tasks: dict[str, AsyncTask] = {}
- def save_quote(self, quote: Quote) -> None:
- self._quotes[quote.id] = quote
- def get_quote(self, quote_id: str) -> Quote | None:
- return self._quotes.get(quote_id)
- def save_draft(self, draft: EnrollmentDraft) -> None:
- self._drafts[draft.id] = draft
- def get_draft(self, draft_id: str) -> EnrollmentDraft | None:
- return self._drafts.get(draft_id)
- def save_confirmation(self, confirmation: UserConfirmation) -> None:
- self._confirmations[confirmation.id] = confirmation
- def get_confirmation_by_token_hash(self, token_hash: str) -> UserConfirmation | None:
- return next(
- (
- confirmation
- for confirmation in self._confirmations.values()
- if confirmation.token_hash == token_hash
- ),
- None,
- )
- def save_order(self, order: EnrollmentOrder) -> None:
- self._orders[order.id] = order
- def get_order(self, order_id: str) -> EnrollmentOrder | None:
- return self._orders.get(order_id)
- def find_order_by_idempotency(
- self, user_id: str, idempotency_key: str
- ) -> EnrollmentOrder | None:
- return next(
- (
- order
- for order in self._orders.values()
- if order.user_id == user_id and order.idempotency_key == idempotency_key
- ),
- None,
- )
- def list_orders(self, user_id: str | None = None) -> list[EnrollmentOrder]:
- return [
- order for order in self._orders.values() if user_id is None or order.user_id == user_id
- ]
- def save_payment(self, payment: PaymentTransaction) -> None:
- self._payments[payment.id] = payment
- def get_payment(self, payment_id: str) -> PaymentTransaction | None:
- return self._payments.get(payment_id)
- def get_payment_by_no(self, payment_no: str) -> PaymentTransaction | None:
- return next(
- (payment for payment in self._payments.values() if payment.payment_no == payment_no),
- None,
- )
- def get_payment_by_order(self, order_id: str) -> PaymentTransaction | None:
- return next(
- (payment for payment in self._payments.values() if payment.order_id == order_id),
- None,
- )
- def find_payment_by_idempotency(
- self, order_id: str, idempotency_key: str
- ) -> PaymentTransaction | None:
- return next(
- (
- payment
- for payment in self._payments.values()
- if payment.order_id == order_id and payment.idempotency_key == idempotency_key
- ),
- None,
- )
- def save_policy(self, policy: Policy) -> None:
- self._policies[policy.id] = policy
- def get_policy_by_order(self, order_id: str) -> Policy | None:
- return next(
- (policy for policy in self._policies.values() if policy.order_id == order_id),
- None,
- )
- def list_policies(self, user_id: str | None = None) -> list[Policy]:
- return [
- policy
- for policy in self._policies.values()
- if user_id is None or policy.user_id == user_id
- ]
- def save_outbox_event(self, event: OutboxEvent) -> None:
- self._outbox_events[event.id] = event
- def save_task(self, task: AsyncTask) -> None:
- self._tasks[task.id] = task
- def get_task_by_idempotency(self, idempotency_key: str) -> AsyncTask | None:
- return next(
- (task for task in self._tasks.values() if task.idempotency_key == idempotency_key),
- None,
- )
|