107 lines
2.4 KiB
Python
107 lines
2.4 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
|
|
event: dict
|
|
|
|
|
|
class UserPaymentEventSchema(Schema):
|
|
title: str
|
|
slug: str
|
|
image_url: Optional[str] = None
|
|
|
|
|
|
class UserPaymentSchema(Schema):
|
|
event: UserPaymentEventSchema
|
|
base_amount: int
|
|
discount_amount: int
|
|
amount: int
|
|
status: Literal["initiated", "pending", "paid", "failed", "canceled"]
|
|
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
|