#ifndef BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_ #define BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_ /** * @file data_model/generated_models.h * @brief Generated output models from the pipeline: brewery/user results, * enriched data, and complete generation results. */ #include #include #include "data_model/models.h" // ============================================================================ // Generation Output Models // ============================================================================ /** * @brief Generated brewery payload. */ struct BreweryResult { /** * @brief Brewery display name in English. */ std::string name_en; /** * @brief Brewery description text in English. */ std::string description_en; /** * @brief Brewery display name in the local language. */ std::string name_local; /** * @brief Brewery description text in the local language. */ std::string description_local; }; /** * @brief Generated user profile payload. */ struct UserResult { /** * @brief First (given) name, copied from the sampled Name -- not * LLM-invented. */ std::string first_name{}; /** * @brief Last (family) name, copied from the sampled Name -- not * LLM-invented. */ std::string last_name{}; /** * @brief Gender associated with the sampled first name, copied from the * sampled Name -- not LLM-invented. */ std::string gender{}; /** * @brief Username handle. */ std::string username{}; /** * @brief Short user biography. */ std::string bio{}; /** * @brief Relative check-in/activity weight for this user, used to drive * a J-curve activity profile in later pipeline phases. */ float activity_weight{}; }; // ============================================================================ // Pipeline Data Models // ============================================================================ /** * @brief Enriched city data with Wikipedia context. */ struct EnrichedCity { City location; std::string region_context{}; }; /** * @brief A brewery's address. Owns the `City` it belongs to alongside its * street-level fields. Mirrors the `brewery_addresses` table and the * backend's `BreweryPostLocation` shape. * * Only `city` and `postal_code` are populated today -- street-address * generation has no fixture data or service yet, so the address lines stay * empty. */ struct BreweryAddress { City city{}; std::optional address_line_1{}; std::optional address_line_2{}; std::string postal_code{}; }; /** * @brief A user's address. Owns the `City` it belongs to alongside its * street-level fields. Mirrors the `user_addresses` table. * * Only `city` is populated today; the street-level columns exist for future * enrichment. */ struct UserAddress { City city{}; std::optional address_line_1{}; std::optional address_line_2{}; std::optional postal_code{}; }; /** * @brief Helper struct to store generated brewery data. */ struct BreweryRecord { BreweryAddress address; BreweryResult brewery; }; /** * @brief Helper struct to store generated user data. * * `email` and `date_of_birth` are programmatically generated by the * orchestrator (never LLM-authored) so a downstream auth-account seeding * consumer can register real accounts from the pipeline's SQLite export. */ struct UserRecord { UserAddress address{}; UserResult user; std::string email{}; std::string date_of_birth{}; }; #endif // BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_