Обновление приложения
This commit is contained in:
73
backend/app/api/v1/calendar.py
Normal file
73
backend/app/api/v1/calendar.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from datetime import date
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||
from sqlalchemy.orm import Session
|
||||
from app.auth.dependencies import get_current_user
|
||||
from app.database import get_db
|
||||
from app.models.calendar import CalendarEvent
|
||||
from app.models.user import User
|
||||
from app.schemas.calendar import CalendarEventCreate, CalendarEventUpdate, CalendarEventOut
|
||||
|
||||
router = APIRouter(prefix="/calendar", tags=["calendar"])
|
||||
|
||||
|
||||
@router.get("", response_model=list[CalendarEventOut])
|
||||
def list_events(
|
||||
date_from: date | None = None,
|
||||
date_to: date | None = None,
|
||||
is_completed: bool | None = None,
|
||||
category_id: int | None = None,
|
||||
limit: int = Query(100, le=500),
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
q = db.query(CalendarEvent).filter(CalendarEvent.user_id == current_user.id)
|
||||
if date_from:
|
||||
q = q.filter(CalendarEvent.event_date >= date_from)
|
||||
if date_to:
|
||||
q = q.filter(CalendarEvent.event_date <= date_to)
|
||||
if is_completed is not None:
|
||||
q = q.filter(CalendarEvent.is_completed == is_completed)
|
||||
if category_id:
|
||||
q = q.filter(CalendarEvent.category_id == category_id)
|
||||
return q.order_by(CalendarEvent.event_date, CalendarEvent.event_time).limit(limit).all()
|
||||
|
||||
|
||||
@router.get("/{event_id}", response_model=CalendarEventOut)
|
||||
def get_event(event_id: int, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
obj = db.get(CalendarEvent, event_id)
|
||||
if not obj or obj.user_id != current_user.id:
|
||||
raise HTTPException(status_code=404, detail="Event not found")
|
||||
return obj
|
||||
|
||||
|
||||
@router.post("", response_model=CalendarEventOut, status_code=status.HTTP_201_CREATED)
|
||||
def create_event(body: CalendarEventCreate, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
obj = CalendarEvent(**body.model_dump(), user_id=current_user.id)
|
||||
db.add(obj)
|
||||
db.commit()
|
||||
db.refresh(obj)
|
||||
return obj
|
||||
|
||||
|
||||
@router.patch("/{event_id}", response_model=CalendarEventOut)
|
||||
def update_event(
|
||||
event_id: int, body: CalendarEventUpdate,
|
||||
db: Session = Depends(get_db), current_user: User = Depends(get_current_user)
|
||||
):
|
||||
obj = db.get(CalendarEvent, event_id)
|
||||
if not obj or obj.user_id != current_user.id:
|
||||
raise HTTPException(status_code=404, detail="Event not found")
|
||||
for field, value in body.model_dump(exclude_none=True).items():
|
||||
setattr(obj, field, value)
|
||||
db.commit()
|
||||
db.refresh(obj)
|
||||
return obj
|
||||
|
||||
|
||||
@router.delete("/{event_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
def delete_event(event_id: int, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
obj = db.get(CalendarEvent, event_id)
|
||||
if not obj or obj.user_id != current_user.id:
|
||||
raise HTTPException(status_code=404, detail="Event not found")
|
||||
db.delete(obj)
|
||||
db.commit()
|
||||
Reference in New Issue
Block a user