9#ifndef MANTISBASE_ENTITY_SCHEMA_H
10#define MANTISBASE_ENTITY_SCHEMA_H
50 explicit EntitySchema(
const std::string &entity_name,
const std::string &entity_type =
"base");
94 [[nodiscard]]
std::
string id() const;
100 [[nodiscard]]
std::
string name() const;
113 [[nodiscard]]
std::
string type() const;
126 [[nodiscard]]
bool hasApi() const;
139 [[nodiscard]]
bool isSystem() const;
209 [[nodiscard]]
bool hasField(const
std::
string &field_name) const;
248 [[nodiscard]]
std::
string toDDL() const;
262 [[nodiscard]]
std::
string dump() const;
370 static
std::
string getFieldType(const
std::
string &
type,
std::shared_ptr<
soci::session> sql);
372 void addFieldsIfNotExist(const
std::
string &
type);
376 std::
string m_viewSqlQuery;
377 bool m_isSystem = false;
378 bool m_hasApi = true;
380 AccessRule m_listRule, m_getRule, m_addRule, m_updateRule, m_deleteRule;
Access rule definition for entity permissions.
Access control rule for entity permissions.
Definition access_rules.h:31
Represents a single field in a database table schema.
Definition entity_schema_field.h:36
Builder class for creating and managing database table schemas.
Definition entity_schema.h:38
AccessRule updateRule() const
Definition entity_schema.cpp:380
EntitySchema & addField(const EntitySchemaField &field)
Add a field to the schema (fluent interface).
Definition entity_schema.cpp:396
static nlohmann::json listTables(const nlohmann::json &opts=nlohmann::json::object())
List all tables from database.
Definition entity_schema_crud.cpp:14
std::string dump() const
Dump schema as formatted string (for debugging).
Definition entity_schema.cpp:552
EntitySchema(EntitySchema &&) noexcept=default
AccessRule addRule() const
Definition entity_schema.cpp:373
json toJSON() const
Convert schema to JSON representation.
Definition entity_schema.cpp:418
std::string name() const
Get table name.
Definition entity_schema.cpp:317
EntitySchema & setListRule(const AccessRule &listRule)
Definition entity_schema.cpp:361
std::optional< std::string > validate() const
Validate this schema instance.
Definition entity_schema.cpp:677
EntitySchema & operator=(const EntitySchema &)
Definition entity_schema.cpp:21
HandlerFn patchRouteHandler() const
Definition entity_schema_routes_handlers.cpp:133
EntitySchema & setSystem(const bool &isSystem)
Set system table flag (fluent interface).
Definition entity_schema.cpp:354
void createEntityRoutes() const
Definition entity_schema_routes_handlers.cpp:216
static EntitySchema fromEntity(const Entity &entity)
Create schema from existing Entity.
Definition entity_schema.cpp:121
std::string viewQuery() const
Get SQL query for view type entities.
Definition entity_schema.cpp:191
EntitySchemaField & field(const std::string &field_name)
Get field by name (mutable reference).
Definition entity_schema.cpp:165
EntitySchema & setDeleteRule(const AccessRule &deleteRule)
Definition entity_schema.cpp:389
bool hasApi() const
Check if API endpoints are enabled.
Definition entity_schema.cpp:345
void updateWith(const nlohmann::json &new_data)
Update schema with new JSON data (merges fields).
Definition entity_schema.cpp:202
HandlerFn postRouteHandler() const
Definition entity_schema_routes_handlers.cpp:80
static nlohmann::json createTable(const EntitySchema &new_table)
Create table in database from schema.
Definition entity_schema_crud.cpp:62
static std::string toDefaultSqlValue(const std::string &type, const nlohmann::json &v)
Get default SQL value for a field type.
Definition entity_schema.cpp:527
static nlohmann::json updateTable(const std::string &table_id, const nlohmann::json &new_schema)
Update existing table schema in database.
Definition entity_schema_crud.cpp:125
static std::string genEntityId(const std::string &entity_name)
Generate unique entity ID from name.
Definition entity_schema.cpp:581
HandlerFn getManyRouteHandler() const
Definition entity_schema_routes_handlers.cpp:50
static void dropTable(const EntitySchema &original_table)
Drop table from database.
Definition entity_schema_crud.cpp:750
EntitySchema & setHasApi(const bool &hasApi)
Enable/disable API endpoints (fluent interface).
Definition entity_schema.cpp:347
AccessRule deleteRule() const
Definition entity_schema.cpp:387
AccessRule getRule() const
Definition entity_schema.cpp:366
std::string toDDL() const
Generate SQL DDL (CREATE TABLE) statement.
Definition entity_schema.cpp:445
static bool isValidEntityType(const std::string &type)
Validate this schema type to the 3 supported types.
Definition entity_schema.cpp:681
bool hasField(const std::string &field_name) const
Check if field exists by name.
Definition entity_schema.cpp:510
static const std::vector< EntitySchemaField > & defaultAuthFieldsSchema()
Definition entity_schema_base_fields.cpp:69
static bool tableExists(const std::string &table_name)
Check if table exists by name.
Definition entity_schema_crud.cpp:796
static EntitySchema fromSchema(const json &entity_schema)
Create schema from JSON object.
Definition entity_schema.cpp:45
std::string type() const
Get entity type.
Definition entity_schema.cpp:324
Entity toEntity() const
Convert schema to Entity for database operations.
Definition entity_schema.cpp:156
EntitySchema(const EntitySchema &)
EntitySchema & setAddRule(const AccessRule &addRule)
Definition entity_schema.cpp:375
EntitySchemaField & fieldById(const std::string &field_id)
Get field by ID (mutable reference).
Definition entity_schema.cpp:178
bool removeField(const std::string &field_name)
Remove a field by name.
Definition entity_schema.cpp:406
EntitySchema & setGetRule(const AccessRule &getRule)
Definition entity_schema.cpp:368
static nlohmann::json getTable(const std::string &table_id)
Get table schema by ID from database.
Definition entity_schema_crud.cpp:37
EntitySchema & setViewQuery(const std::string &viewQuery)
Set SQL query for view type (fluent interface).
Definition entity_schema.cpp:195
HandlerFn deleteRouteHandler() const
Definition entity_schema_routes_handlers.cpp:183
EntitySchema & setType(const std::string &type)
Set entity type (fluent interface).
Definition entity_schema.cpp:326
AccessRule listRule() const
Definition entity_schema.cpp:359
HandlerFn getOneRouteHandler() const
Definition entity_schema_routes_handlers.cpp:6
static bool isValidEntityName(const std::string &name)
Validate this schema name to alphanum and _ only.
Definition entity_schema.cpp:688
EntitySchema & setUpdateRule(const AccessRule &updateRule)
Definition entity_schema.cpp:382
bool isSystem() const
Check if this is a system table.
Definition entity_schema.cpp:352
bool hasFieldById(const std::string &field_id) const
Check if field exists by ID.
Definition entity_schema.cpp:518
static const std::vector< EntitySchemaField > & defaultBaseFieldsSchema()
Definition entity_schema_base_fields.cpp:9
EntitySchema & setName(const std::string &name)
Set table name (fluent interface).
Definition entity_schema.cpp:319
EntitySchema()=default
Default constructor (creates empty schema).
std::vector< EntitySchemaField > fields() const
Get all field definitions.
Definition entity_schema.cpp:394
Represents a database table/entity with schema and CRUD operations.
Definition entity.h:39
Entity class for database table operations and CRUD functionality.
Entity schema field definition and validation.
router.h
Definition auth.h:15
std::function< void(MantisRequest &, MantisResponse &)> HandlerFn
‍Route Handler function shorthand
Definition types.h:36
nlohmann::json json
Shorten JSON namespace.
Definition context_store.h:18
Definition log_database.h:20