Files
guilan-ace-backend/apps/payments/api/schemas.py

130 lines
3.2 KiB
Python

from typing import Literal, Optional
from ninja import Schema
from datetime import datetime
from uuid import UUID
class DiscountCodeSchema(Schema):
id: int
code: str
type: str
value: int
max_discount: int | None = None
is_active: bool
starts_at: datetime | None = None
ends_at: datetime | None = None
usage_limit_total: int | None = None
usage_limit_per_user: int | None = None
min_amount: int | None = None
applicable_event_ids: list[int]
usage_count: int = 0
created_at: datetime
updated_at: datetime
class PagedDiscountCodeSchema(Schema):
count: int
results: list[DiscountCodeSchema]
class DiscountCodeWriteSchema(Schema):
code: str
type: str = "percent"
value: int
max_discount: int | None = None
is_active: bool = True
starts_at: datetime | None = None
ends_at: datetime | None = None
usage_limit_total: int | None = None
usage_limit_per_user: int | None = None
min_amount: int | None = None
applicable_event_ids: list[int] = []
class CreatePaymentIn(Schema):
event_id: int
description: str
discount_code: str | None = None
mobile: str | None = None
email: str | None = None
idempotency_key: UUID | None = None
class CreatePaymentOut(Schema):
start_pay_url: str | None = None
authority: str | None = None
payment_id: int | None = None
idempotency_key: UUID | None = None
status: Literal["initiated", "pending", "paid", "failed", "canceled"]
base_amount: int
discount_amount: int
amount: int
class PaymentDetailOut(Schema):
payment_id: int
event_id: int
ref_id: str | None = None
authority: str | None = None
base_amount: int
discount_amount: int
amount: int
status: str
verified_at: str | None = None
gateway_paid_at: str | None = None
refund_status: Literal["none", "pending", "succeeded", "manual_review"] = "none"
refund_attempts: int = 0
refund_last_attempt_at: str | None = None
refund_next_attempt_at: str | None = None
refund_reference: str | None = None
refund_last_error: str | None = None
verification_state: Literal[
"awaiting_verification",
"checking",
"retry_scheduled",
"manual_review",
"verified",
"failed",
"canceled",
]
verification_attempts: int
last_verification_at: str | None = None
next_verification_at: str | None = None
manual_review_at: str | None = None
event: dict
class UserPaymentEventSchema(Schema):
id: int
title: str
slug: str
image_url: Optional[str] = None
class UserPaymentSchema(Schema):
payment_id: int
event: UserPaymentEventSchema
base_amount: int
discount_amount: int
amount: int
status: Literal["initiated", "pending", "paid", "failed", "canceled"]
refund_status: Literal["none", "pending", "succeeded", "manual_review"] = "none"
created_at: datetime
paid_at: Optional[datetime] = None
class PaginatedUserPaymentsSchema(Schema):
count: int
page: int
page_size: int
total_pages: int
results: list[UserPaymentSchema]
class CouponVerifyIn(Schema):
event_id: int
code: str
class CouponVerifyOut(Schema):
discount_amount: int
final_price: int