Add CRUD operations and tests for Event model
All checks were successful
Build and Push Docker Images / changes (push) Successful in 4s
Build and Push Docker Images / build-backend (push) Successful in 50s
Build and Push Docker Images / build-frontend (push) Has been skipped

This commit introduces a new CRUDEvent class to manage event-related database operations, including retrieval, creation, updating, and deletion of events. It includes corresponding unit tests to ensure the correctness of these functionalities, updates event schemas for enhanced validation, and refines timezone handling for event dates and deadlines.
This commit is contained in:
2025-03-05 14:58:15 +01:00
parent a517df1eab
commit 4a9a37f507
5 changed files with 336 additions and 34 deletions

View File

@@ -1,8 +1,8 @@
from datetime import datetime, time, timezone
from typing import Dict, Optional, List, Union
from typing import Dict, Optional
from uuid import UUID
from pydantic import BaseModel, Field, field_validator
from zoneinfo import ZoneInfo
class EventBase(BaseModel):
@@ -31,6 +31,7 @@ class EventBase(BaseModel):
@field_validator('timezone')
def validate_timezone(cls, v):
from zoneinfo import ZoneInfo
try:
ZoneInfo(v)
return v
@@ -39,15 +40,21 @@ class EventBase(BaseModel):
@field_validator('event_date')
def validate_event_date(cls, v):
if v < datetime.now(tz=timezone.utc):
if not v.tzinfo:
raise ValueError("Event date must be timezone-aware")
now = datetime.now(tz=timezone.utc)
if v < now:
raise ValueError("Event date cannot be in the past")
return v
@field_validator('rsvp_deadline')
def validate_rsvp_deadline(cls, v, values):
if v and 'event_date' in values.data:
if v > values.data['event_date']:
raise ValueError("RSVP deadline must be before event date")
if v:
if not v.tzinfo:
raise ValueError("RSVP deadline must be timezone-aware")
if 'event_date' in values.data:
if v > values.data['event_date']:
raise ValueError("RSVP deadline must be before event date")
return v