from flask_smorest import abort from flask.views import MethodView import marshmallow as ma from database import Database from . import routes_requests as blp db = Database.get_instance().db class UuidSchema(ma.Schema): uuid = ma.fields.String(description="UUID of the request", example="3f6dd2e5-8cb1-4ce0-82e4-b68edf4ce37a") class RequestsInteraction(ma.Schema): status = ma.fields.String() class RequestsInteractionDelete(ma.Schema): status = ma.fields.String(example="Request 3f6dd2e5-8cb1-4ce0-82e4-b68edf4ce37a was deleted.") @blp.route("/") class InteractRequest(MethodView): @blp.doc(summary="Returns a specific request by its UID") @blp.arguments(UuidSchema, location='path', as_kwargs=True) @blp.response(200, RequestsInteraction, description="Successful operation") @blp.alt_response(404) def get(self, uuid): response = db.at("requests", key=uuid).read() if response is None: abort(404, message=f"Request {uuid} does not exist.") return response @blp.doc(summary="Deletes a specific request by its UID") @blp.arguments(UuidSchema, location='path', as_kwargs=True) @blp.response(200, RequestsInteractionDelete, description="Successful operation") @blp.alt_response(404) def delete(self, uuid): if not db.at("requests", key=uuid).exists(): abort(404, message=f"Request {uuid} does not exist.") with db.at("requests").session() as (session, requests): del requests[uuid] session.write() response = { "status": f"Request {uuid} was deleted." } return response