22#include <kcenon/common/patterns/result.h>
31#ifdef PACS_WITH_DATABASE_SYSTEM
44enum class commitment_status {
51[[nodiscard]]
inline std::string_view
to_string(commitment_status s)
noexcept {
53 case commitment_status::pending:
return "pending";
54 case commitment_status::success:
return "success";
55 case commitment_status::partial:
return "partial";
56 case commitment_status::failed:
return "failed";
61[[nodiscard]]
inline commitment_status commitment_status_from_string(
62 std::string_view str)
noexcept {
63 if (str ==
"success")
return commitment_status::success;
64 if (str ==
"partial")
return commitment_status::partial;
65 if (str ==
"failed")
return commitment_status::failed;
66 return commitment_status::pending;
72struct commitment_record {
74 std::string requesting_ae;
75 std::string request_time;
76 std::string completion_time;
77 commitment_status
status{commitment_status::pending};
78 int total_instances{0};
86struct commitment_reference_record {
90 std::string
status{
"pending"};
104class commitment_repository
105 :
public base_repository<commitment_record, std::string> {
107 explicit commitment_repository(std::shared_ptr<pacs_database_adapter> db);
108 ~commitment_repository()
override =
default;
110 commitment_repository(
const commitment_repository&) =
delete;
111 auto operator=(
const commitment_repository&)
112 -> commitment_repository& =
delete;
113 commitment_repository(commitment_repository&&) noexcept = default;
114 auto operator=(commitment_repository&&) noexcept
115 -> commitment_repository& = default;
132 [[nodiscard]] auto record_request(
133 const std::
string& transaction_uid,
134 const std::
string& requesting_ae,
135 const std::vector<services::sop_reference>& references) -> VoidResult;
147 [[nodiscard]] auto update_result(
148 const std::
string& transaction_uid,
149 const services::commitment_result& result) -> VoidResult;
157 [[nodiscard]] auto get_status(const std::
string& transaction_uid)
158 -> Result<commitment_status>;
166 [[nodiscard]] auto is_duplicate_transaction(
167 const std::
string& transaction_uid) ->
bool;
175 [[nodiscard]] auto get_references(const std::
string& transaction_uid)
176 -> Result<std::vector<commitment_reference_record>>;
185 [[nodiscard]] auto find_by_status(commitment_status status,
195 [[nodiscard]] auto cleanup_old_transactions(std::chrono::hours max_age)
203 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
204 -> commitment_record override;
206 [[nodiscard]] auto entity_to_row(const commitment_record& entity) const
207 -> std::map<std::
string, database_value> override;
209 [[nodiscard]] auto get_pk(const commitment_record& entity) const
210 -> std::
string override;
212 [[nodiscard]] auto has_pk(const commitment_record& entity) const
216 [[nodiscard]] auto format_timestamp(
217 std::chrono::system_clock::time_point tp) const -> std::
string;
219 [[nodiscard]] auto insert_references(
220 const std::
string& transaction_uid,
221 const std::vector<services::sop_reference>& references) -> VoidResult;
Generic base repository for CRUD operations.
@ failed
Job failed with error.
@ pending
Job is queued but not started.
@ partial
PARTIAL - Document is not complete.
auto to_string(annotation_type type) -> std::string
Convert annotation_type to string.
Data types for DICOM Storage Commitment Push Model Service.