Skip to content

Commit 7e821b9

Browse files
committed
Split the update_event func and rename the validate_dates fun
1 parent cf52bf2 commit 7e821b9

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

app/routers/event.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import datetime
22
from operator import attrgetter
3-
from typing import Dict, List, Optional
3+
from typing import Dict, List, Optional, Any
44

55
from app.database.models import Event, UserEvent
66
from app.dependencies import templates
@@ -30,33 +30,49 @@ async def eventview(request: Request, id: int):
3030

3131
def by_id(db: Session, event_id: int) -> Event:
3232
"""Select event by id"""
33+
3334
return db.query(Event).filter(Event.id == event_id).first()
3435

3536

36-
def validate_dates(start_date: datetime, end_date: datetime) -> bool:
37+
def is_date_before(start_date: datetime, end_date: datetime) -> bool:
3738
"""Check if the start date is earlier than the end date"""
39+
3840
return start_date < end_date
3941

4042

43+
def is_it_possible_to_change_dates(
44+
db: Session, old_event: Event, event: Dict[str, Any]) -> bool:
45+
return is_date_before(
46+
event.get('start', old_event.start),
47+
event.get('end', old_event.end))
48+
49+
50+
def get_items_that_can_be_updated(event: Dict[str, Any]) -> Dict[str, Any]:
51+
"""Extract only that keys to update"""
52+
53+
return {i: event[i] for i in (
54+
'title', 'start', 'end', 'content', 'location') if i in event}
55+
56+
4157
def update_event(event_id: int, event: Dict, db: Session
4258
) -> Optional[Event]:
59+
4360
# TODO Check if the user is the owner of the event.
4461

45-
# Extract only that keys to update
46-
event_to_update = {i: event[i] for i in (
47-
'title', 'start', 'end', 'content', 'location') if i in event}
48-
if not bool(event_to_update): # Event items is empty
62+
event_to_update = get_items_that_can_be_updated(event)
63+
if not event_to_update:
4964
return None
5065
try:
5166
old_event = by_id(db=db, event_id=event_id)
52-
if old_event is None or not validate_dates(
53-
event_to_update.get('start', old_event.start),
54-
event_to_update.get('end', old_event.end)):
67+
if old_event is None or not is_it_possible_to_change_dates(
68+
db, old_event, event_to_update):
5569
return None
56-
70+
71+
# Update database
5772
db.query(Event).filter(Event.id == event_id).update(
5873
event_to_update, synchronize_session=False)
5974
db.commit()
75+
6076
# TODO: Send emails to recipients.
6177
except (AttributeError, SQLAlchemyError, TypeError):
6278
return None

0 commit comments

Comments
 (0)