#ifndef MATADOR_SHIPMENT_HPP #define MATADOR_SHIPMENT_HPP #include "matador/utils/access.hpp" #include "matador/utils/foreign_attributes.hpp" #include "matador/object/collection.hpp" #include "matador/object/object_ptr.hpp" #include namespace matador::test { struct package; struct shipment { shipment() = default; shipment(const long id, std::string tracking_number) : id(id), tracking_number(std::move(tracking_number)) {} int64_t id{}; std::string tracking_number; object::collection > packages{}; template void process(Operator &op) { namespace field = matador::access; field::primary_key(op, "id", id); field::attribute(op, "tracking_number", tracking_number, 255); field::has_many(op, "packages", packages, "shipment_id", utils::CascadeAllFetchEager); } }; struct package { package() = default; package(const long id, double weight, object::object_ptr del) : id(id), weight(weight), delivery(std::move(del)){} int64_t id{}; double weight{}; object::object_ptr delivery; template void process(Operator &op) { namespace field = matador::access; field::primary_key(op, "id", id); field::attribute(op, "weight", weight); field::belongs_to(op, "shipment_id", delivery, utils::CascadeAllFetchLazy); } }; } #endif //MATADOR_SHIPMENT_HPP