Spaces:
Sleeping
Sleeping
File size: 3,107 Bytes
dd3f4b9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | from pydantic import BaseModel, EmailStr
from typing import Optional, List
from datetime import datetime
from uuid import UUID
from decimal import Decimal
# Auth Schemas
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
user_id: Optional[UUID] = None
# User Schemas
class UserBase(BaseModel):
username: str
email: EmailStr
name: Optional[str] = None
class UserCreate(UserBase):
password: str
class UserLogin(BaseModel):
email: EmailStr
password: str
class UserUpdate(BaseModel):
name: Optional[str] = None
avatar_url: Optional[str] = None
timezone: Optional[str] = None
currency: Optional[str] = None
class User(UserBase):
id: UUID
balance: Decimal
role: str
status: str
created_at: datetime
class Config:
from_attributes = True
# Category Schemas
class CategoryBase(BaseModel):
name: str
slug: str
description: Optional[str] = None
icon: Optional[str] = None
sort_order: int = 0
is_active: bool = True
class Category(CategoryBase):
id: int
class Config:
from_attributes = True
# Service Schemas
class ServiceBase(BaseModel):
category_id: int
name: str
description: Optional[str] = None
price_per_1000: Decimal
min_quantity: int
max_quantity: int
average_time: Optional[str] = None
status: str = "active"
class Service(ServiceBase):
id: int
class Config:
from_attributes = True
# Order Schemas
class OrderBase(BaseModel):
service_id: int
link: str
quantity: int
class OrderCreate(OrderBase):
pass
class Order(OrderBase):
id: int
user_id: UUID
charge: Decimal
status: str
start_count: int
remains: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
# Transaction Schemas
class TransactionBase(BaseModel):
amount: Decimal
type: str
payment_method: str
note: Optional[str] = None
class TransactionCreate(TransactionBase):
pass
class Transaction(TransactionBase):
id: UUID
user_id: UUID
status: str
balance_before: Optional[Decimal] = None
balance_after: Optional[Decimal] = None
created_at: datetime
class Config:
from_attributes = True
# Ticket Schemas
class TicketBase(BaseModel):
subject: str
priority: str = "Normal"
order_id: Optional[int] = None
class TicketCreate(TicketBase):
message: str
class Ticket(TicketBase):
id: int
user_id: UUID
status: str
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class TicketMessageBase(BaseModel):
message: str
class TicketMessageCreate(TicketMessageBase):
pass
class TicketMessage(TicketMessageBase):
id: int
ticket_id: int
user_id: UUID
is_admin: bool
created_at: datetime
class Config:
from_attributes = True
|