1
- from datetime import datetime
1
+ from datetime import datetime as dt
2
2
from operator import attrgetter
3
3
from typing import Any , Dict , List , Optional
4
4
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
9
5
from fastapi import APIRouter , Depends , Request
10
6
from sqlalchemy .exc import SQLAlchemyError
11
7
from sqlalchemy .orm import Session
12
8
from starlette import status
13
9
from 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
14
18
15
19
router = APIRouter (
16
20
prefix = "/event" ,
@@ -25,6 +29,31 @@ async def eventedit(request: Request):
25
29
{"request" : request })
26
30
27
31
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" ,
"[email protected] " ,
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
+
28
57
@router .get ("/view/{id}" )
29
58
async def eventview (request : Request , id : int ):
30
59
return templates .TemplateResponse ("event/eventview.html" ,
@@ -37,7 +66,7 @@ def by_id(db: Session, event_id: int) -> Event:
37
66
return db .query (Event ).filter (Event .id == event_id ).first ()
38
67
39
68
40
- def is_date_before (start_date : datetime , end_date : datetime ) -> bool :
69
+ def is_date_before (start_date : dt , end_date : dt ) -> bool :
41
70
"""Check if the start date is earlier than the end date"""
42
71
43
72
return start_date < end_date
@@ -59,7 +88,6 @@ def get_items_that_can_be_updated(event: Dict[str, Any]) -> Dict[str, Any]:
59
88
60
89
def update_event (event_id : int , event : Dict , db : Session
61
90
) -> Optional [Event ]:
62
-
63
91
# TODO Check if the user is the owner of the event.
64
92
65
93
event_to_update = get_items_that_can_be_updated (event )
@@ -142,7 +170,7 @@ def delete_event(request: Request,
142
170
return templates .TemplateResponse (
143
171
"event/eventview.html" , {"request" : request , "event_id" : event_id },
144
172
status_code = status .HTTP_500_INTERNAL_SERVER_ERROR )
145
- if participants and event .start > datetime .now ():
173
+ if participants and event .start > dt .now ():
146
174
pass
147
175
# TODO: Send them a cancellation notice
148
176
# if the deletion is successful
0 commit comments