GrowthPanelBackend / schemas.py
hisham-cmd's picture
Upload schemas.py
dd3f4b9 verified
Raw
History Blame Contribute Delete
3.11 kB
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