Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
Dokumentace třídy Httpd::ControllerTimesheet

Nastartování nebo zastavení pracovního výkazu. ...

#include <controllertimesheet.h>

Diagram dědičnosti pro třídu Httpd::ControllerTimesheet:
Httpd::AbstractController

Veřejné metody

 ControllerTimesheet (HobrasoftHttpd::HttpConnection *parent)
 
- Veřejné metody dědí se z Httpd::AbstractController
 AbstractController (HobrasoftHttpd::HttpConnection *parent)
 Konstruktor.
 
void setCheckId (bool x)
 Nastavuje kontrolu položky ID v datech při PUT a POST.
 
void setAuthorizer (RequestAuthorizer *authorizer)
 
AuthenticatedUserauthenticatedUser () const
 
bool checkId () const
 Vrací stav kontroly položky ID v datech při PUT a POST.
 
Db::Databasedb ()
 

Chráněné metody

void service (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
 Obsluha požadavku.
 
- Chráněné metody dědí se z Httpd::AbstractController
virtual bool exists (const QString &id)
 Kontrola existence zadaného ID.
 
virtual bool exists (HobrasoftHttpd::HttpRequest *request, const QString &id)
 Kontrola existence zadaného ID.
 
virtual void serviceOK (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant())
 Pošle odpověď 200 OK.
 
virtual void serviceError (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString &error, const QVariantMap &data)
 Pošle chybovou odpověď
 
virtual void serviceList (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
 Měl by poslat v odpovědi kompletní seznam všech objektů ve třídě a ukončit se.
 
virtual void serviceEvents (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
 Pošle v odpovědi kompletní seznam všech objektů ve třídě a následně
 
virtual void serviceIdEvents (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id)
 Pošle v odpovědi proud událostí spojených se všemi objekty ve třídě
 
virtual void serviceIdGet (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id)
 Pošle odpověď na požadavek konkrétního ID metodou GET.
 
virtual void serviceIdDelete (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id)
 Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže.
 
virtual void serviceIdPut (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data)
 Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.
 
virtual void serviceIdPost (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data)
 Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.
 
virtual void serviceEvent (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data)
 Pošle do otevřeného proudu událostí jednu událost.
 
virtual bool isAuthorized (Security::Permissions::Permission)
 
HobrasoftHttpd::HttpRequest * request () const
 Vrací ukazatel na aktuální request.
 
HobrasoftHttpd::HttpConnection * connection () const
 Vrací ukazatel na aktuální connection.
 

Privátní metody

void serviceStart (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int id)
 
void serviceStop (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int id)
 
void serviceToggle (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int id)
 

Další zděděné členy

- Statické chráněné metody dědí se z Httpd::AbstractController
static QVariantMap putKey (const QVariant &key)
 

Detailní popis

Nastartování nebo zastavení pracovního výkazu.

Na server se posílá příkaz (start, stop, toggle) a id ticketu, který se má spustit:

/api/v1/timesheet/start/<id>

Běžící výkazy lze zastavit hromadně jediným příkazem. Start a Toggle takto ovládat nelze! Chceme-li zastavit všechny běžící pracovní výkazy, je možné použít příkaz:

/api/v1/timesheet/stop/all

Implementuje metody:

  • get

Vrací jednoduchou informaci:

[{
"id": 34, // ID záznamu, primární klíč
"user": 2, // ID uživatele, kterému záznam patří
"ticket": 1, // ID ticketu
"date_from": "2020-08-13T15:12:25.619", // Začátek pracovního úkonu
"date_to": null // Konec pracovního úkonu, pokud ticket běží, vrací null
}]

Příklady:

Nastartování zastaveného ticketu s id 111 (stejný efekt by měl u zastaveného ticketu příkaz toggle):

/api/v1/timesheet/start/1

[{
"ticket": 1111,
"id": 34,
"user": 2,
"date_from": "2020-10-26T07:22:00",
"date_to": null // Běží, není ukončeno
}]

Zastavení běžícího ticketu s id 111 (stejný efekt by měl u běžícího ticketu příkaz toggle):

/api/v1/timesheet/stop/1

[{
"ticket": 1111,
"id": 34,
"user": 2,
"date_from": "2020-10-26T07:22:00",
"date_to": "2020-10-26T07:24:12" // Neběží, je ukončeno
}]

Další nastartování zastaveného ticketu s id 111, id záznamu v tabulce timesheets má novou hodnotu, tj. v tabulce přibyl nový záznam:

/api/v1/timesheet/start/1

[{
"ticket": 1111,
"id": 35, // Nový záznam
"user": 2,
"date_from": "2020-10-26T07:22:00",
"date_to": null // Běží, není ukončeno
}]

Pokud dojde k pokusu nastartovat běžící záznam, nebo k pokusu ukončit zastavený záznam, vrací chybu, HTTP status 409 Conflict. Chyba může znamenat, že ticket je spuštěný z jiného klienta. U příkazu toggle k chybě nedochází, může ale dojít ke konfliktům mezi různými klienty:

/api/v1/start/1

[{
"ticket": 1111,
"id": 35, // Nový záznam
"ok": false,
"error": "running"
"reason": "The ticket is running already"
}]

Definice je uvedena na řádku 117 v souboru controllertimesheet.h.

Dokumentace konstruktoru a destruktoru

◆ ControllerTimesheet()

ControllerTimesheet::ControllerTimesheet ( HobrasoftHttpd::HttpConnection * parent)

Definice je uvedena na řádku 15 v souboru controllertimesheet.cpp.

15 : AbstractController(parent) {
16}
AbstractController(HobrasoftHttpd::HttpConnection *parent)
Konstruktor.

Dokumentace členských funkcí

◆ service()

void ControllerTimesheet::service ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response )
protectedvirtual

Obsluha požadavku.

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 98 v souboru controllertimesheet.cpp.

98 {
99 QStringList parts = request->path().split("/");
100 PDEBUG << parts;
101 parts.removeFirst();
102 parts.removeFirst();
103 parts.removeFirst();
104
105 while (parts.size() == 3) {
106 bool ok;
107 QString sid = parts[2];
108 int id = sid.toInt(&ok);
109 if (sid == "all") { ok = true; id = 0; }
110 if (!ok) { break; }
111
112 if (parts[0] == "timesheet" && parts[1] == "start") {
113 serviceStart(request, response, id);
114 return;
115 }
116
117 if (parts[0] == "timesheet" && parts[1] == "stop") {
118 serviceStop(request, response, id);
119 return;
120 }
121
122 if (parts[0] == "timesheet" && parts[1] == "toggle") {
123 serviceToggle(request, response, id);
124 return;
125 }
126
127 break;
128 }
129
130 serviceError(request, response, 405, "bad-request", "Invalid request");
131}
virtual void serviceError(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString &error, const QVariantMap &data)
Pošle chybovou odpověď
HobrasoftHttpd::HttpRequest * request() const
Vrací ukazatel na aktuální request.

◆ serviceStart()

void ControllerTimesheet::serviceStart ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
int id )
private

Definice je uvedena na řádku 19 v souboru controllertimesheet.cpp.

19 {
20 PDEBUG;
21 QList<Dbt::TicketTimesheets> list1 = db()->runningTimesheets(id);
22 if (!list1.isEmpty()) {
23 QVariantMap item = list1[0].toMap();
24 item.remove("created");
25 item.remove("modified");
26 item["ok"] = false;
27 item["error"] = "conflict";
28 item["reason"] = "Timesheet is already started";
29 serviceError(request, response, 409, "conflict", item);
30 return;
31 }
32
33 QList<Dbt::TicketTimesheets> list2 = db()->startTimesheet(id);
34 if (list2.isEmpty()) {
35 serviceError(request, response, 400, "error", "Timesheet could not be started");
36 return;
37 }
38
39 QVariantMap item = list2[0].toMap();
40 item.remove("created");
41 item.remove("modified");
42 serviceOK(request, response, item);
43}
virtual void serviceOK(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant())
Pošle odpověď 200 OK.

◆ serviceStop()

void ControllerTimesheet::serviceStop ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
int id )
private

