PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
ups_repository.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
15
16#include <kcenon/common/patterns/result.h>
17
18#include <memory>
19#include <optional>
20#include <string>
21#include <string_view>
22#include <vector>
23
24#ifdef PACS_WITH_DATABASE_SYSTEM
25
27
28namespace kcenon::pacs::storage {
29
30class ups_repository : public base_repository<ups_workitem, int64_t> {
31public:
32 explicit ups_repository(std::shared_ptr<pacs_database_adapter> db);
33 ~ups_repository() override = default;
34
35 ups_repository(const ups_repository&) = delete;
36 auto operator=(const ups_repository&) -> ups_repository& = delete;
37 ups_repository(ups_repository&&) noexcept = default;
38 auto operator=(ups_repository&&) noexcept -> ups_repository& = default;
39
40 [[nodiscard]] auto create_ups_workitem(const ups_workitem& workitem)
41 -> Result<int64_t>;
42 [[nodiscard]] auto update_ups_workitem(const ups_workitem& workitem)
43 -> VoidResult;
44 [[nodiscard]] auto change_ups_state(std::string_view workitem_uid,
45 std::string_view new_state,
46 std::string_view transaction_uid = "")
47 -> VoidResult;
48 [[nodiscard]] auto find_ups_workitem(std::string_view workitem_uid)
49 -> std::optional<ups_workitem>;
50 [[nodiscard]] auto search_ups_workitems(const ups_workitem_query& query)
51 -> Result<std::vector<ups_workitem>>;
52 [[nodiscard]] auto delete_ups_workitem(std::string_view workitem_uid)
53 -> VoidResult;
54 [[nodiscard]] auto ups_workitem_count() -> Result<size_t>;
55 [[nodiscard]] auto ups_workitem_count(std::string_view state)
56 -> Result<size_t>;
57 [[nodiscard]] auto subscribe_ups(const ups_subscription& subscription)
58 -> Result<int64_t>;
59 [[nodiscard]] auto unsubscribe_ups(std::string_view subscriber_ae,
60 std::string_view workitem_uid = "")
61 -> VoidResult;
62 [[nodiscard]] auto get_ups_subscriptions(std::string_view subscriber_ae)
63 -> Result<std::vector<ups_subscription>>;
64 [[nodiscard]] auto get_ups_subscribers(std::string_view workitem_uid)
65 -> Result<std::vector<std::string>>;
66
67protected:
68 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
69 -> ups_workitem override;
70 [[nodiscard]] auto entity_to_row(const ups_workitem& entity) const
71 -> std::map<std::string, database_value> override;
72 [[nodiscard]] auto get_pk(const ups_workitem& entity) const
73 -> int64_t override;
74 [[nodiscard]] auto has_pk(const ups_workitem& entity) const
75 -> bool override;
76 [[nodiscard]] auto select_columns() const -> std::vector<std::string> override;
77
78private:
79 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
80 -> std::string;
81 [[nodiscard]] auto parse_timestamp(const std::string& str) const
82 -> std::chrono::system_clock::time_point;
83 [[nodiscard]] auto format_timestamp(
84 std::chrono::system_clock::time_point tp) const -> std::string;
85};
86
87} // namespace kcenon::pacs::storage
88
89#else
90
91struct sqlite3;
92
93namespace kcenon::pacs::storage {
94
95template <typename T>
97
98using VoidResult = kcenon::common::VoidResult;
99
101public:
102 explicit ups_repository(sqlite3* db);
104
106 auto operator=(const ups_repository&) -> ups_repository& = delete;
107 ups_repository(ups_repository&&) noexcept;
108 auto operator=(ups_repository&&) noexcept -> ups_repository&;
109
110 [[nodiscard]] auto create_ups_workitem(const ups_workitem& workitem)
111 -> Result<int64_t>;
112 [[nodiscard]] auto update_ups_workitem(const ups_workitem& workitem)
113 -> VoidResult;
114 [[nodiscard]] auto change_ups_state(std::string_view workitem_uid,
115 std::string_view new_state,
116 std::string_view transaction_uid = "")
117 -> VoidResult;
118 [[nodiscard]] auto find_ups_workitem(std::string_view workitem_uid) const
119 -> std::optional<ups_workitem>;
120 [[nodiscard]] auto search_ups_workitems(const ups_workitem_query& query) const
121 -> Result<std::vector<ups_workitem>>;
122 [[nodiscard]] auto delete_ups_workitem(std::string_view workitem_uid)
123 -> VoidResult;
124 [[nodiscard]] auto ups_workitem_count() const -> Result<size_t>;
125 [[nodiscard]] auto ups_workitem_count(std::string_view state) const
126 -> Result<size_t>;
127 [[nodiscard]] auto subscribe_ups(const ups_subscription& subscription)
128 -> Result<int64_t>;
129 [[nodiscard]] auto unsubscribe_ups(std::string_view subscriber_ae,
130 std::string_view workitem_uid = "")
131 -> VoidResult;
132 [[nodiscard]] auto get_ups_subscriptions(std::string_view subscriber_ae) const
133 -> Result<std::vector<ups_subscription>>;
134 [[nodiscard]] auto get_ups_subscribers(std::string_view workitem_uid) const
135 -> Result<std::vector<std::string>>;
136
137private:
138 [[nodiscard]] auto parse_ups_workitem_row(void* stmt) const -> ups_workitem;
139 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
140 -> std::string;
141 [[nodiscard]] static auto parse_timestamp(const std::string& str)
142 -> std::chrono::system_clock::time_point;
143
144 sqlite3* db_{nullptr};
145};
146
147} // namespace kcenon::pacs::storage
148
149#endif
Generic base repository for CRUD operations.
auto get_ups_subscriptions(std::string_view subscriber_ae) const -> Result< std::vector< ups_subscription > >
auto delete_ups_workitem(std::string_view workitem_uid) -> VoidResult
auto operator=(const ups_repository &) -> ups_repository &=delete
auto create_ups_workitem(const ups_workitem &workitem) -> Result< int64_t >
ups_repository(const ups_repository &)=delete
auto ups_workitem_count() const -> Result< size_t >
auto subscribe_ups(const ups_subscription &subscription) -> Result< int64_t >
static auto to_like_pattern(std::string_view pattern) -> std::string
auto change_ups_state(std::string_view workitem_uid, std::string_view new_state, std::string_view transaction_uid="") -> VoidResult
auto unsubscribe_ups(std::string_view subscriber_ae, std::string_view workitem_uid="") -> VoidResult
static auto parse_timestamp(const std::string &str) -> std::chrono::system_clock::time_point
auto parse_ups_workitem_row(void *stmt) const -> ups_workitem
auto get_ups_subscribers(std::string_view workitem_uid) const -> Result< std::vector< std::string > >
auto find_ups_workitem(std::string_view workitem_uid) const -> std::optional< ups_workitem >
auto update_ups_workitem(const ups_workitem &workitem) -> VoidResult
auto search_ups_workitems(const ups_workitem_query &query) const -> Result< std::vector< ups_workitem > >
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
UPS subscription record from the database.
UPS workitem record from the database.
Unified Procedure Step (UPS) workitem data structures.