129 lines
5.2 KiB
C++
129 lines
5.2 KiB
C++
#include "work/admin/CollectionCenter.hpp"
|
|
#include "work/admin/InternalUserDirectory.hpp"
|
|
#include "work/admin/LdapGroupSchemaSettings.hpp"
|
|
#include "work/admin/LdapImportSettings.hpp"
|
|
#include "work/admin/LdapUserDirectory.hpp"
|
|
#include "work/admin/LdapUserSchemaSettings.hpp"
|
|
#include "work/admin/LoginHistory.hpp"
|
|
#include "work/admin/Scenario.hpp"
|
|
#include "work/admin/User.hpp"
|
|
#include "work/admin/UserDirectory.hpp"
|
|
#include "work/admin/UserSession.hpp"
|
|
|
|
#include "work/jobs/Job.hpp"
|
|
#include "work/jobs/Task.hpp"
|
|
#include "work/jobs/Payload.hpp"
|
|
#include "work/jobs/IdPayload.hpp"
|
|
#include "work/jobs/IdListPayload.hpp"
|
|
|
|
#include "matador/utils/default_type_traits.hpp"
|
|
#include "matador/object/schema.hpp"
|
|
|
|
#include "matador/sql/connection.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::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::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*/) {
|
|
|
|
}
|
|
};
|
|
|
|
using namespace matador;
|
|
using namespace work::models;
|
|
|
|
// Proposal for polymorphic classes:
|
|
// object_ptr::as<Type> does the following checks;
|
|
//
|
|
// 1. The requested type has super class
|
|
// 2. Super class has discriminator column defined
|
|
// 3. Super class has discriminator value defined
|
|
// 4. Discriminator value is mapped to the requested type
|
|
//
|
|
// If all checks succeed, the requested is fetched from
|
|
// the database.
|
|
// schema.attach<jobs::Payload>("payloads", make_polymorph("type"));
|
|
// schema.attach<jobs::Payload, jobs::IdPayload>("id_list_payloads", make_polymorph_type("IdPayload"));
|
|
// schema.attach<jobs::Payload, jobs::IdListPayload>("id_payloads"make_polymorph_type("IdListPayload"));
|
|
// object::object_ptr<jobs::Payload> payload;
|
|
// auto result = payload.as<jobs::IdPayload>();
|
|
// if (result.is_ok()) {
|
|
// const auto& is_payload = result.value();
|
|
// // Use requested type
|
|
// id_payload->id = 1;
|
|
// }
|
|
// payload.is_polymorphic();
|
|
// 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());
|
|
|
|
const object::schema schema("Administration");
|
|
|
|
// sql::connection_pool<sql::connection> pool("postgres://news:news@127.0.0.1:15432/matador", 4);
|
|
sql::connection_pool<sql::connection> pool("postgres://test:test123!@127.0.0.1:5432/matador", 4);
|
|
|
|
orm::session ses(pool);
|
|
|
|
auto 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"); })
|
|
;
|
|
ses.dump_schema(std::cout);
|
|
|
|
if (!result) {
|
|
std::cout << "error: " << result.err().message() << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
result = ses.create_schema();
|
|
if (!result) {
|
|
std::cout << "error: " << result.err() << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
// const std::string dns{"sqlite://demo.db"};
|
|
// sql::connection c(dns);
|
|
//
|
|
// result = c.open();
|
|
//
|
|
// // orm::session s()
|
|
// if (!result.is_ok()) {
|
|
// return 0;
|
|
// }
|
|
|
|
return 0;
|
|
}
|
|
|
|
// registering table 'collection_center' (pk field: 'id')
|
|
// registering relation table 'collection_center_users' (first fk field: 'collection_center_id', second fk field: 'user_id')
|
|
// registering table 'internal_user_directory' (pk field: 'id')
|
|
//
|