#pragma once #include class ReportController : public drogon::HttpController { public: METHOD_LIST_BEGIN /* * openapi: * tags: Reports * summary: Create report * description: Creates a citizen urban issue report. * auth: bearer * body: json * response: Created report id and inferred area. */ ADD_METHOD_TO(ReportController::create, "/api/v1/reports", drogon::Post); /* * openapi: * tags: Reports * summary: List reports * description: Lists reports visible to the authenticated user. * auth: bearer * body: none * response: Report list. */ ADD_METHOD_TO(ReportController::list, "/api/v1/reports", drogon::Get); /* * openapi: * tags: Reports * summary: Report detail * description: Returns report detail, status history and media. * auth: bearer * body: none * response: Report detail. */ ADD_METHOD_TO(ReportController::detail, "/api/v1/reports/{1}", drogon::Get); /* * openapi: * tags: Reports * summary: Update report status * description: Updates a report status following allowed transitions. * auth: bearer * body: json * response: Status update result. */ ADD_METHOD_TO(ReportController::updateStatus, "/api/v1/reports/{1}/status", drogon::Patch); /* * openapi: * tags: Reports * summary: Take report * description: Assigns an open report to the current operator. * auth: bearer * body: none * response: Take report result. */ ADD_METHOD_TO(ReportController::takeReport, "/api/v1/reports/{1}/take", drogon::Post); /* * openapi: * tags: Reports * summary: Add message * description: Adds a citizen/operator message to a report. * auth: bearer * body: json * response: Message creation result. */ ADD_METHOD_TO(ReportController::addMessage, "/api/v1/reports/{1}/messages", drogon::Post); /* * openapi: * tags: Reports * summary: List messages * description: Lists messages for a report conversation. * auth: bearer * body: none * response: Message list. */ ADD_METHOD_TO(ReportController::listMessages, "/api/v1/reports/{1}/messages", drogon::Get); /* * openapi: * tags: Reports * summary: Assign team * description: Assigns an intervention team to a report. * auth: bearer * body: json * response: Assignment result. */ ADD_METHOD_TO(ReportController::assignTeam, "/api/v1/reports/{1}/assignments", drogon::Post); /* * openapi: * tags: Reports * summary: Add feedback * description: Adds citizen feedback after report resolution. * auth: bearer * body: json * response: Feedback result. */ ADD_METHOD_TO(ReportController::addFeedback, "/api/v1/reports/{1}/feedback", drogon::Post); /* * openapi: * tags: Reports * summary: Upload media * description: Uploads report images or videos as multipart files. * auth: bearer * body: multipart * response: Uploaded media list. */ ADD_METHOD_TO(ReportController::uploadMedia, "/api/v1/reports/{1}/media", drogon::Post); METHOD_LIST_END void create(const drogon::HttpRequestPtr &req, std::function &&callback); void list(const drogon::HttpRequestPtr &req, std::function &&callback); void detail(const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void updateStatus( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void takeReport( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void addMessage( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void listMessages( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void assignTeam( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void addFeedback( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); void uploadMedia( const drogon::HttpRequestPtr &req, std::function &&callback, long long reportId); };