FOSSredder 0.5.0
Loading...
Searching...
No Matches
Statement.cpp
Go to the documentation of this file.
1
5
7
8#include <algorithm>
9#include <iterator>
10#include <utility>
11
12namespace core::domain {
13
14Statement::Statement() = default;
15
17 name_ = std::move(value.value());
18}
19
20void Statement::rename(std::string value) {
21 rename(EntityName(std::move(value)));
22}
23
24void Statement::addTransaction(std::string value) {
25 value = policies::statement::normalizeId(std::move(value));
26 if (value.empty() || containsTransaction(value)) {
27 return;
28 }
29 transactionIds_.push_back(std::move(value));
30}
31
32void Statement::setTransactionIds(std::vector<std::string> value) {
34 transactionIds_ = std::move(value);
35}
36
37void Statement::insertTransaction(std::string value, std::size_t position) {
38 value = policies::statement::normalizeId(std::move(value));
39 if (value.empty()) {
40 return;
41 }
42 removeTransaction(value);
43 if (position >= transactionIds_.size()) {
44 transactionIds_.push_back(std::move(value));
45 return;
46 }
47 transactionIds_.insert(transactionIds_.begin() + static_cast<std::vector<std::string>::difference_type>(position), std::move(value));
48}
49
50void Statement::removeTransaction(const std::string& value) {
51 const auto normalized = policies::statement::normalizeId(value);
52 transactionIds_.erase(std::remove(transactionIds_.begin(), transactionIds_.end(), normalized), transactionIds_.end());
53}
54
55std::size_t Statement::indexOfTransaction(const std::string& value) const {
56 return policies::statement::indexOfTransactionId(transactionIds_, value);
57}
58
59bool Statement::hasTransactionAt(std::size_t index) const noexcept {
60 return index < transactionIds_.size();
61}
62
63void Statement::moveTransaction(const std::string& value, std::size_t newPosition) {
64 const auto normalized = policies::statement::normalizeId(value);
65 const auto it = std::find(transactionIds_.begin(), transactionIds_.end(), normalized);
66 if (it == transactionIds_.end()) {
67 return;
68 }
69 const auto current = static_cast<std::size_t>(std::distance(transactionIds_.begin(), it));
70 const auto item = *it;
71 transactionIds_.erase(it);
72 if (newPosition >= transactionIds_.size()) {
73 transactionIds_.push_back(item);
74 return;
75 }
76 if (current < newPosition && newPosition > 0) {
77 --newPosition;
78 }
79 transactionIds_.insert(transactionIds_.begin() + static_cast<std::vector<std::string>::difference_type>(newPosition), item);
80}
81
82bool Statement::containsTransaction(const std::string& value) const {
83 return policies::statement::containsTransactionId(transactionIds_, value);
84}
85
87 transactionIds_.clear();
88}
89
90std::size_t Statement::transactionCount() const noexcept {
91 return transactionIds_.size();
92}
93
94bool Statement::empty() const noexcept {
95 return transactionIds_.empty();
96}
97
98const std::string& Statement::id() const noexcept { return id_; }
99const std::string& Statement::name() const noexcept { return name_; }
100const std::vector<std::string>& Statement::transactionIds() const noexcept { return transactionIds_; }
101const std::string& Statement::createdAt() const noexcept { return createdAt_; }
102const std::string& Statement::updatedAt() const noexcept { return updatedAt_; }
103void Statement::setId(std::string value) { id_ = std::move(value); }
104void Statement::setCreatedAt(std::string value) { createdAt_ = std::move(value); }
105void Statement::setUpdatedAt(std::string value) { updatedAt_ = std::move(value); }
106
107} // namespace core::domain
Domain model for statements.
const std::string & value() const noexcept
const std::string & updatedAt() const noexcept
void addTransaction(std::string value)
Adds a normalized transaction id when it is not already present.
Definition Statement.cpp:24
std::size_t transactionCount() const noexcept
Returns the number of linked transactions.
Definition Statement.cpp:90
bool containsTransaction(const std::string &value) const
Checks whether a transaction id exists.
Definition Statement.cpp:82
void removeTransaction(const std::string &value)
Removes a transaction id from the statement.
Definition Statement.cpp:50
void moveTransaction(const std::string &value, std::size_t newPosition)
Moves a transaction id to a new position.
Definition Statement.cpp:63
const std::string & name() const noexcept
Definition Statement.cpp:99
const std::string & createdAt() const noexcept
void clearTransactions()
Clears all linked transactions.
Definition Statement.cpp:86
void setTransactionIds(std::vector< std::string > value)
Replaces the transaction id list with normalized values.
Definition Statement.cpp:32
void setCreatedAt(std::string value)
const std::string & id() const noexcept
Definition Statement.cpp:98
void insertTransaction(std::string value, std::size_t position)
Inserts a transaction id at a requested position.
Definition Statement.cpp:37
const std::vector< std::string > & transactionIds() const noexcept
bool empty() const noexcept
Checks whether the statement is empty.
Definition Statement.cpp:94
std::size_t indexOfTransaction(const std::string &value) const
Returns the index of a transaction id.
Definition Statement.cpp:55
void setId(std::string value)
void setUpdatedAt(std::string value)
bool hasTransactionAt(std::size_t index) const noexcept
Checks whether a transaction exists at a given index.
Definition Statement.cpp:59
void rename(EntityName value)
Renames the statement with normalized entity text.
Definition Statement.cpp:16
void normalizeIds(std::vector< std::string > &values)
Normalizes and deduplicates transaction identifiers.
bool containsTransactionId(const std::vector< std::string > &transactionIds, const std::string &value)
Checks whether a statement already contains a transaction id.
std::size_t indexOfTransactionId(const std::vector< std::string > &transactionIds, const std::string &value)
Returns the index of a transaction id.
std::string normalizeId(std::string value)
Normalizes a transaction identifier.