FOSSredder 0.5.0
Loading...
Searching...
No Matches
WorkspaceWorkflowService.cpp
Go to the documentation of this file.
1
5
7
12
13#include <algorithm>
14
15namespace {
16
19 draft.id = snapshot.id;
20 draft.statementDraftId = snapshot.statementDraftId;
21 draft.name = snapshot.name;
22 draft.bookingDate = snapshot.bookingDate;
23 draft.valuta = snapshot.valuta;
24 draft.amount = snapshot.amount;
25 draft.actorId = snapshot.actorId;
26 draft.contractId = snapshot.contractId;
27 draft.propertyIds = snapshot.propertyIds;
28 draft.status = static_cast<core::domain::Transaction::Status>(snapshot.status);
29 draft.allocatable = snapshot.allocatable;
30 draft.position = snapshot.position;
31 draft.metadata = snapshot.metadata;
32 draft.proofImageData = snapshot.proofImageData;
33 return draft;
34}
35
38 draft.id = snapshot.id;
39 draft.name = snapshot.name;
40 draft.transactionIds = snapshot.transactionIds;
41 draft.createdAt = snapshot.createdAt;
42 draft.updatedAt = snapshot.updatedAt;
43 draft.transactions.reserve(snapshot.transactions.size());
44 for (const auto& tx : snapshot.transactions) {
45 draft.transactions.push_back(toDraft(tx));
46 }
47 return draft;
48}
49
52 log.id = item.id;
53 log.time = item.time;
54 log.type = item.type;
55 log.file = item.file;
56 log.status = item.status;
57 log.message = item.message;
59 log.draftId = item.draftId;
61 log.statementId = item.statementId;
62 return log;
63}
64
67 log.id = item.id;
68 log.time = item.time;
69 log.targetPath = item.targetPath;
70 log.status = item.status;
71 log.message = item.message;
72 log.annualIds = item.annualIds;
73 log.analysisIds = item.analysisIds;
74 return log;
75}
76
77void saveStatementDraft(core::application::workspace::WorkspaceSessionState& document,
79 auto statementDraft = std::make_shared<core::application::importing::draft::StatementDraft>(draft);
80 if (!statementDraft) {
81 return;
82 }
83
84 if (statementDraft->id.empty()) {
85 statementDraft->id = core::utils::makeStableId();
86 }
87
88 auto statementIt = std::find_if(document.workflow.statementDrafts.begin(), document.workflow.statementDrafts.end(),
89 [statementDraft](const auto& item) {
90 return item && item->id == statementDraft->id;
91 });
92 if (statementIt == document.workflow.statementDrafts.end()) {
93 document.workflow.statementDrafts.push_back(statementDraft);
94 } else {
95 *statementIt = statementDraft;
96 }
97
98 document.workflow.transactionDrafts.erase(
99 std::remove_if(document.workflow.transactionDrafts.begin(), document.workflow.transactionDrafts.end(),
100 [statementDraft](const auto& tx) {
101 return tx && tx->statementDraftId == statementDraft->id;
102 }),
103 document.workflow.transactionDrafts.end());
104
105 for (std::size_t i = 0; i < statementDraft->transactions.size(); ++i) {
106 auto tx = std::make_shared<core::application::importing::draft::TransactionDraft>(statementDraft->transactions[i]);
107 if (!tx) {
108 continue;
109 }
110 if (tx->id.empty()) {
111 tx->id = core::utils::makeStableId();
112 }
113 tx->statementDraftId = statementDraft->id;
114 tx->position = static_cast<int>(i);
115 document.workflow.transactionDrafts.push_back(std::move(tx));
116 }
117}
118
119void clearStatementDraft(core::application::workspace::WorkspaceSessionState& document, const std::string& draftId) {
120 if (draftId.empty()) {
121 document.workflow.statementDrafts.clear();
122 document.workflow.transactionDrafts.clear();
123 return;
124 }
125
126 document.workflow.statementDrafts.erase(
127 std::remove_if(document.workflow.statementDrafts.begin(), document.workflow.statementDrafts.end(),
128 [&draftId](const auto& draft) {
129 return draft && draft->id == draftId;
130 }),
131 document.workflow.statementDrafts.end());
132
133 document.workflow.transactionDrafts.erase(
134 std::remove_if(document.workflow.transactionDrafts.begin(), document.workflow.transactionDrafts.end(),
135 [&draftId](const auto& tx) {
136 return tx && tx->statementDraftId == draftId;
137 }),
138 document.workflow.transactionDrafts.end());
139}
140
141void saveImportLog(core::application::workspace::WorkspaceSessionState& document,
143 if (log.id.empty()) {
145 }
146 auto next = std::make_shared<core::application::importing::ImportLog>(std::move(log));
147 auto it = std::find_if(document.workflow.importLogs.begin(), document.workflow.importLogs.end(),
148 [&next](const auto& item) {
149 return item && next && item->id == next->id;
150 });
151 if (it == document.workflow.importLogs.end()) {
152 document.workflow.importLogs.push_back(std::move(next));
153 } else {
154 *it = std::move(next);
155 }
156}
157
158void deleteImportLog(core::application::workspace::WorkspaceSessionState& document,
159 const std::string& id) {
160 document.workflow.importLogs.erase(
161 std::remove_if(document.workflow.importLogs.begin(), document.workflow.importLogs.end(),
162 [&id](const auto& log) {
163 return log && log->id == id;
164 }),
165 document.workflow.importLogs.end());
166}
167
168void saveExportLog(core::application::workspace::WorkspaceSessionState& document,
170 if (log.id.empty()) {
172 }
173 auto next = std::make_shared<core::application::exporting::ExportLog>(std::move(log));
174 auto it = std::find_if(document.workflow.exportLogs.begin(), document.workflow.exportLogs.end(),
175 [&next](const auto& item) {
176 return item && next && item->id == next->id;
177 });
178 if (it == document.workflow.exportLogs.end()) {
179 document.workflow.exportLogs.push_back(std::move(next));
180 } else {
181 *it = std::move(next);
182 }
183}
184
185void deleteExportLog(core::application::workspace::WorkspaceSessionState& document,
186 const std::string& id) {
187 document.workflow.exportLogs.erase(
188 std::remove_if(document.workflow.exportLogs.begin(), document.workflow.exportLogs.end(),
189 [&id](const auto& log) {
190 return log && log->id == id;
191 }),
192 document.workflow.exportLogs.end());
193}
194
195} // namespace
196
197namespace core::application {
198
202
204
206
208
209core::application::workspace::WorkspaceSessionState& WorkspaceWorkflowService::mutableDocument() noexcept {
210 return session_->mutableState();
211}
212
213void WorkspaceWorkflowService::commit() {
214 session_->commit();
215}
216
218 const auto id = core::application::importing::draft::DraftFinalizer::finalize(mutableDocument().catalog, toDraft(command.draft));
219 if (!id.empty()) {
220 session_->notifyState();
221 }
222 return id;
223}
224
226 ::saveStatementDraft(mutableDocument(), toDraft(command.draft));
227 session_->notifyState();
228}
229
230void WorkspaceWorkflowService::clearStatementDraft(const std::string& draftId) {
231 ::clearStatementDraft(mutableDocument(), draftId);
232 session_->notifyState();
233}
234
236 ::saveImportLog(mutableDocument(), toImportLog(command.log));
237 session_->notifyState();
238}
239
240void WorkspaceWorkflowService::deleteImportLog(const std::string& id) {
241 ::deleteImportLog(mutableDocument(), id);
242 session_->notifyState();
243}
244
246 ::saveExportLog(mutableDocument(), toExportLog(command.log));
247 session_->notifyState();
248}
249
250void WorkspaceWorkflowService::deleteExportLog(const std::string& id) {
251 ::deleteExportLog(mutableDocument(), id);
252 session_->notifyState();
253}
254
255} // namespace core::application
Declares draft finalization helpers that materialize imported entities.
Declares private stable identifier helpers for core entity creation.
Draft statement model used by import finalization and core application flow.
Declares the mutable workspace session that ties in-memory state to storage.
Applies draft and log workflow commands to workspace session state.
Maintains the editable app state for one workspace and persists it through IStorageManager.
core::application::workspace::WorkspaceSessionState & mutableState() noexcept
void commit()
Persists the session when a file is open and notifies listeners.
void saveImportLog(const core::ports::workspace::ImportLogCommand &command)
Saves or updates one import log.
WorkspaceWorkflowService(WorkspaceSession &session)
Creates workflow service bound to one workspace session.
void deleteExportLog(const std::string &id)
Deletes one export log by id.
void saveExportLog(const core::ports::workspace::ExportLogCommand &command)
Saves or updates one export log.
std::string finalizeStatementDraft(const core::ports::workspace::FinalizeStatementDraftCommand &command)
Finalizes statement draft and returns created statement id.
void clearStatementDraft(const std::string &draftId={})
Clears one statement draft by id, or all drafts when id is empty.
void deleteImportLog(const std::string &id)
Deletes one import log by id.
void saveStatementDraft(const core::ports::workspace::StatementDraftCommand &command)
Saves or updates statement draft.
Stores metadata about one export run for persistence and workflow tracking.
Definition ExportLog.h:16
std::vector< std::string > annualIds
Definition ExportLog.h:23
std::vector< std::string > analysisIds
Definition ExportLog.h:24
Stores metadata about one import run for persistence and workflow tracking.
Definition ImportLog.h:16
std::vector< std::string > statementDraftIds
Definition ImportLog.h:26
static std::string finalize(core::domain::catalog::WorkspaceCatalog &state, const core::application::importing::draft::StatementDraft &draft)
Finalize a statement draft and append the resulting entities to the workspace state.
std::string makeStableId()
Generates a stable hex identifier for persisted entities.
Definition StableId.cpp:21
std::vector< TransactionDraftSnapshot > transactions