1- from fastapi import APIRouter , Request
1+ import re
2+ from datetime import datetime as dt
3+ from fastapi import APIRouter , Request , Depends , HTTPException
4+ from fastapi .responses import RedirectResponse
5+ from starlette .status import HTTP_303_SEE_OTHER
26
7+ from app .database .database import get_db
8+ from app .database .models import Event , User
39from app .dependencies import templates
410
11+ ZOOM_REGEX = re .compile ('https://.*?\.zoom.us/[a-z]/.[^.,\b \t \n ]+' )
12+
513router = APIRouter (
614 prefix = "/event" ,
715 tags = ["event" ],
@@ -15,6 +23,28 @@ async def eventedit(request: Request):
1523 {"request" : request })
1624
1725
26+ @router .post ("/edit" )
27+ async def create_event (request : Request , session = Depends (get_db )):
28+ data = await request .form ()
29+ print (data )
30+ title = data ['title' ]
31+ content = data ['description' ]
32+ start = dt .strptime (data ['start_date' ] + ' ' + data ['start_time' ], '%Y-%m-%d %H:%M' )
33+ end = dt .strptime (data ['end_date' ] + ' ' + data ['end_time' ], '%Y-%m-%d %H:%M' )
34+ user = session .query (User ).filter_by (id = 1 ).first ()
35+ owner_id = user .id
36+ location_type = data ['location_type' ]
37+ is_zoom = location_type == 'vc_url'
38+ location = data ['location' ]
39+
40+ if is_zoom and not ZOOM_REGEX .findall (location ):
41+ raise HTTPException (status_code = 400 , detail = "VC type with no valid zoom link" )
42+ event = Event (title = title , content = content , start = start , end = end , owner_id = owner_id )
43+ session .add (event )
44+ session .commit ()
45+ return RedirectResponse (f'/event/view/{ event .id } ' , status_code = HTTP_303_SEE_OTHER )
46+
47+
1848@router .get ("/view/{id}" )
1949async def eventview (request : Request , id : int ):
2050 return templates .TemplateResponse ("event/eventview.html" ,
0 commit comments