adjust work project to the current codebase

This commit is contained in:
Sascha Kühl 2026-01-07 09:09:44 +01:00
parent dfd31cdf35
commit 41f6c9f516
14 changed files with 73 additions and 79 deletions

View File

@ -21,18 +21,10 @@
#include "matador/sql/connection.hpp"
#include "matador/query/schema.hpp"
#include "matador/orm/session.hpp"
template <> struct matador::utils::data_type_traits<work::core::timestamp, void> {
static basic_type type(std::size_t /*size*/) { return basic_type::UInt64; }
static void read_value(attribute_reader &/*reader*/, const char * /*id*/, size_t /*index*/, nullptr_t &/*value*/) {
}
static void bind_value(attribute_writer &/*binder*/, size_t /*index*/, nullptr_t &/*value*/) {
}
};
template <> struct matador::utils::data_type_traits<work::core::UserInfo, void> {
static basic_type type(std::size_t /*size*/) { return basic_type::UInt64; }
static void read_value(attribute_reader &/*reader*/, const char * /*id*/, size_t /*index*/, nullptr_t &/*value*/) {
@ -70,46 +62,47 @@ using namespace work::models;
// payload.is_polymorphic_type<jobs::IdPayload>();
int main() {
// logger::default_min_log_level(logger::log_level::LVL_DEBUG);
// logger::add_log_sink(logger::create_stdout_sink());
logger::default_min_log_level(logger::log_level::LVL_DEBUG);
logger::add_log_sink(logger::create_stdout_sink());
// sql::connection_pool<sql::connection> pool("postgres://news:news@127.0.0.1:15432/matador", 4);
sql::connection_pool pool("postgres://test:test123!@127.0.0.1:5432/matador", 4);
object::repository repo("Administration");
auto result = repo.attach<admin::CollectionCenter>("collection_centers");
// repo.create(pool);
// repo.drop(pool);
utils::message_bus bus;
orm::session ses({bus, pool});
// query::schema ses({bus, pool});
query::schema admin_schema("Administration");
result = ses.attach<admin::CollectionCenter>("collection_centers")
.and_then([&ses] { return ses.attach<admin::UserDirectory>("user_directories"); })
.and_then([&ses] { return ses.attach<admin::LdapGroupSchemaSettings>("ldap_group_schema_settings"); })
.and_then([&ses] { return ses.attach<admin::LdapImportSettings>("ldap_import_settings"); })
.and_then([&ses] { return ses.attach<admin::LdapUserSchemaSettings>("ldap_user_schema_settings"); })
.and_then([&ses] { return ses.attach<admin::InternalUserDirectory, admin::UserDirectory>("internal_user_directories"); })
.and_then([&ses] { return ses.attach<admin::LdapUserDirectory, admin::UserDirectory>("ldap_user_directories"); } )
.and_then([&ses] { return ses.attach<admin::LoginHistory>("login_histories"); })
.and_then([&ses] { return ses.attach<admin::Scenario>("scenarios"); })
.and_then([&ses] { return ses.attach<admin::User>("users"); })
.and_then([&ses] { return ses.attach<admin::UserSession>("user_sessions"); })
.and_then([&ses] { return ses.attach<jobs::Job>("jobs"); })
.and_then([&ses] { return ses.attach<jobs::Payload>("payloads"); })
.and_then([&ses] { return ses.attach<jobs::IdPayload, jobs::Payload>("id_list_payloads"); })
.and_then([&ses] { return ses.attach<jobs::IdListPayload, jobs::Payload>("id_payloads"); })
.and_then([&ses] { return ses.attach<jobs::Task>("tasks"); })
auto result = admin_schema.attach<admin::CollectionCenter>("collection_centers")
.and_then([&admin_schema] { return admin_schema.attach<admin::UserDirectory>("user_directories"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::LdapGroupSchemaSettings>("ldap_group_schema_settings"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::LdapImportSettings>("ldap_import_settings"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::LdapUserSchemaSettings>("ldap_user_schema_settings"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::InternalUserDirectory, admin::UserDirectory>("internal_user_directories"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::LdapUserDirectory, admin::UserDirectory>("ldap_user_directories"); } )
.and_then([&admin_schema] { return admin_schema.attach<admin::LoginHistory>("login_histories"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::Scenario>("scenarios"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::User>("users"); })
.and_then([&admin_schema] { return admin_schema.attach<admin::UserSession>("user_sessions"); })
.and_then([&admin_schema] { return admin_schema.attach<jobs::Job>("jobs"); })
.and_then([&admin_schema] { return admin_schema.attach<jobs::Payload>("payloads"); })
.and_then([&admin_schema] { return admin_schema.attach<jobs::IdPayload, jobs::Payload>("id_list_payloads"); })
.and_then([&admin_schema] { return admin_schema.attach<jobs::IdListPayload, jobs::Payload>("id_payloads"); })
.and_then([&admin_schema] { return admin_schema.attach<jobs::Task>("tasks"); })
;
ses.dump_schema(std::cout);
admin_schema.dump(std::cout);
if (!result) {
std::cout << "error: " << result.err().message() << std::endl;
return 0;
}
result = ses.create_schema();
const auto conn = pool.acquire();
result = admin_schema.create(*conn);
if (!result) {
std::cout << "error: " << result.err() << std::endl;
return 0;
}
result = admin_schema.drop(*conn);
if (!result) {
std::cout << "error: " << result.err() << std::endl;
return 0;

View File

@ -11,6 +11,8 @@
#include "matador/utils/fetch_type.hpp"
#include "matador/utils/types.hpp"
#include "matador/query/meta_table_macro.hpp"
namespace work::models::admin {
struct User;
@ -45,4 +47,6 @@ struct CollectionCenter : core::Model {
}
META_TABLE(collection_center, COLLECTION_CENTER, id, version, name, symbol, type)
#endif //COLLECTION_CENTER_HPP

View File

@ -4,6 +4,7 @@
#include "../core/Model.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
struct LdapUserDirectory;
@ -17,7 +18,7 @@ struct LdapGroupSchemaSettings : core::Model {
void process( Operator& op ) {
namespace field = matador::access;
field::process( op, *matador::base_class<Model>( this ) );
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes);
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::CascadeAllFetchLazy);
field::attribute( op, "group_object_filter", group_object_filter, 511 );
field::attribute( op, "user_member_attribute", user_member_attribute, 511 );
}

View File

@ -4,6 +4,7 @@
#include "../core/Model.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
struct LdapUserDirectory;
@ -18,7 +19,7 @@ struct LdapImportSettings : core::Model {
void process( Operator& op ) {
namespace field = matador::access;
field::process( op, *matador::base_class<Model>( this ) );
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes);
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::CascadeAllFetchLazy);
field::attribute( op, "default_role", default_role, 511 );
field::attribute( op, "sync_interval", sync_interval );
field::attribute( op, "network_timeout", network_timeout );

View File

@ -10,6 +10,7 @@
#include "matador/object/object_ptr.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
struct LdapUserDirectory : UserDirectory {
@ -29,11 +30,11 @@ struct LdapUserDirectory : UserDirectory {
field::attribute( op, "schema_base_dn", schema_base_dn, 511 );
field::attribute( op, "additional_user_base_dn", additional_user_base_dn, 511 );
field::attribute( op, "additional_group_base_dn", additional_group_base_dn, 511 );
field::belongs_to( op, "user_schema_settings", user_schema_settings, matador::utils::default_foreign_attributes );
field::belongs_to( op, "group_schema_settings", group_schema_settings, matador::utils::default_foreign_attributes );
field::belongs_to( op, "import_settings", import_settings, matador::utils::default_foreign_attributes );
field::has_many( op, "ldap_users", users, "users_id", matador::utils::default_foreign_attributes );
field::has_many( op, "ldap_groups", groups, "groups_id", matador::utils::default_foreign_attributes );
field::belongs_to( op, "user_schema_settings", user_schema_settings, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "group_schema_settings", group_schema_settings, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "import_settings", import_settings, matador::utils::CascadeAllFetchLazy );
field::has_many( op, "ldap_users", users, "users_id", matador::utils::CascadeAllFetchLazy );
field::has_many( op, "ldap_groups", groups, "groups_id", matador::utils::CascadeAllFetchLazy );
}
};
}

View File

@ -4,7 +4,7 @@
#include "../core/Model.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
struct LdapUserDirectory;
@ -20,7 +20,7 @@ struct LdapUserSchemaSettings : core::Model {
void process( Operator& op ) {
namespace field = matador::access;
field::process(op, *matador::base_class<Model>( this ));
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes);
field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::CascadeAllFetchLazy);
field::attribute(op, "user_object_filter", user_object_filter, 511);
field::attribute(op, "user_unique_id_attribute", user_unique_id_attribute, 511);
field::attribute(op, "user_member_of_attribute", user_member_of_attribute, 511);

View File

@ -11,6 +11,7 @@
#include "matador/utils/base_class.hpp"
#include "matador/utils/enum_mapper.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
@ -39,20 +40,20 @@ static const matador::utils::enum_mapper<FailReason> FailReasonEnum({
});
struct LoginHistory : core::Model {
matador::object::object_ptr<User> user;
matador::object::object_ptr<User> client;
matador::object::object_ptr<Scenario> scenario;
matador::object::object_ptr<CollectionCenter> collection_center;
std::string login_name;
FailReason fail_reason{FailReason::NoFailReason};
core::timestamp login_time;
matador::utils::timestamp login_time;
template<typename Operator>
void process( Operator& op ) {
namespace field = matador::access;
field::process( op, *matador::base_class<Model>( this ) );
field::belongs_to( op, "user", user, matador::utils::default_foreign_attributes );
field::belongs_to( op, "scenario", scenario, matador::utils::default_foreign_attributes );
field::belongs_to( op, "collection_center", collection_center, matador::utils::default_foreign_attributes );
field::belongs_to( op, "client", client, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "scenario", scenario, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "collection_center", collection_center, matador::utils::CascadeAllFetchLazy );
field::attribute( op, "login_name", login_name, 511 );
field::attribute( op, "fail_reason", fail_reason );
field::attribute( op, "login_time", login_time );

View File

@ -4,11 +4,11 @@
#include "LockType.hpp"
#include "../core/Model.hpp"
#include "../core/Types.hpp"
#include "matador/object/object_ptr.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
#include "matador/utils/types.hpp"
namespace work::models::admin {
@ -20,7 +20,7 @@ struct User : core::Model {
std::string salt;
std::string password;
LockType lock_type{LockType::NoLock};
core::timestamp locked_at;
matador::utils::timestamp locked_at;
std::string lock_reason;
std::string role;
matador::object::object_ptr<UserDirectory> user_directory;
@ -37,7 +37,7 @@ struct User : core::Model {
field::attribute( op, "locked_at", locked_at );
field::attribute( op, "lock_reason", lock_reason, 511 );
field::attribute( op, "role", role, 63 );
field::belongs_to( op, "user_directory", user_directory, matador::utils::default_foreign_attributes );
field::belongs_to( op, "user_directory", user_directory, matador::utils::CascadeAllFetchLazy );
}
};

View File

@ -6,26 +6,26 @@
#include "User.hpp"
#include "../core/Model.hpp"
#include "../core/Types.hpp"
#include "matador/object/object_ptr.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::admin {
struct UserSession : core::Model {
matador::object::object_ptr<User> user;
matador::object::object_ptr<User> client;
matador::object::object_ptr<Scenario> scenario;
matador::object::object_ptr<CollectionCenter> collection_center;
core::timestamp offline_since;
matador::utils::timestamp offline_since;
template<typename Operator>
void process( Operator& op ) {
namespace field = matador::access;
field::process( op, *matador::base_class<Model>( this ) );
field::belongs_to( op, "user", user, matador::utils::default_foreign_attributes );
field::belongs_to( op, "scenario", scenario, matador::utils::default_foreign_attributes );
field::belongs_to( op, "collection_center", collection_center, matador::utils::default_foreign_attributes );
field::belongs_to( op, "client", client, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "scenario", scenario, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "collection_center", collection_center, matador::utils::CascadeAllFetchLazy );
field::attribute( op, "offline_since", offline_since );
}
};

View File

@ -1,9 +0,0 @@
#ifndef TYPES_HPP
#define TYPES_HPP
#include <chrono>
namespace work::core {
using timestamp = std::chrono::system_clock::time_point;
}
#endif //TYPES_HPP

View File

@ -7,12 +7,12 @@
#include "Task.hpp"
#include "../core/Model.hpp"
#include "../core/Types.hpp"
#include "../core/UserInfo.hpp"
#include "matador/object/object_ptr.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::jobs {
@ -21,7 +21,7 @@ struct Job : core::Model {
std::string description;
JobState state;
JobMode mode;
core::timestamp created_at;
matador::utils::timestamp created_at;
matador::object::object_ptr<Payload> payload;
matador::object::object_ptr<Task> task;
core::UserInfo user_info;
@ -35,8 +35,8 @@ struct Job : core::Model {
field::attribute( op, "state", state );
field::attribute( op, "mode", mode );
field::attribute( op, "created_at", created_at );
field::has_one(op, "payload", payload, matador::utils::default_foreign_attributes );
field::belongs_to( op, "task", task, matador::utils::default_foreign_attributes );
field::has_one(op, "payload", payload, matador::utils::CascadeAllFetchLazy );
field::belongs_to( op, "task", task, matador::utils::CascadeAllFetchLazy );
field::attribute( op, "user_info", user_info );
}
};

View File

@ -4,6 +4,7 @@
#include "../core/Model.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::jobs {
struct Job;
@ -16,7 +17,7 @@ struct Payload : core::Model {
namespace field = matador::access;
field::process( op, *matador::base_class<Model>( this ) );
field::attribute( op, "type", type, 255 );
field::belongs_to( op, "job", job, matador::utils::default_foreign_attributes );
field::belongs_to( op, "job", job, matador::utils::CascadeAllFetchLazy );
}
};
}

View File

@ -4,11 +4,11 @@
#include "TaskState.hpp"
#include "../core/Model.hpp"
#include "../core/Types.hpp"
#include "matador/object/object_ptr.hpp"
#include "matador/utils/base_class.hpp"
#include "matador/utils/foreign_attributes.hpp"
namespace work::models::jobs {
struct Task : core::Model {
@ -18,8 +18,8 @@ struct Task : core::Model {
TaskState state;
matador::object::object_ptr<Payload> payload;
JobMode job_mode;
core::timestamp start_delay;
core::timestamp interval;
matador::utils::timestamp start_delay;
matador::utils::timestamp interval;
uint64_t user_session_id;
template<typename Operator>
@ -30,7 +30,7 @@ struct Task : core::Model {
field::attribute( op, "description", description, 511 );
field::attribute( op, "job_name", job_name, 511 );
field::attribute( op, "state", state );
field::belongs_to( op, "payload", payload, matador::utils::default_foreign_attributes );
field::belongs_to( op, "payload", payload, matador::utils::CascadeAllFetchLazy );
field::attribute( op, "job_mode", job_mode );
field::attribute( op, "start_delay", start_delay );
field::attribute( op, "interval", interval );

View File

@ -262,7 +262,8 @@ private:
{utils::basic_type::Time, "TIME"},
{utils::basic_type::DateTime, "DATETIME"},
{utils::basic_type::Blob, "BLOB"},
{utils::basic_type::Null, "NULL"}
{utils::basic_type::Null, "NULL"},
// {utils::basic_type::Unknown, "INTEGER"}
};
sql_func_to_string_map sql_func_map_ {