relation_completer progress

This commit is contained in:
Sascha Kühl
2025-06-30 16:01:21 +02:00
parent 3add45dfdf
commit 5a7ab5d4d0
5 changed files with 146 additions and 26 deletions
+33 -10
View File
@@ -25,24 +25,47 @@
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() {
object::schema schema("Administration");
auto result = schema.attach<admin::CollectionCenter>("collection_center")
.and_then([&schema] { return schema.attach<admin::InternalUserDirectory>("internal_user_directory"); })
.and_then([&schema] { return schema.attach<admin::InternalUserDirectory>("internal_user_directories"); })
.and_then([&schema] { return schema.attach<admin::LdapGroupSchemaSettings>("ldap_group_schema_settings"); })
.and_then([&schema] { return schema.attach<admin::LdapImportSettings>("ldap_import_settings"); })
.and_then([&schema] { return schema.attach<admin::LdapUserDirectory>("ldap_user_directory"); } )
.and_then([&schema] { return schema.attach<admin::LdapUserDirectory>("ldap_user_directories"); } )
.and_then([&schema] { return schema.attach<admin::LdapUserSchemaSettings>("ldap_user_schema_settings"); })
.and_then([&schema] { return schema.attach<admin::LoginHistory>("login_history"); })
.and_then([&schema] { return schema.attach<admin::Scenario>("scenario"); })
.and_then([&schema] { return schema.attach<admin::User>("user"); })
.and_then([&schema] { return schema.attach<admin::UserDirectory>("user_directory"); })
.and_then([&schema] { return schema.attach<admin::UserSession>("user_session"); })
.and_then([&schema] { return schema.attach<admin::LoginHistory>("login_histories"); })
.and_then([&schema] { return schema.attach<admin::Scenario>("scenarios"); })
.and_then([&schema] { return schema.attach<admin::User>("users"); })
.and_then([&schema] { return schema.attach<admin::UserDirectory>("user_directories"); })
.and_then([&schema] { return schema.attach<admin::UserSession>("user_sessions"); })
.and_then([&schema] { return schema.attach<jobs::Job>("jobs"); })
.and_then([&schema] { return schema.attach<jobs::Payload>("id_payloads"); })
.and_then([&schema] { return schema.attach<jobs::IdPayload>("id_list_payloads"); })
.and_then([&schema] { return schema.attach<jobs::IdListPayload>("payloads"); })
.and_then([&schema] { return schema.attach<jobs::Payload>("payloads"); })
.and_then([&schema] { return schema.attach<jobs::Payload, jobs::IdPayload>("id_list_payloads"); })
.and_then([&schema] { return schema.attach<jobs::Payload, jobs::IdListPayload>("id_payloads"); })
.and_then([&schema] { return schema.attach<jobs::Task>("tasks"); });
if (!result.is_ok()) {