Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
controllerdepartmenthasmanager.cpp
1#include "controllerdepartmenthasmanager.h"
2#include "httprequest.h"
3#include "db.h"
4#include "pdebug.h"
5#include "json.h"
6#include <QRegularExpression>
7
8using namespace Httpd;
9
10ControllerDepartmentHasManager::ControllerDepartmentHasManager(HobrasoftHttpd::HttpConnection *parent)
11 : AbstractController(parent) {}
12
13void ControllerDepartmentHasManager::service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
14{
15 static const QRegularExpression re("^/api/v1/departments/(\\d+)/managers(?:/(\\d+))?/?$");
16 auto m = re.match(request->path());
17 if (!m.hasMatch()) {
18 serviceError(request, response, 405, "bad-request", "Invalid request");
19 return;
20 }
21
22 int department = m.captured(1).toInt();
23 int user = m.captured(2).isEmpty() ? -1 : m.captured(2).toInt();
24
25 if (request->method() == "GET") {
26 serviceGet(request, response, department, user);
27 return;
28 }
29
30 if (request->method() == "PUT") {
31 bool ok = false;
32 QVariantMap data = JSON::data(request->body(), &ok).toMap();
33 if (!ok) {
34 serviceError(request, response, 400, "bad-request", "Could not parse JSON data");
35 return;
36 }
37 servicePut(request, response, department, data);
38 return;
39 }
40
41 if (request->method() == "DELETE") {
42 if (user <= 0) {
43 serviceError(request, response, 400, "bad-request", "User id required");
44 return;
45 }
46 serviceDelete(request, response, department, user);
47 return;
48 }
49
50 serviceError(request, response, 405, "bad-request", "Invalid request");
51}
52
53void ControllerDepartmentHasManager::serviceGet(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int department, int user)
54{
56 filter.department = department;
57 filter.user = user > 0 ? user : 0;
58 auto list = db()->departmentHasManager(filter);
59 if (user > 0) {
60 if (list.isEmpty()) {
61 serviceError(request, response, 404, "not-found", "NotFound");
62 return;
63 }
64 serviceOK(request, response, list.first().toMap());
65 } else {
66 serviceOK(request, response, toList(list));
67 }
68}
69
70void ControllerDepartmentHasManager::servicePut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int department, const QVariantMap &data)
71{
72 QVariantMap d = data;
73 d["department"] = department;
74 db()->save(Dbt::DepartmentHasManager::fromMap(d));
75 serviceOK(request, response);
76}
77
78void ControllerDepartmentHasManager::serviceDelete(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int department, int user)
79{
80 db()->remove(Dbt::DepartmentHasManager(department, user));
81 serviceOK(request, response);
82}
83
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API.
virtual void serviceOK(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant())
Pošle odpověď 200 OK.
HobrasoftHttpd::HttpRequest * request() const
Vrací ukazatel na aktuální request.
void service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
Obsluha požadavku.
static QVariant data(const QByteArray &json)
Converts json to data.
Definition json.cpp:69
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.