Definice je uvedena na řádku 46 v souboru controllertimesheet.cpp.

46 {
47 PDEBUG << id;
48 QList<Dbt::TicketTimesheets> list1 = db()->runningTimesheets(id);
49 if (list1.isEmpty()) {
50 QVariantMap item;
51 item["ok"] = false;
52 item["error"] = "conflict";
53 item["reason"] = "No running timesheet found";
54 serviceError(request, response, 409, "conflict", item);
55 return;
56 }
57
58 QVariantList items;
59 for (int i=0; i<list1.size(); i++) {
60 int xid = list1[0].ticket.toInt();
61 PDEBUG << "Stopping" << xid;
62 QList<Dbt::TicketTimesheets> list2 = db()->stopTimesheet(xid);
63 if (list2.isEmpty()) {
64 PDEBUG << "error, Some timesheets could not be stopped, id: " << xid;
65 continue;
66 }
67
68 QVariantMap item = list2[0].toMap();
69 item.remove("created");
70 item.remove("modified");
71 items << item;
72 }
73
74 if (items.isEmpty()) {
75 serviceError(request, response, 400, "error", "Some timesheets could not be stopped");
76 return;
77 }
78
79 serviceOK(request, response, items);
80}

◆ serviceToggle()

void ControllerTimesheet::serviceToggle ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
int id )
private

Definice je uvedena na řádku 83 v souboru controllertimesheet.cpp.

83 {
84 PDEBUG;
85 QList<Dbt::TicketTimesheets> list2 = db()->toggleTimesheet(id);
86 if (list2.isEmpty()) {
87 serviceError(request, response, 400, "error", "Timesheet could not be toggled");
88 return;
89 }
90
91 QVariantMap item = list2[0].toMap();
92 item.remove("created");
93 item.remove("modified");
94 serviceOK(request, response, item);
95}

Dokumentace pro tuto třídu byla vygenerována z následujících souborů: