FOSSredder 0.5.0
Loading...
Searching...
No Matches
Contract.h
Go to the documentation of this file.
1
5
6#pragma once
7
8#include <algorithm>
9#include <string>
10#include <vector>
11#include <utility>
12
17
18namespace core::domain {
19
20class Contract {
21public:
23
24 Contract(const Contract&) = delete;
25 Contract& operator=(const Contract&) = delete;
26 Contract(Contract&&) = delete;
28
33 void rename(EntityName value);
38 void rename(std::string value);
39
44 void setType(ContractType value);
49 void setType(std::string value);
50 void setAllocatableMode(std::string value);
51
56 void setActorIds(std::vector<std::string> value);
57
62 void addActorId(std::string value);
63
68 void removeActorId(const std::string& value);
69
73 void clearActorIds();
74
79 void setPropertyIds(std::vector<std::string> value);
80
85 void addPropertyId(std::string value);
86
91 void removePropertyId(const std::string& value);
92
96 void clearPropertyIds();
97
102 void addAlias(Alias value);
103
108 void removeAlias(std::string value);
109
115 void recordAliasHit(std::string value, std::string timestamp = {});
116
121 [[nodiscard]] bool hasName() const noexcept;
122
128 [[nodiscard]] bool hasAlias(const std::string& value) const;
129
134 [[nodiscard]] std::size_t aliasCount() const noexcept;
135
140 [[nodiscard]] bool hasAliases() const noexcept;
141
145 void clearAliases();
146
152 [[nodiscard]] bool containsActorId(const std::string& value) const;
153
159 [[nodiscard]] bool containsPropertyId(const std::string& value) const;
160
165 [[nodiscard]] bool hasSingleActor() const noexcept;
166
171 [[nodiscard]] bool hasActorRelations() const noexcept;
172
177 [[nodiscard]] bool hasPropertyRelations() const noexcept;
178
183 [[nodiscard]] bool hasRelations() const noexcept;
184
189 [[nodiscard]] std::size_t relationCount() const noexcept;
190
195 [[nodiscard]] std::size_t actorCount() const noexcept;
196
201 [[nodiscard]] std::size_t propertyCount() const noexcept;
202
207 [[nodiscard]] bool hasType() const noexcept;
208
213 [[nodiscard]] bool isConfigured() const noexcept;
214
219 [[nodiscard]] bool isMatchingReady() const noexcept;
220
225 [[nodiscard]] bool isStandalone() const noexcept;
226
227private:
228 static void normalizeIds(std::vector<std::string>& values) {
229 std::vector<std::string> unique;
230 unique.reserve(values.size());
231 for (auto& value : values) {
232 value = policies::alias::trimCopy(std::move(value));
233 if (value.empty()) continue;
234 if (std::find(unique.begin(), unique.end(), value) != unique.end()) continue;
235 unique.push_back(value);
236 }
237 values = std::move(unique);
238 }
239
240 std::string id_;
241 std::string name_;
242 std::string type_;
243 std::string allocatableMode_ = "mixed";
244 std::vector<std::string> actorIds_;
245 std::vector<std::string> propertyIds_;
246 std::vector<Alias> aliases_;
247 std::string createdAt_;
248 std::string updatedAt_;
249
250public:
251 // Read accessors
252 [[nodiscard]] const std::string& id() const noexcept;
253 [[nodiscard]] const std::string& name() const noexcept;
254 [[nodiscard]] const std::string& type() const noexcept;
255 [[nodiscard]] const std::string& allocatableMode() const noexcept;
256 [[nodiscard]] const std::vector<std::string>& actorIds() const noexcept;
257 [[nodiscard]] const std::vector<std::string>& propertyIds() const noexcept;
258 [[nodiscard]] const std::vector<Alias>& aliases() const noexcept;
259 [[nodiscard]] const std::string& createdAt() const noexcept;
260 [[nodiscard]] const std::string& updatedAt() const noexcept;
261
262 // Technical hydration
263 void setId(std::string value);
264 void setAliases(std::vector<Alias> value);
265 void setCreatedAt(std::string value);
266 void setUpdatedAt(std::string value);
267};
268
269} // namespace core::domain
Domain model for entity aliases.
Shared alias normalization and ranking helpers for core entities.
Value object for contract type labels.
Small value object for normalized entity display names.
void setAliases(std::vector< Alias > value)
Definition Contract.cpp:88
std::size_t relationCount() const noexcept
Returns the total number of linked relations.
Definition Contract.cpp:156
bool hasAlias(const std::string &value) const
Checks whether an alias exists on the contract.
Definition Contract.cpp:114
Contract(Contract &&)=delete
Contract(const Contract &)=delete
const std::vector< Alias > & aliases() const noexcept
Definition Contract.cpp:190
bool hasRelations() const noexcept
Checks whether the contract has any relations.
Definition Contract.cpp:152
void setType(ContractType value)
Sets the contract type from a normalized value object.
Definition Contract.cpp:24
std::size_t propertyCount() const noexcept
Returns the number of linked properties.
Definition Contract.cpp:164
bool hasName() const noexcept
Checks whether the contract has a name.
Definition Contract.cpp:110
bool hasActorRelations() const noexcept
Checks whether any actor relations exist.
Definition Contract.cpp:144
void clearAliases()
Clears all aliases from the contract.
Definition Contract.cpp:126
void addAlias(Alias value)
Adds a normalized alias when it is not already present.
Definition Contract.cpp:93
void setId(std::string value)
Definition Contract.cpp:193
std::size_t actorCount() const noexcept
Returns the number of linked actors.
Definition Contract.cpp:160
bool containsActorId(const std::string &value) const
Checks whether an actor id exists.
Definition Contract.cpp:130
bool hasType() const noexcept
Checks whether the contract has a type.
Definition Contract.cpp:168
bool containsPropertyId(const std::string &value) const
Checks whether a property id exists.
Definition Contract.cpp:135
void removeAlias(std::string value)
Removes an alias.
Definition Contract.cpp:101
void addActorId(std::string value)
Adds an actor id when it is not already present.
Definition Contract.cpp:49
void removePropertyId(const std::string &value)
Removes a property id from the contract.
Definition Contract.cpp:79
void clearPropertyIds()
Clears all linked property ids.
Definition Contract.cpp:84
bool isConfigured() const noexcept
Checks whether the contract is fully configured.
Definition Contract.cpp:172
void clearActorIds()
Clears all linked actor ids.
Definition Contract.cpp:62
const std::string & name() const noexcept
Definition Contract.cpp:185
void setCreatedAt(std::string value)
Definition Contract.cpp:194
Contract & operator=(const Contract &)=delete
const std::string & allocatableMode() const noexcept
Definition Contract.cpp:187
void setActorIds(std::vector< std::string > value)
Replaces the linked actor ids with normalized values.
Definition Contract.cpp:44
void removeActorId(const std::string &value)
Removes an actor id from the contract.
Definition Contract.cpp:57
const std::string & id() const noexcept
Definition Contract.cpp:184
bool hasPropertyRelations() const noexcept
Checks whether any property relations exist.
Definition Contract.cpp:148
Contract & operator=(Contract &&)=delete
void setUpdatedAt(std::string value)
Definition Contract.cpp:195
void setPropertyIds(std::vector< std::string > value)
Replaces the linked property ids with normalized values.
Definition Contract.cpp:66
void addPropertyId(std::string value)
Adds a property id when it is not already present.
Definition Contract.cpp:71
bool isMatchingReady() const noexcept
Checks whether the contract is ready for matching.
Definition Contract.cpp:176
void recordAliasHit(std::string value, std::string timestamp={})
Records a usage hit for an alias.
Definition Contract.cpp:106
std::size_t aliasCount() const noexcept
Returns the number of aliases.
Definition Contract.cpp:118
const std::string & updatedAt() const noexcept
Definition Contract.cpp:192
bool hasAliases() const noexcept
Checks whether the contract has any aliases.
Definition Contract.cpp:122
const std::string & type() const noexcept
Definition Contract.cpp:186
void rename(EntityName value)
Renames the contract with normalized entity text.
Definition Contract.cpp:16
bool hasSingleActor() const noexcept
Checks whether the contract has exactly one actor.
Definition Contract.cpp:140
void setAllocatableMode(std::string value)
Definition Contract.cpp:32
const std::vector< std::string > & actorIds() const noexcept
Definition Contract.cpp:188
bool isStandalone() const noexcept
Checks whether the contract has no actor or property links.
Definition Contract.cpp:180
const std::string & createdAt() const noexcept
Definition Contract.cpp:191
const std::vector< std::string > & propertyIds() const noexcept
Definition Contract.cpp:189
std::string trimCopy(std::string value)
Trims leading and trailing whitespace from text.