1- from datetime import datetime
1+ from datetime import datetime as dt
22from operator import attrgetter
33from typing import Any , Dict , List , Optional
44
5- from app .database .database import get_db
6- from app .database .models import Event , User , UserEvent
7- from app .dependencies import templates
8- from app .internal .utils import create_model
95from fastapi import APIRouter , Depends , Request
106from sqlalchemy .exc import SQLAlchemyError
117from sqlalchemy .orm import Session
128from starlette import status
139from starlette .responses import RedirectResponse
10+ from starlette .status import HTTP_302_FOUND
11+
12+ from app .database .database import get_db
13+ from app .database .models import Event , User , UserEvent
14+ from app .dependencies import templates
15+ from app .internal .event import validate_zoom_link
16+ from app .internal .utils import create_model
17+ from app .routers .user import create_user
1418
1519router = APIRouter (
1620 prefix = "/event" ,
@@ -25,6 +29,31 @@ async def eventedit(request: Request):
2529 {"request" : request })
2630
2731
32+ @router .post ("/edit" )
33+ async def create_new_event (request : Request , session = Depends (get_db )):
34+ data = await request .form ()
35+ title = data ['title' ]
36+ content = data ['description' ]
37+ start = dt .strptime (data ['start_date' ] + ' ' + data ['start_time' ],
38+ '%Y-%m-%d %H:%M' )
39+ end = dt .strptime (data ['end_date' ] + ' ' + data ['end_time' ],
40+ '%Y-%m-%d %H:%M' )
41+ user = session .query (User ).filter_by (id = 1 ).first ()
42+ user = user if user else create_user ("u" , "p" , "e@mail.com" , session )
43+ owner_id = user .id
44+ location_type = data ['location_type' ]
45+ is_zoom = location_type == 'vc_url'
46+ location = data ['location' ]
47+
48+ if is_zoom :
49+ validate_zoom_link (location )
50+
51+ event = create_event (session , title , start , end , owner_id , content ,
52+ location )
53+ return RedirectResponse (router .url_path_for ('eventview' , id = event .id ),
54+ status_code = HTTP_302_FOUND )
55+
56+
2857@router .get ("/view/{id}" )
2958async def eventview (request : Request , id : int ):
3059 return templates .TemplateResponse ("event/eventview.html" ,
@@ -37,7 +66,7 @@ def by_id(db: Session, event_id: int) -> Event:
3766 return db .query (Event ).filter (Event .id == event_id ).first ()
3867
3968
40- def is_date_before (start_date : datetime , end_date : datetime ) -> bool :
69+ def is_date_before (start_date : dt , end_date : dt ) -> bool :
4170 """Check if the start date is earlier than the end date"""
4271
4372 return start_date < end_date
@@ -59,7 +88,6 @@ def get_items_that_can_be_updated(event: Dict[str, Any]) -> Dict[str, Any]:
5988
6089def update_event (event_id : int , event : Dict , db : Session
6190 ) -> Optional [Event ]:
62-
6391 # TODO Check if the user is the owner of the event.
6492
6593 event_to_update = get_items_that_can_be_updated (event )
@@ -142,7 +170,7 @@ def delete_event(request: Request,
142170 return templates .TemplateResponse (
143171 "event/eventview.html" , {"request" : request , "event_id" : event_id },
144172 status_code = status .HTTP_500_INTERNAL_SERVER_ERROR )
145- if participants and event .start > datetime .now ():
173+ if participants and event .start > dt .now ():
146174 pass
147175 # TODO: Send them a cancellation notice
148176 # if the deletion is successful
0 commit comments