MantisBase v0.3.4
Loading...
Searching...
No Matches
entity_schema_field.h
Go to the documentation of this file.
1
9#ifndef MANTISBASE_ENTITY_SCHEMA_FIELD_H
10#define MANTISBASE_ENTITY_SCHEMA_FIELD_H
11
12#include <optional>
13#include <string>
14
15#include "nlohmann/json.hpp"
16#include "nlohmann/json.hpp"
17#include "soci/soci-backend.h"
18
19namespace mb {
37 public:
43 EntitySchemaField(std::string field_name, std::string field_type);
44
49 explicit EntitySchemaField(const nlohmann::json &field_schema);
50
52 bool operator==(const EntitySchemaField &other) const;
53
54 // ----------------- STATIC GLOBAL METHODS ---------------------- //
55
56 static const std::vector<std::string> &defaultBaseFields();
57
58 static const std::vector<std::string> &defaultAuthFields();
59
60 static const std::vector<std::string> &defaultEntityFieldTypes();
61
62 // ----------------- SCHEMA FIELD METHODS ---------------------- //
63
68 [[nodiscard]] std::string id() const;
69
74 [[nodiscard]] std::string name() const;
75
81 EntitySchemaField &setName(const std::string &name);
82
87 [[nodiscard]] std::string type() const;
88
94 EntitySchemaField &setType(const std::string &type);
95
100 [[nodiscard]] bool required() const;
101
108
113 [[nodiscard]] bool isPrimaryKey() const;
114
121
126 [[nodiscard]] bool isSystem() const;
127
133 EntitySchemaField &setIsSystem(bool system);
134
139 [[nodiscard]] bool isUnique() const;
140
146 EntitySchemaField &setIsUnique(bool unique);
147
152 [[nodiscard]] bool isForeignKey() const;
153
158 [[nodiscard]] std::string foreignKeyTable() const;
159
164 [[nodiscard]] std::string foreignKeyColumn() const;
165
170 [[nodiscard]] std::string foreignKeyOnUpdate() const;
171
176 [[nodiscard]] std::string foreignKeyOnDelete() const;
177
186 EntitySchemaField &setForeignKey(const std::string &table,
187 const std::string &column = "id",
188 const std::string &onUpdate = "RESTRICT",
189 const std::string &onDelete = "RESTRICT");
190
196
201 [[nodiscard]] nlohmann::json constraints() const;
202
208 [[nodiscard]] nlohmann::json constraint(const std::string &key) const;
209
215 EntitySchemaField &setConstraints(const nlohmann::json &opts);
216
217 // ----------------- SCHEMA FIELD OPS ---------------------- //
223 EntitySchemaField &updateWith(const nlohmann::json &field_schema);
224
229 [[nodiscard]] nlohmann::json toJSON() const;
230
235 [[nodiscard]] soci::db_type toSociType() const;
236
242 [[nodiscard]] static soci::db_type toSociType(const std::string &type);
243
248 [[nodiscard]] std::optional<std::string> validate() const;
249
255 static bool isValidFieldType(const std::string &type);
256
262 static std::string genFieldId(const std::string &id);
263
268 static const nlohmann::json &defaultConstraints();
269
270 private:
271 std::string m_id, m_name, m_type;
272 bool m_required = false, m_primaryKey = false, m_isSystem = false, m_isUnique = false;
273 nlohmann::json m_constraints{}, m_foreignKey{};
274 };
275} // mb
276
277#endif //MANTISBASE_ENTITY_SCHEMA_FIELD_H
Represents a single field in a database table schema.
Definition entity_schema_field.h:36
nlohmann::json toJSON() const
Convert field to JSON representation.
Definition entity_schema_field.cpp:302
nlohmann::json constraint(const std::string &key) const
Get specific constraint by key.
Definition entity_schema_field.cpp:267
static const std::vector< std::string > & defaultAuthFields()
Definition entity_schema_base_fields.cpp:190
std::string foreignKeyTable() const
Get foreign key reference table name.
Definition entity_schema_field.cpp:196
std::string foreignKeyColumn() const
Get foreign key reference column name.
Definition entity_schema_field.cpp:200
EntitySchemaField & removeForeignKey()
Remove foreign key constraint (fluent interface).
Definition entity_schema_field.cpp:258
EntitySchemaField & setIsSystem(bool system)
Set system field flag (fluent interface).
Definition entity_schema_field.cpp:175
std::string name() const
Get field name.
Definition entity_schema_field.cpp:126
std::string type() const
Get field type.
Definition entity_schema_field.cpp:138
static std::string genFieldId(const std::string &id)
Generate unique field ID from name.
Definition entity_schema_field.cpp:373
static const std::vector< std::string > & defaultEntityFieldTypes()
Definition entity_schema_base_fields.cpp:197
std::string foreignKeyOnDelete() const
Get foreign key delete policy.
Definition entity_schema_field.cpp:208
static bool isValidFieldType(const std::string &type)
Check if field type is valid.
Definition entity_schema_field.cpp:368
nlohmann::json constraints() const
Get all field constraints.
Definition entity_schema_field.cpp:263
bool operator==(const EntitySchemaField &other) const
Definition entity_schema_field.cpp:33
EntitySchemaField & updateWith(const nlohmann::json &field_schema)
Update field with new JSON data.
Definition entity_schema_field.cpp:37
bool isPrimaryKey() const
Check if field is primary key.
Definition entity_schema_field.cpp:162
bool isSystem() const
Check if field is system field.
Definition entity_schema_field.cpp:171
bool isUnique() const
Check if field has unique constraint.
Definition entity_schema_field.cpp:180
static const nlohmann::json & defaultConstraints()
Get default constraints JSON.
Definition entity_schema_field.cpp:377
bool isForeignKey() const
Check if field is a foreign key.
Definition entity_schema_field.cpp:189
EntitySchemaField & setIsPrimaryKey(bool pk)
Set primary key flag (fluent interface).
Definition entity_schema_field.cpp:166
std::string id() const
Get field unique identifier.
Definition entity_schema_field.cpp:122
bool required() const
Check if field is required.
Definition entity_schema_field.cpp:153
EntitySchemaField & setName(const std::string &name)
Set field name (fluent interface).
Definition entity_schema_field.cpp:130
static const std::vector< std::string > & defaultBaseFields()
Definition entity_schema_base_fields.cpp:185
soci::db_type toSociType() const
Convert field type to SOCI database type.
Definition entity_schema_field.cpp:322
std::string foreignKeyOnUpdate() const
Get foreign key update policy.
Definition entity_schema_field.cpp:204
EntitySchemaField & setRequired(bool required)
Set required flag (fluent interface).
Definition entity_schema_field.cpp:157
std::optional< std::string > validate() const
Validate field definition.
Definition entity_schema_field.cpp:362
EntitySchemaField & setForeignKey(const std::string &table, const std::string &column="id", const std::string &onUpdate="RESTRICT", const std::string &onDelete="RESTRICT")
Set foreign key reference (fluent interface).
Definition entity_schema_field.cpp:212
EntitySchemaField & setIsUnique(bool unique)
Set unique constraint (fluent interface).
Definition entity_schema_field.cpp:184
EntitySchemaField & setConstraints(const nlohmann::json &opts)
Set field constraints (fluent interface).
Definition entity_schema_field.cpp:275
EntitySchemaField(const EntitySchemaField &other)
EntitySchemaField & setType(const std::string &type)
Set field type (fluent interface).
Definition entity_schema_field.cpp:142
router.h
Definition auth.h:15