feat: enhance Admin and report services with CRUD operations and intervention links

This commit is contained in:
gabdevele
2026-06-15 11:47:44 +02:00 Unverified
parent d684477ac3
commit 170fadbfe0
13 changed files with 1258 additions and 164 deletions
+77 -2
View File
@@ -68,10 +68,17 @@ void sendService(Json::Value body,
status = drogon::k404NotFound;
}
else if (error == "invalid_status_transition" ||
error == "media_limit_reached")
error == "media_limit_reached" ||
error == "report_not_open" ||
error == "report_owned_by_other_operator")
{
status = drogon::k409Conflict;
}
else if (error == "invalid_reference" || error.starts_with("invalid_") ||
error == "missing_rating")
{
status = drogon::k422UnprocessableEntity;
}
callback(visione::http::json(std::move(body), status));
}
@@ -141,6 +148,32 @@ void ReportController::list(
std::move(callback));
}
void ReportController::listCategories(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
{
auto user = requireUser(req, callback);
if (!user || blockPasswordChangeRequired(*user, callback))
{
return;
}
visione::services::ReportService service;
sendService(service.listCategories(*user), std::move(callback));
}
void ReportController::listTeams(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
{
auto user = requireUser(req, callback);
if (!user || blockPasswordChangeRequired(*user, callback))
{
return;
}
visione::services::ReportService service;
sendService(service.listOperatorTeams(*user), std::move(callback));
}
void ReportController::assignedReports(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback)
@@ -217,6 +250,48 @@ void ReportController::interventionSummary(
sendService(service.interventionSummary(*user, reportId), std::move(callback));
}
void ReportController::teamSuggestions(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback,
long long reportId)
{
auto user = requireUser(req, callback);
if (!user || blockPasswordChangeRequired(*user, callback))
{
return;
}
visione::services::ReportService service;
sendService(service.teamSuggestions(*user, reportId), std::move(callback));
}
void ReportController::createInterventionLink(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback,
long long reportId)
{
auto user = requireUser(req, callback);
if (!user || blockPasswordChangeRequired(*user, callback))
{
return;
}
visione::services::ReportService service;
sendService(service.createInterventionLink(*user, reportId), std::move(callback));
}
void ReportController::revokeInterventionLink(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback,
long long reportId)
{
auto user = requireUser(req, callback);
if (!user || blockPasswordChangeRequired(*user, callback))
{
return;
}
visione::services::ReportService service;
sendService(service.revokeInterventionLink(*user, reportId), std::move(callback));
}
void ReportController::updateStatus(
const drogon::HttpRequestPtr &req,
std::function<void(const HttpResponsePtr &)> &&callback,
@@ -368,7 +443,7 @@ void ReportController::uploadMedia(
auto allowed = service.canAddMedia(*user, reportId);
if (!allowed.get("ok", false).asBool())
{
callback(visione::http::json(std::move(allowed), drogon::k403Forbidden));
sendService(std::move(allowed), std::move(callback));
return;
}