mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
155 lines
4.6 KiB
Python
155 lines
4.6 KiB
Python
from flask import make_response
|
|
from flask_apispec import doc, marshal_with, use_kwargs
|
|
|
|
from project import db
|
|
from project.access import access_or_401, login_api_user_or_401
|
|
from project.api import add_api_resource
|
|
from project.api.event.schemas import EventListRequestSchema, EventListResponseSchema
|
|
from project.api.event_list.schemas import (
|
|
EventListPatchRequestSchema,
|
|
EventListSchema,
|
|
EventListUpdateRequestSchema,
|
|
)
|
|
from project.api.resources import BaseResource, require_api_access
|
|
from project.models import Event, EventList
|
|
from project.services.event import get_events_query
|
|
from project.services.event_search import EventSearchParams
|
|
|
|
|
|
class EventListModelResource(BaseResource):
|
|
@doc(summary="Get event list", tags=["Event Lists"])
|
|
@marshal_with(EventListSchema)
|
|
@require_api_access()
|
|
def get(self, id):
|
|
return EventList.query.get_or_404(id)
|
|
|
|
@doc(
|
|
summary="Update event list",
|
|
tags=["Event Lists"],
|
|
)
|
|
@use_kwargs(EventListUpdateRequestSchema, location="json", apply=False)
|
|
@marshal_with(None, 204)
|
|
@require_api_access("eventlist:write")
|
|
def put(self, id):
|
|
login_api_user_or_401()
|
|
event_list = EventList.query.get_or_404(id)
|
|
access_or_401(event_list.adminunit, "admin_unit:update")
|
|
|
|
event_list = self.update_instance(
|
|
EventListUpdateRequestSchema, instance=event_list
|
|
)
|
|
db.session.commit()
|
|
|
|
return make_response("", 204)
|
|
|
|
@doc(
|
|
summary="Patch event list",
|
|
tags=["Event Lists"],
|
|
)
|
|
@use_kwargs(EventListPatchRequestSchema, location="json", apply=False)
|
|
@marshal_with(None, 204)
|
|
@require_api_access("eventlist:write")
|
|
def patch(self, id):
|
|
login_api_user_or_401()
|
|
event_list = EventList.query.get_or_404(id)
|
|
access_or_401(event_list.adminunit, "admin_unit:update")
|
|
|
|
event_list = self.update_instance(
|
|
EventListPatchRequestSchema, instance=event_list
|
|
)
|
|
db.session.commit()
|
|
|
|
return make_response("", 204)
|
|
|
|
@doc(
|
|
summary="Delete event list",
|
|
tags=["Event Lists"],
|
|
)
|
|
@marshal_with(None, 204)
|
|
@require_api_access("eventlist:write")
|
|
def delete(self, id):
|
|
login_api_user_or_401()
|
|
event_list = EventList.query.get_or_404(id)
|
|
access_or_401(event_list.adminunit, "admin_unit:update")
|
|
|
|
db.session.delete(event_list)
|
|
db.session.commit()
|
|
|
|
return make_response("", 204)
|
|
|
|
|
|
class EventListEventListResource(BaseResource):
|
|
@doc(
|
|
summary="List events of event lists",
|
|
tags=["Event Lists", "Events"],
|
|
)
|
|
@use_kwargs(EventListRequestSchema, location=("query"))
|
|
@marshal_with(EventListResponseSchema)
|
|
@require_api_access()
|
|
def get(self, id, **kwargs):
|
|
params = EventSearchParams()
|
|
params.event_list_id = id
|
|
pagination = get_events_query(params).paginate()
|
|
return pagination
|
|
|
|
|
|
class EventListEventListWriteResource(BaseResource):
|
|
@doc(
|
|
summary="Add event",
|
|
tags=["Event Lists", "Events"],
|
|
)
|
|
@marshal_with(None, 204)
|
|
@require_api_access("eventlist:write")
|
|
def put(self, id, event_id):
|
|
login_api_user_or_401()
|
|
event_list = EventList.query.get_or_404(id)
|
|
access_or_401(event_list.adminunit, "admin_unit:update")
|
|
event = Event.query.get_or_404(event_id)
|
|
|
|
exists = (
|
|
Event.query.with_parent(event_list).filter(Event.id == event_id).first()
|
|
)
|
|
if not exists:
|
|
event_list.events.append(event)
|
|
db.session.commit()
|
|
|
|
return make_response("", 204)
|
|
|
|
@doc(
|
|
summary="Remove event",
|
|
tags=["Event Lists", "Events"],
|
|
)
|
|
@marshal_with(None, 204)
|
|
@require_api_access("eventlist:write")
|
|
def delete(self, id, event_id):
|
|
login_api_user_or_401()
|
|
event_list = EventList.query.get_or_404(id)
|
|
access_or_401(event_list.adminunit, "admin_unit:update")
|
|
event = Event.query.get_or_404(event_id)
|
|
|
|
exists = (
|
|
Event.query.with_parent(event_list).filter(Event.id == event_id).first()
|
|
)
|
|
if exists:
|
|
event_list.events.remove(event)
|
|
db.session.commit()
|
|
|
|
return make_response("", 204)
|
|
|
|
|
|
add_api_resource(
|
|
EventListModelResource, "/event-lists/<int:id>", "api_v1_event_list_model"
|
|
)
|
|
|
|
add_api_resource(
|
|
EventListEventListResource,
|
|
"/event-lists/<int:id>/events",
|
|
"api_v1_event_list_event_list",
|
|
)
|
|
|
|
add_api_resource(
|
|
EventListEventListWriteResource,
|
|
"/event-lists/<int:id>/events/<int:event_id>",
|
|
"api_v1_event_list_event_list_write",
|
|
)
|