161 lines
5.2 KiB
C++
161 lines
5.2 KiB
C++
#pragma once
|
|
|
|
#include <drogon/HttpController.h>
|
|
|
|
class ReportController : public drogon::HttpController<ReportController>
|
|
{
|
|
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<void(const drogon::HttpResponsePtr &)> &&callback);
|
|
void list(const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback);
|
|
void detail(const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void updateStatus(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void takeReport(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void addMessage(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void listMessages(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void assignTeam(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void addFeedback(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
void uploadMedia(
|
|
const drogon::HttpRequestPtr &req,
|
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback,
|
|
long long reportId);
|
|
};
|