#ifndef MATADOR_OBJECT_HPP #define MATADOR_OBJECT_HPP #include "matador/object/attribute.hpp" // #include "matador/object/attribute_generator.hpp" #include "matador/object/constraint.hpp" // #include "matador/object/constraints_generator.hpp" #include "matador/utils/identifier.hpp" #include namespace matador::object { class repository; class object { public: explicit object(std::string name, std::string alias = ""); static const attribute& create_attribute(std::string name, object& obj); void add_attribute(attribute attr); void add_constraint(class constraint c); [[nodiscard]] attribute* primary_key_attribute() const; [[nodiscard]] const utils::identifier& primary_key() const; [[nodiscard]] bool has_primary_key() const; [[nodiscard]] const std::string& name() const; [[nodiscard]] const std::string& alias() const; void update_name(const std::string& name); [[nodiscard]] bool has_attributes() const; [[nodiscard]] size_t attribute_count() const; [[nodiscard]] const std::list& attributes() const; [[nodiscard]] bool has_constraints() const; [[nodiscard]] size_t constraint_count() const; [[nodiscard]] const std::list& constraints() const; private: friend class constraints_generator; friend class attribute_generator; friend class object_generator; std::string name_; std::string alias_; attribute* pk_attribute_{nullptr}; utils::identifier pk_identifier_; std::list attributes_; std::list constraints_; }; } #endif //MATADOR_OBJECT_HPP