Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
controllerworkcalendar.cpp
2#include "httprequest.h"
3#include "db.h"
4#include <QDate>
5
6using namespace Httpd;
7
8ControllerWorkCalendar::ControllerWorkCalendar(HobrasoftHttpd::HttpConnection *parent) : AbstractController(parent) { }
9
10void ControllerWorkCalendar::service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) {
11 QStringList parts = request->path().split("/");
12 parts.removeFirst();
13 parts.removeFirst();
14 parts.removeFirst();
15
16 if (parts.size() == 3 && parts[0] == "workcalendar" && parts[1] == "generate") {
17 bool ok = false;
18 int year = parts[2].toInt(&ok);
19 if (!ok) {
20 serviceError(request, response, 400, "bad-request", "Invalid year");
21 return;
22 }
23 serviceGenerate(request, response, year);
24 return;
25 }
26
28}
29
30void ControllerWorkCalendar::serviceList(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) {
31 Q_UNUSED(request);
32 serviceOK(request, response, toList(db()->workCalendar()));
33}
34
35void ControllerWorkCalendar::serviceIdGet(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString& id) {
36 QDate date = QDate::fromString(id, "yyyy-MM-dd");
37 if (!date.isValid()) { serviceError(request, response, 404, "not-found", "NotFound"); return; }
38 auto list = db()->workCalendar(date);
39 if (list.isEmpty()) { serviceError(request, response, 404, "not-found", "NotFound"); return; }
40 serviceOK(request, response, list.first().toMap());
41}
42
43void ControllerWorkCalendar::serviceIdPut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap& data) {
44 Q_UNUSED(request);
45 serviceOK(request, response, putKey(db()->save(Dbt::WorkCalendar::fromMap(data))));
46}
47
48void ControllerWorkCalendar::serviceIdPost(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap& data) {
49 serviceIdPut(request, response, data);
50}
51
52void ControllerWorkCalendar::serviceIdDelete(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString& id) {
53 QDate date = QDate::fromString(id, "yyyy-MM-dd");
54 db()->remove(Dbt::WorkCalendar(date));
55 serviceOK(request, response);
56}
57
58void ControllerWorkCalendar::serviceGenerate(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int year) {
59 Q_UNUSED(request);
60 db()->generateWorkCalendar(year);
61 serviceOK(request, response);
62}
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API.
virtual void service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
Obsluha požadavku.
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 serviceIdPost(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void serviceIdGet(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou GET.
void service(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
Obsluha požadavku.
void serviceIdPut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void serviceIdDelete(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže.
void serviceList(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
Pošle chybovou odpověď
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.