11from fastapi import APIRouter , Depends , Query
2- from sqlalchemy .ext .asyncio import AsyncSession
32
43from app .api .v1 .deps import require_login
5- from app .db . session import get_db
6- from app .schemas . event import (
4+ from app .event . dependencies import get_event_service
5+ from app .event . schemas import (
76 EventApplicationsResp ,
87 EventCreateReq ,
98 EventListResp ,
109 EventResp ,
1110)
12- from app .services import event as event_service
11+ from app .event . service import EventService
1312
1413router = APIRouter (prefix = "/event" , tags = ["Event" ])
1514
1615
1716@router .get ("/owner" , response_model = EventListResp )
1817async def get_owner_events (
19- db : AsyncSession = Depends (get_db ),
2018 owner_id : str = Depends (require_login ),
19+ service : EventService = Depends (get_event_service ),
2120) -> EventListResp :
22- events = await event_service .list_owner_events (db , owner_id )
21+ events = await service .list_owner_events (owner_id )
2322 return EventListResp (
2423 events = [
2524 EventResp (
@@ -35,12 +34,29 @@ async def get_owner_events(
3534 )
3635
3736
37+ @router .post ("" , response_model = EventResp )
38+ async def create_event (
39+ body : EventCreateReq ,
40+ owner_id : str = Depends (require_login ),
41+ service : EventService = Depends (get_event_service ),
42+ ) -> EventResp :
43+ event = await service .create_event (owner_id , body )
44+ return EventResp (
45+ id = str (event .id ),
46+ title = event .title ,
47+ condition = event .condition ,
48+ reward = event .reward / 10 ** 18 ,
49+ isActive = event .is_active ,
50+ contractAddress = event .contract_address ,
51+ )
52+
53+
3854@router .get ("/{eventId}" , response_model = EventResp )
3955async def get_event (
4056 eventId : str ,
41- db : AsyncSession = Depends (get_db ),
57+ service : EventService = Depends (get_event_service ),
4258) -> EventResp :
43- event = await event_service . get_event_or_404 ( db , eventId )
59+ event = await service . get_event ( eventId )
4460 return EventResp (
4561 id = str (event .id ),
4662 title = event .title ,
@@ -51,17 +67,30 @@ async def get_event(
5167 )
5268
5369
70+ @router .delete ("/{eventId}" , response_model = None )
71+ async def delete_event (
72+ eventId : str ,
73+ owner_id : str = Depends (require_login ),
74+ service : EventService = Depends (get_event_service ),
75+ ) -> None :
76+ await service .delete_event (eventId , owner_id )
77+
78+
5479@router .get ("/{eventId}/applications" , response_model = EventApplicationsResp )
5580async def get_event_applications (
5681 eventId : str ,
5782 status : str | None = Query (default = None ),
5883 page : int = Query (default = 0 , ge = 0 ),
5984 size : int = Query (default = 20 , ge = 1 ),
60- db : AsyncSession = Depends (get_db ),
6185 owner_id : str = Depends (require_login ),
86+ service : EventService = Depends (get_event_service ),
6287) -> EventApplicationsResp :
63- applications , total = await event_service .list_event_applications (
64- db , eventId , owner_id , status , page , size
88+ applications , total = await service .list_event_applications (
89+ eventId ,
90+ owner_id ,
91+ status_filter = status ,
92+ page = page ,
93+ size = size ,
6594 )
6695 total_pages = max (1 , (total + size - 1 ) // size )
6796 return EventApplicationsResp (
@@ -71,29 +100,3 @@ async def get_event_applications(
71100 totalPages = total_pages ,
72101 hasNext = (page + 1 ) < total_pages ,
73102 )
74-
75-
76- @router .delete ("/{eventId}" , response_model = None )
77- async def delete_event (
78- eventId : str ,
79- db : AsyncSession = Depends (get_db ),
80- owner_id : str = Depends (require_login ),
81- ) -> None :
82- await event_service .delete_event (db , eventId , owner_id )
83-
84-
85- @router .post ("" , response_model = EventResp )
86- async def create_event (
87- body : EventCreateReq ,
88- db : AsyncSession = Depends (get_db ),
89- owner_id : str = Depends (require_login ),
90- ) -> EventResp :
91- event = await event_service .create_event (db , owner_id , body )
92- return EventResp (
93- id = str (event .id ),
94- title = event .title ,
95- condition = event .condition ,
96- reward = event .reward / 10 ** 18 ,
97- isActive = event .is_active ,
98- contractAddress = event .contract_address ,
99- )
0 commit comments