11from datetime import datetime
22
33from fastapi import Query
4- from pydantic import BaseModel , EmailStr
4+ from pydantic import BaseModel , EmailStr , Field , validator
5+
6+
7+ class PromoCode (BaseModel ):
8+ code : str
9+ discount_percent : float = 0.0
10+ active : bool = True
11+
12+ # make the promo code uppercase
13+ @validator ("code" )
14+ def uppercase_code (cls , v ):
15+ return v .upper ()
16+
17+ @validator ("discount_percent" )
18+ def validate_discount_percent (cls , v ):
19+ assert 0 <= v <= 100 , "Discount must be between 0 and 100."
20+ return v
21+
22+
23+ class EventExtra (BaseModel ):
24+ promo_codes : list [PromoCode ] = Field (default_factory = list )
25+ conditional : bool = False
26+ min_tickets : int = 1
527
628
729class CreateEvent (BaseModel ):
@@ -15,11 +37,7 @@ class CreateEvent(BaseModel):
1537 amount_tickets : int = Query (..., ge = 0 )
1638 price_per_ticket : float = Query (..., ge = 0 )
1739 banner : str | None = None
18-
19-
20- class CreateTicket (BaseModel ):
21- name : str
22- email : EmailStr
40+ extra : EventExtra = Field (default_factory = EventExtra )
2341
2442
2543class Event (BaseModel ):
@@ -28,6 +46,7 @@ class Event(BaseModel):
2846 name : str
2947 info : str
3048 closing_date : str
49+ canceled : bool = False
3150 event_start_date : str
3251 event_end_date : str
3352 currency : str
@@ -36,6 +55,21 @@ class Event(BaseModel):
3655 time : datetime
3756 sold : int = 0
3857 banner : str | None = None
58+ extra : EventExtra = Field (default_factory = EventExtra )
59+
60+
61+ class TicketExtra (BaseModel ):
62+ applied_promo_code : str | None = None
63+ sats_paid : int | None = None
64+ refund_address : str | None = None
65+ refunded : bool = False
66+
67+
68+ class CreateTicket (BaseModel ):
69+ name : str
70+ email : EmailStr
71+ promo_code : str | None = None
72+ refund_address : str | None = None
3973
4074
4175class Ticket (BaseModel ):
@@ -48,3 +82,4 @@ class Ticket(BaseModel):
4882 paid : bool
4983 time : datetime
5084 reg_timestamp : datetime
85+ extra : TicketExtra = Field (default_factory = TicketExtra )
0 commit comments