MantisBase v0.3.7
Loading...
Searching...
No Matches
entity.h
Go to the documentation of this file.
1
9#ifndef MANTISBASE_ENTITY_H
10#define MANTISBASE_ENTITY_H
11
12#include <string>
13#include "mantisbase/mantis.h"
16#include "../types.h"
17#include "access_rules.h"
18
19namespace mb {
20 using Record = nlohmann::json;
21 using Records = std::vector<Record>;
22
39 class Entity {
40 public:
45 explicit Entity(const nlohmann::json &schema);
46
52 explicit Entity(const std::string &name, const std::string& type);
53
54 // --------------- DB TABLE OPS ------------------ //
59 [[nodiscard]] std::string id() const;
60
65 [[nodiscard]] std::string name() const;
66
71 [[nodiscard]] std::string type() const;
72
77 [[nodiscard]] bool isSystem() const;
78
83 [[nodiscard]] bool hasApi() const;
84
90 [[nodiscard]] std::string viewQuery() const;
91
96 [[nodiscard]] const std::vector<json> &fields() const;
97
103 [[nodiscard]] std::optional<json> field(const std::string& field_name) const;
104
110 [[nodiscard]] std::optional<json> hasField(const std::string& field_name) const;
111
116 [[nodiscard]] const json& rules() const;
117
122 [[nodiscard]] AccessRule listRule() const;
123
128 [[nodiscard]] AccessRule getRule() const;
129
134 [[nodiscard]] AccessRule addRule() const;
135
140 [[nodiscard]] AccessRule updateRule() const;
141
146 [[nodiscard]] AccessRule deleteRule() const;
147
148 // --------------- DB CRUD OPS ------------------ //
159 [[nodiscard]] Record create(const json &record, const json &opts = json::object()) const;
160
166 [[nodiscard]] Records list(const json &opts = json::object()) const;
167
174 [[nodiscard]] std::optional<Record> read(const std::string &id, const json &opts = json::object()) const;
175
183 [[nodiscard]] Record update(const std::string &id, const json &data, const json &opts = json::object()) const;
184
189 void remove(const std::string &id) const;
190
191 // --------------- SCHEMA OPS ------------------ //
196 [[nodiscard]] const json &schema() const;
197
202 [[nodiscard]] int countRecords() const;
203
208 [[nodiscard]] bool isEmpty() const;
209
210 // --------------- UTILITY OPS ------------------ //
216 [[nodiscard]] bool recordExists(const std::string &id) const;
217
223 [[nodiscard]] std::optional<json> findField(const std::string &field_name) const;
224
231 [[nodiscard]] std::optional<json> queryFromCols(const std::string &value,
232 const std::vector<std::string> &columns) const;
233
234 private:
235 nlohmann::json m_schema;
236 };
237} // mb
238
239#endif //MANTISBASE_ENTITY_H
Access rule definition for entity permissions.
Access control rule for entity permissions.
Definition access_rules.h:31
Represents a database table/entity with schema and CRUD operations.
Definition entity.h:39
const std::vector< json > & fields() const
Get all field definitions.
Definition entity.cpp:102
Record create(const json &record, const json &opts=json::object()) const
Create a new record in the entity table.
Definition entity_crud.cpp:13
std::string viewQuery() const
Get SQL query for view type entities.
Definition entity.cpp:92
bool hasApi() const
Check if entity has API endpoints enabled.
Definition entity.cpp:88
int countRecords() const
Count total records in the entity table.
Definition entity_crud.cpp:343
bool recordExists(const std::string &id) const
Check if a record exists by ID.
Definition entity_crud.cpp:409
Records list(const json &opts=json::object()) const
List all records in the entity table.
Definition entity_crud.cpp:89
Record update(const std::string &id, const json &data, const json &opts=json::object()) const
Update an existing record by ID.
Definition entity_crud.cpp:150
std::string type() const
Get entity type ("base", "auth", or "view").
Definition entity.cpp:80
bool isSystem() const
Check if entity is a system table.
Definition entity.cpp:84
AccessRule updateRule() const
Get update access rule (for PATCH /api/v1/entities/{table}/:id).
Definition entity.cpp:135
const json & schema() const
Get complete entity schema JSON.
Definition entity.cpp:143
AccessRule addRule() const
Get create access rule (for POST /api/v1/entities/{table}).
Definition entity.cpp:131
std::optional< json > field(const std::string &field_name) const
Get field definition by name.
Definition entity.cpp:106
const json & rules() const
Get all access rules.
Definition entity.cpp:119
AccessRule getRule() const
Get read access rule (for GET /api/v1/entities/{table}/:id).
Definition entity.cpp:127
std::optional< Record > read(const std::string &id, const json &opts=json::object()) const
Read a single record by ID.
Definition entity_crud.cpp:125
std::optional< json > findField(const std::string &field_name) const
Find field definition by name (alias for field()).
Definition entity.cpp:145
AccessRule deleteRule() const
Get delete access rule (for DELETE /api/v1/entities/{table}/:id).
Definition entity.cpp:139
std::optional< json > queryFromCols(const std::string &value, const std::vector< std::string > &columns) const
Query records by searching across multiple columns.
Definition entity_crud.cpp:368
std::string id() const
Get entity unique identifier.
Definition entity.cpp:72
std::optional< json > hasField(const std::string &field_name) const
Check if field exists by name.
Definition entity.cpp:115
bool isEmpty() const
Check if entity table is empty.
Definition entity_crud.cpp:355
std::string name() const
Get entity table name.
Definition entity.cpp:76
AccessRule listRule() const
Get list access rule (for GET /api/v1/entities/{table}).
Definition entity.cpp:123
void remove(const std::string &id) const
Delete a record by ID.
Definition entity_crud.cpp:293
Custom exception class for MantisBase errors.
Convenience header that includes all MantisBase public API headers.
router.h
Definition auth.h:16
std::vector< Record > Records
Collection of database records.
Definition entity.h:21
nlohmann::json Record
Single database record as JSON object.
Definition entity.h:20
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
SOCI database wrapper utilities.