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

Manipuluje se záznamy událostí v docházce. ...

#include <controllerevents.h>

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

Veřejné metody

 ControllerEvents (HobrasoftHttpd::HttpConnection *parent)
Veřejné metody dědí se z Httpd::AbstractController
 AbstractController (HobrasoftHttpd::HttpConnection *parent)
 Konstruktor.
virtual void service (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response)
 Obsluha požadavku.
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 serviceList (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
 Pošle chybovou odpověď
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 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 existující objekt.
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 existující objekt.
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.
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 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 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

bool canAccessEmployee (int employee)
QList< Dbt::EventsfilterAccessible (const QList< Dbt::Events > &list)

Další zděděné členy

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

Detailní popis

Manipuluje se záznamy událostí v docházce.

Implementované metody:

  • get
  • put, post
  • delete

Struktura jednoho záznamu:

{
"event" : 123,
"date" : "2023-07-28T12:34:56",
"event_type" : "P",
"employee" : 12,
"valid" : true,
"user_edited": 5
}

Definice je uvedena na řádku 36 v souboru controllerevents.h.

Dokumentace konstruktoru a destruktoru

◆ ControllerEvents()

ControllerEvents::ControllerEvents ( HobrasoftHttpd::HttpConnection * parent)

Definice je uvedena na řádku 16 v souboru controllerevents.cpp.

16 : AbstractController(parent) {
17 PDEBUG;
18}
AbstractController(HobrasoftHttpd::HttpConnection *parent)
Konstruktor.

Dokumentace členských funkcí

◆ canAccessEmployee()

bool ControllerEvents::canAccessEmployee ( int employee)
private

Definice je uvedena na řádku 86 v souboru controllerevents.cpp.

86 {
87 if (authenticatedUser() == nullptr || authenticatedUser()->admin()) {
88 return true;
89 }
90 QList<Dbt::DepartmentHasManager> mng = db()->departmentHasManager(Dbt::DepartmentHasManager(0, authenticatedUser()->user()));
91 for (const auto& mm : mng) {
92 if (!db()->departmentHasMember(Dbt::DepartmentHasMember(mm.department, employee)).isEmpty()) {
93 return true;
94 }
95 }
96 return false;
97}

◆ filterAccessible()

QList< Dbt::Events > ControllerEvents::filterAccessible ( const QList< Dbt::Events > & list)
private

Definice je uvedena na řádku 99 v souboru controllerevents.cpp.

99 {
100 if (authenticatedUser() == nullptr || authenticatedUser()->admin()) {
101 return list;
102 }
103 QSet<int> allowed;
104 QList<Dbt::DepartmentHasManager> mng = db()->departmentHasManager(Dbt::DepartmentHasManager(0, authenticatedUser()->user()));
105 for (const auto& mm : mng) {
106 auto members = db()->departmentHasMember(Dbt::DepartmentHasMember(mm.department, 0));
107 for (const auto& mem : members) { allowed.insert(mem.employee); }
108 }
109 QList<Dbt::Events> out;
110 for (const auto& e : list) {
111 if (allowed.contains(e.employee)) out << e;
112 }
113 return out;
114}

◆ serviceIdDelete()

void ControllerEvents::serviceIdDelete ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
const QString & id )
protectedvirtual

Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže.

Defaultní implementace posílá chybu 501 Not Implemented

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 68 v souboru controllerevents.cpp.

68 {
69 int evId = id.toInt();
70 auto list = db()->events(evId);
71 if (list.isEmpty()) {
72 serviceError(request, response, 404, "not-found", "NotFound");
73 return;
74 }
75 Dbt::Events e = list.first();
76 if (!canAccessEmployee(e.employee)) {
77 serviceError(request, response, 403, "forbidden", "Forbidden");
78 return;
79 }
80 e.valid = false;
81 e.user_edited = authenticatedUser()->user();
82 db()->save(e);
83 serviceOK(request, response);
84}
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.

◆ serviceIdGet()

void ControllerEvents::serviceIdGet ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
const QString & id )
protectedvirtual

Pošle odpověď na požadavek konkrétního ID metodou GET.

Defaultní implementace posílá chybu 501 Not Implemented

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 35 v souboru controllerevents.cpp.

35 {
36 PDEBUG;
37 int event = id.toInt();
38 if (event <= 0) {
39 serviceError(request, response, 404, "not-found", "NotFound");
40 return;
41 }
42 auto list = db()->events(event);
43 if (list.isEmpty()) {
44 serviceError(request, response, 404, "not-found", "NotFound");
45 return;
46 }
47 if (!canAccessEmployee(list.first().employee)) {
48 serviceError(request, response, 403, "forbidden", "Forbidden");
49 return;
50 }
51 serviceOK(request, response, list[0].toMap());
52}

◆ serviceIdPost()

void ControllerEvents::serviceIdPost ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
const QVariantMap & data )
protectedvirtual

Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.

Defaultní implementace posílá chybu 501 Not Implemented

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 64 v souboru controllerevents.cpp.

64 {
65 serviceIdPut(request, response, data);
66}
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...

◆ serviceIdPut()

void ControllerEvents::serviceIdPut ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response,
const QVariantMap & data )
protectedvirtual

Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existující objekt.

Defaultní implementace posílá chybu 501 Not Implemented

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 54 v souboru controllerevents.cpp.

54 {
55 QVariantMap d = data;
56 d["user_edited"] = authenticatedUser()->user();
57 if (!canAccessEmployee(d["employee"].toInt())) {
58 serviceError(request, response, 403, "forbidden", "Forbidden");
59 return;
60 }
61 serviceOK(request, response, putKey(db()->save(Dbt::Events::fromMap(d))));
62}

◆ serviceList()

void ControllerEvents::serviceList ( HobrasoftHttpd::HttpRequest * request,
HobrasoftHttpd::HttpResponse * response )
protectedvirtual

Pošle chybovou odpověď

Parametry
code- chybový kód (například 404)
error- chybový textový kód
reason- vysvětlení chyby

Posílá odpověď zformátovanou takto:

Content-Type: application/json
Cache-Control: no-cache,public
404 not-found
{ "error" : "not-found", "reason" : "Not found" }

*/ virtual void serviceError (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString& error, const QString& reason);

/**

Pošle chybovou odpověď

Parametry
code- chybový kód (například 404)
error- chybový textový kód, píše se do HTTP statutu
reason- vysvětlení chyby

Posílá odpověď zformátovanou takto:

Content-Type: application/json
Cache-Control: no-cache,public
404 text v parametru error
{ ..... }

*/ virtual void serviceError (HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, int code, const QString& error, const QVariantMap& data);

/**

Měl by poslat v odpovědi kompletní seznam všech objektů ve třídě a ukončit se

Defaultní implementace posílá chybu 501 Not Implemented

Reimplementuje stejnojmenný prvek z Httpd::AbstractController.

Definice je uvedena na řádku 20 v souboru controllerevents.cpp.

20 {
21 PDEBUG;
22 int offset = request->parameter("offset").toInt();
23 int limit = request->parameter("limit").toInt();
24 int employee = request->parameter("employee").toInt();
25 QString smonth = request->parameter("month");
26 QDate month;
27 if (!smonth.isEmpty()) {
28 month = QDate::fromString(smonth + "-01", "yyyy-MM-dd");
29 }
30 QList<Dbt::Events> list = db()->events(-1, employee, month, limit, offset);
31 list = filterAccessible(list);
32 serviceOK(request, response, toList(list));
33}

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