first commit
This commit is contained in:
commit
34ea15a54d
246 changed files with 18660 additions and 0 deletions
181
backend/app/schemas/admin.py
Normal file
181
backend/app/schemas/admin.py
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
|
||||
from app.models.enums import AdminRole, EventStatus, EventType, OrderStatus, TicketTypeStatus
|
||||
|
||||
|
||||
class AdminLoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str = Field(min_length=8, max_length=128)
|
||||
|
||||
|
||||
class AdminToken(BaseModel):
|
||||
access_token: str
|
||||
token_type: str = "bearer"
|
||||
|
||||
|
||||
class AdminUserPublic(BaseModel):
|
||||
id: int
|
||||
email: EmailStr
|
||||
role: AdminRole
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DashboardMetrics(BaseModel):
|
||||
total_revenue_paise: int
|
||||
tickets_sold: int
|
||||
tickets_remaining: int
|
||||
orders_total: int
|
||||
orders_paid: int
|
||||
orders_pending: int
|
||||
attendance: int
|
||||
upcoming_events: int
|
||||
|
||||
|
||||
class EventStatsRow(BaseModel):
|
||||
event_id: int
|
||||
event_title: str
|
||||
starts_at: datetime
|
||||
tickets_sold: int
|
||||
tickets_remaining: int
|
||||
revenue_paise: int
|
||||
attendance: int
|
||||
|
||||
|
||||
class VenueAdmin(BaseModel):
|
||||
id: int
|
||||
slug: str
|
||||
name: str
|
||||
area: str
|
||||
city: str
|
||||
address: str
|
||||
map_url: str | None = None
|
||||
description: str | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class VenueCreate(BaseModel):
|
||||
slug: str = Field(min_length=2, max_length=120)
|
||||
name: str = Field(min_length=2, max_length=200)
|
||||
area: str = Field(min_length=2, max_length=120)
|
||||
city: str = Field(default="Bengaluru", max_length=80)
|
||||
address: str = Field(min_length=5, max_length=512)
|
||||
map_url: str | None = Field(default=None, max_length=512)
|
||||
description: str | None = None
|
||||
|
||||
|
||||
class VenueUpdate(BaseModel):
|
||||
slug: str | None = Field(default=None, max_length=120)
|
||||
name: str | None = Field(default=None, max_length=200)
|
||||
area: str | None = Field(default=None, max_length=120)
|
||||
city: str | None = Field(default=None, max_length=80)
|
||||
address: str | None = Field(default=None, max_length=512)
|
||||
map_url: str | None = Field(default=None, max_length=512)
|
||||
description: str | None = None
|
||||
|
||||
|
||||
class EventAdmin(BaseModel):
|
||||
id: int
|
||||
slug: str
|
||||
title: str
|
||||
category: EventType
|
||||
status: EventStatus
|
||||
venue_id: int
|
||||
description: str | None
|
||||
starts_at: datetime
|
||||
ends_at: datetime | None
|
||||
is_featured: bool
|
||||
cover_image_url: str | None
|
||||
cover_image_alt: str | None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class EventCreate(BaseModel):
|
||||
slug: str = Field(min_length=2, max_length=200)
|
||||
title: str = Field(min_length=2, max_length=240)
|
||||
category: EventType
|
||||
status: EventStatus = EventStatus.draft
|
||||
venue_id: int
|
||||
description: str | None = None
|
||||
starts_at: datetime
|
||||
ends_at: datetime | None = None
|
||||
is_featured: bool = False
|
||||
cover_image_url: str | None = None
|
||||
cover_image_alt: str | None = None
|
||||
|
||||
|
||||
class EventUpdate(BaseModel):
|
||||
slug: str | None = Field(default=None, max_length=200)
|
||||
title: str | None = Field(default=None, max_length=240)
|
||||
category: EventType | None = None
|
||||
status: EventStatus | None = None
|
||||
venue_id: int | None = None
|
||||
description: str | None = None
|
||||
starts_at: datetime | None = None
|
||||
ends_at: datetime | None = None
|
||||
is_featured: bool | None = None
|
||||
cover_image_url: str | None = None
|
||||
cover_image_alt: str | None = None
|
||||
|
||||
|
||||
class TicketTypeAdmin(BaseModel):
|
||||
id: int
|
||||
event_id: int
|
||||
name: str
|
||||
description: str | None
|
||||
price_paise: int
|
||||
quantity_total: int
|
||||
quantity_sold: int
|
||||
remaining: int
|
||||
status: TicketTypeStatus
|
||||
sort_order: int
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class TicketTypeCreate(BaseModel):
|
||||
event_id: int
|
||||
name: str = Field(min_length=1, max_length=120)
|
||||
description: str | None = Field(default=None, max_length=512)
|
||||
price_paise: int = Field(ge=0)
|
||||
quantity_total: int = Field(ge=0)
|
||||
status: TicketTypeStatus = TicketTypeStatus.active
|
||||
sort_order: int = 0
|
||||
|
||||
|
||||
class TicketTypeUpdate(BaseModel):
|
||||
name: str | None = Field(default=None, max_length=120)
|
||||
description: str | None = Field(default=None, max_length=512)
|
||||
price_paise: int | None = Field(default=None, ge=0)
|
||||
quantity_total: int | None = Field(default=None, ge=0)
|
||||
status: TicketTypeStatus | None = None
|
||||
sort_order: int | None = None
|
||||
|
||||
|
||||
class OrderAdmin(BaseModel):
|
||||
id: int
|
||||
user_id: int
|
||||
event_id: int
|
||||
status: OrderStatus
|
||||
total_paise: int
|
||||
currency: str
|
||||
provider_order_id: str | None
|
||||
provider_payment_id: str | None
|
||||
paid_at: datetime | None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class PaymentAdmin(BaseModel):
|
||||
order_id: int
|
||||
event_id: int
|
||||
status: OrderStatus
|
||||
total_paise: int
|
||||
provider_payment_id: str | None
|
||||
payment_reference: str | None
|
||||
paid_at: datetime | None
|
||||
Loading…
Add table
Add a link
Reference in a new issue