FOSSredder 0.5.0
Loading...
Searching...
No Matches
AliasPolicy.cpp
Go to the documentation of this file.
1
5
7
9#include "../../utils/Time.h"
10
11#include <algorithm>
12#include <utility>
13
15
16std::string trimCopy(std::string value) {
17 return core::utils::trim(std::move(value));
18}
19
20std::string canonicalAliasValue(std::string value) { return trimCopy(std::move(value)); }
21
23 const std::string now = core::utils::currentTimestampUtc();
24 const std::string normalizedValue = canonicalAliasValue(alias.value());
25 const std::string normalizedSource = canonicalAliasValue(alias.source());
26 const std::string normalizedKind = trimCopy(alias.kind());
27 alias.setValue(normalizedValue);
28 alias.setKind(normalizedKind);
29 alias.setSource(normalizedSource);
30 if (alias.value().empty()) alias.setValue(alias.source());
31 if (alias.source().empty()) alias.setSource(alias.value());
32 if (alias.createdAt().empty()) alias.setCreatedAt(now);
33 if (alias.updatedAt().empty()) alias.setUpdatedAt(now);
34}
35
36void normalizeAliases(std::vector<Alias>& aliases) {
37 for (auto& alias : aliases) normalizeAlias(alias);
38 std::vector<Alias> unique;
39 unique.reserve(aliases.size());
40 for (auto& alias : aliases) {
41 const auto alreadyPresent = std::any_of(unique.begin(), unique.end(), [&](const Alias& existing) { return existing.value() == alias.value(); });
42 if (!alreadyPresent && !alias.value().empty()) unique.push_back(std::move(alias));
43 }
44 aliases = std::move(unique);
45}
46
47bool containsAliasValue(const std::vector<Alias>& aliases, const std::string& value) {
48 const auto needle = canonicalAliasValue(value);
49 return std::any_of(aliases.begin(), aliases.end(), [&](const Alias& alias) { return alias.value() == needle; });
50}
51
52void removeAliasValue(std::vector<Alias>& aliases, const std::string& value) {
53 const auto needle = canonicalAliasValue(value);
54 aliases.erase(std::remove_if(aliases.begin(), aliases.end(), [&](const Alias& alias) { return alias.value() == needle; }), aliases.end());
55}
56
59 const std::string now = core::utils::currentTimestampUtc();
60 if (alias.hitCount() < 1) alias.setHitCount(1);
61 if (alias.lastUsedAt().empty()) alias.setLastUsedAt(now);
62 if (alias.createdAt().empty()) alias.setCreatedAt(now);
63 if (alias.updatedAt().empty()) alias.setUpdatedAt(now);
64}
65
66void recordAliasHit(std::vector<Alias>& aliases, const std::string& value, const std::string& timestamp) {
67 const auto needle = canonicalAliasValue(value);
68 if (needle.empty()) return;
69 const std::string now = timestamp.empty() ? core::utils::currentTimestampUtc() : timestamp;
70 for (auto& alias : aliases) {
71 if (alias.value() != needle) continue;
73 alias.setHitCount(alias.hitCount() + 1);
74 alias.setLastUsedAt(now);
75 alias.setUpdatedAt(now);
76 return;
77 }
78
80 alias.setValue(needle);
81 alias.setSource(needle);
82 alias.setHitCount(1);
83 alias.setLastUsedAt(now);
84 alias.setCreatedAt(now);
85 alias.setUpdatedAt(now);
86 aliases.push_back(std::move(alias));
87}
88
89} // namespace core::domain::policies::alias
Shared alias normalization and ranking helpers for core entities.
Declares private string helpers shared across core implementation files.
Declares private UTC timestamp helpers for core implementation code.
std::string canonicalAliasValue(std::string value)
Canonicalizes an alias string for comparison.
void recordAliasHit(std::vector< Alias > &aliases, const std::string &value, const std::string &timestamp={})
Records or updates a hit for an alias value.
std::string trimCopy(std::string value)
Trims leading and trailing whitespace from text.
void normalizeAliases(std::vector< Alias > &aliases)
Normalizes and deduplicates a list of aliases.
bool containsAliasValue(const std::vector< Alias > &aliases, const std::string &value)
Checks whether an alias list already contains a value.
void removeAliasValue(std::vector< Alias > &aliases, const std::string &value)
Removes aliases with a given value.
void normalizeAlias(Alias &alias)
Normalizes a single alias in place.
void normalizeAliasUsage(Alias &alias)
Normalizes alias usage metadata in place.
std::string currentTimestampUtc()
Returns the current UTC timestamp in ISO-8601 format.
Definition Time.cpp:15
std::string trim(std::string s)
Removes leading and trailing ASCII whitespace from a string.