ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
resource_templates.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Povl Filip Sonne-Frederiksen
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#pragma once
6
12
13#include "reusex/core/resource_keys.hpp"
14
15#include <nlohmann/json.hpp>
16
17#include <cstdint>
18#include <optional>
19#include <string>
20#include <string_view>
21#include <vector>
22
23namespace reusex::core {
24
25enum class MemberKind { category, key };
28 std::string ref;
29 bool operator==(const TemplateMember &) const = default;
30};
31
35std::vector<TemplateMember> parse_members(const nlohmann::json &members);
37std::vector<TemplateMember> read_members(std::string_view stored,
38 std::string_view template_name);
39nlohmann::json members_json(const std::vector<TemplateMember> &members);
40
42 std::vector<std::string> keys;
43 std::vector<TemplateMember> missing;
44};
45
48ResolvedTemplate resolve_template(const std::vector<TemplateMember> &members,
49 const std::vector<ResourceKey> &catalogue);
50
51inline constexpr std::string_view kSeedMaterialepas = "materialepas";
52inline constexpr std::string_view kSeedScreening = "screening";
54 std::string tag, name;
55 std::vector<TemplateMember> members;
56};
57
59std::vector<SeedTemplate> seed_templates();
60
62struct CsvOptions {
63 std::string delimiter = ";";
64 std::string encoding = "utf-8-bom";
65 std::string header = "label";
66 nlohmann::json extra = nlohmann::json::object();
67};
68
70CsvOptions parse_csv_options(const nlohmann::json &csv);
72CsvOptions read_csv_options(std::string_view stored,
73 std::string_view template_name);
74nlohmann::json csv_options_json(const CsvOptions &options);
75
80inline constexpr std::string_view kLegacyKeyPrefix = "legacy:";
81TemplateMember legacy_column_member(std::string_view column,
82 const std::vector<ResourceKey> &catalogue);
85std::string unique_name(std::string_view base, std::string_view tag,
86 const std::vector<std::string> &taken);
87
88// ---- Template service over ProjectDB --------------------------------------
89
98
99std::vector<TemplateView> template_views(const ProjectDB &db);
101TemplateView template_view(const ProjectDB &db, int64_t id);
102
105 std::optional<std::string> name;
106 std::optional<nlohmann::json> members, csv;
107};
108
113 const TemplateInput &input);
115void delete_template(ProjectDB &db, int64_t id);
122std::vector<TemplateView> restore_seed_templates(ProjectDB &db);
123
124} // namespace reusex::core
Wire form of one stored report PDF version — the ReportPdfVersion schema in ruxd's API contract (docs...
std::vector< SeedTemplate > seed_templates()
"Materialepas (fuld)" (one category member per leksikon category) and "Hurtig genbrugsscreening" (the...
std::vector< TemplateView > restore_seed_templates(ProjectDB &db)
Insert every seed whose tag no template carries ("Gendanstandardskabeloner"); a seed whose name is ta...
nlohmann::json csv_options_json(const CsvOptions &options)
std::vector< TemplateMember > parse_members(const nlohmann::json &members)
Parse [{"category": name} | {"key": id}, …].
CsvOptions read_csv_options(std::string_view stored, std::string_view template_name)
Stored options, tolerantly: a bad field logs warn and uses its default.
TemplateView template_view(const ProjectDB &db, int64_t id)
TemplateMember legacy_column_member(std::string_view column, const std::vector< ResourceKey > &catalogue)
ResolvedTemplate resolve_template(const std::vector< TemplateMember > &members, const std::vector< ResourceKey > &catalogue)
Spec §5.2: a category member expands to every catalogue key in that category (catalogue order),...
constexpr std::string_view kLegacyKeyPrefix
Export-template columns (schema v21 config.columns) as members.
constexpr std::string_view kSeedScreening
TemplateView duplicate_template(ProjectDB &db, int64_t id)
Copy as "<name> (kopi)", "<name> (kopi 2)", … (never a seed).
CsvOptions parse_csv_options(const nlohmann::json &csv)
std::vector< TemplateView > template_views(const ProjectDB &db)
Every template by id. Logs warn once per template with missing members.
constexpr std::string_view kSeedMaterialepas
std::string unique_name(std::string_view base, std::string_view tag, const std::vector< std::string > &taken)
First of "<base> (<tag>)", "<base> (<tag> 2)", "<base> (<tag> 3)", … that is not in taken.
void delete_template(ProjectDB &db, int64_t id)
TemplateView update_template(ProjectDB &db, int64_t id, const TemplateInput &input)
nlohmann::json members_json(const std::vector< TemplateMember > &members)
std::vector< TemplateMember > read_members(std::string_view stored, std::string_view template_name)
Stored members, tolerantly: unreadable JSON logs warn and reads as none.
TemplateView create_template(ProjectDB &db, const TemplateInput &input)
One row of templates (resources/templates spec §5.1).
A template's CSV export options (templates.csv).
std::string header
"label" | "key"
nlohmann::json extra
unknown fields, kept
std::string encoding
"utf-8" | "utf-8-bom"
std::string delimiter
";" | "," | "\t"
std::vector< std::string > keys
ordered, first position wins
std::vector< TemplateMember > missing
members resolving to nothing
std::vector< TemplateMember > members
A create or sparse edit; absent fields are left alone.
std::optional< std::string > name
std::optional< nlohmann::json > members
std::optional< nlohmann::json > csv
std::string ref
category name, or key id
bool operator==(const TemplateMember &) const =default
One template as the API shows it: its row, parsed members and CSV options, and its resolution against...
ProjectDB::ResourceTemplateRecord record
std::vector< TemplateMember > members