mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-07-16 09:37:23 +00:00
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
#ifndef BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_
|
|
#define BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_
|
|
|
|
/**
|
|
* @file json_handling/json_loader.h
|
|
* @brief JSON-backed implementation of ICuratedDataService.
|
|
*/
|
|
|
|
#include <filesystem>
|
|
#include <unordered_set>
|
|
#include <vector>
|
|
|
|
#include "data_model/models.h"
|
|
#include "services/curated_data/curated_data_service.h"
|
|
|
|
/**
|
|
* @brief Loads curated location, persona, and name data from JSON files.
|
|
*/
|
|
class JsonLoader final : public ICuratedDataService {
|
|
struct cache {
|
|
std::vector<Location> locations;
|
|
std::vector<UserPersona> personas;
|
|
std::unordered_map<std::string, forename_list> forenames_by_country;
|
|
std::unordered_map<std::string, surname_list> surnames_by_country;
|
|
|
|
cache() = default;
|
|
~cache() = default;
|
|
};
|
|
|
|
cache cache_;
|
|
|
|
public:
|
|
JsonLoader() = default;
|
|
|
|
/**
|
|
* @brief Parses a JSON array file and returns all location records.
|
|
*/
|
|
std::vector<Location> LoadLocations(const std::filesystem::path&) override;
|
|
|
|
/**
|
|
* @brief Parses a JSON array file and returns all persona records.
|
|
*/
|
|
std::vector<UserPersona> LoadPersonas(const std::filesystem::path&) override;
|
|
|
|
std::unordered_map<std::string, forename_list> LoadForenamesByCountry(
|
|
const std::filesystem::path&) override;
|
|
|
|
/**
|
|
* @brief Parses a JSON file and returns all the forenames per country.
|
|
*/
|
|
std::unordered_map<std::string, surname_list> LoadSurnamesByCountry(
|
|
const std::filesystem::path&) override;
|
|
};
|
|
|
|
#endif // BIERGARTEN_PIPELINE_INCLUDES_JSON_HANDLING_JSON_LOADER_H_
|