PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
key_image_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
19#pragma once
20
22
23#include <kcenon/common/patterns/result.h>
24
25#include <optional>
26#include <string>
27#include <string_view>
28#include <vector>
29
30#ifdef PACS_WITH_DATABASE_SYSTEM
31
33
34namespace kcenon::pacs::storage {
35
62class key_image_repository
63 : public base_repository<key_image_record, std::string> {
64public:
65 explicit key_image_repository(std::shared_ptr<pacs_database_adapter> db);
66 ~key_image_repository() override = default;
67
70 -> key_image_repository& = delete;
71 key_image_repository(key_image_repository&&) noexcept = default;
72 auto operator=(key_image_repository&&) noexcept
73 -> key_image_repository& = default;
74
75 // ========================================================================
76 // Domain-Specific Operations
77 // ========================================================================
78
85 [[nodiscard]] auto find_by_pk(int64_t pk) -> result_type;
86
93 [[nodiscard]] auto find_by_study(std::string_view study_uid)
94 -> list_result_type;
95
102 [[nodiscard]] auto search(const key_image_query& query) -> list_result_type;
103
110 [[nodiscard]] auto count_by_study(std::string_view study_uid)
111 -> Result<size_t>;
112
113protected:
114 // ========================================================================
115 // base_repository overrides
116 // ========================================================================
117
118 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
119 -> key_image_record override;
120
121 [[nodiscard]] auto entity_to_row(const key_image_record& entity) const
122 -> std::map<std::string, database_value> override;
123
124 [[nodiscard]] auto get_pk(const key_image_record& entity) const
125 -> std::string override;
126
127 [[nodiscard]] auto has_pk(const key_image_record& entity) const
128 -> bool override;
129
130 [[nodiscard]] auto select_columns() const
131 -> std::vector<std::string> override;
132
133private:
134 [[nodiscard]] auto parse_timestamp(const std::string& str) const
135 -> std::chrono::system_clock::time_point;
136
137 [[nodiscard]] auto format_timestamp(
138 std::chrono::system_clock::time_point tp) const -> std::string;
139};
140
141} // namespace kcenon::pacs::storage
142
143#else // !PACS_WITH_DATABASE_SYSTEM
144
145// Legacy interface for builds without database_system
146struct sqlite3;
147
148namespace kcenon::pacs::storage {
149
150template <typename T>
152
153using VoidResult = kcenon::common::VoidResult;
154
163public:
164 explicit key_image_repository(sqlite3* db);
166
169 -> key_image_repository& = delete;
171 auto operator=(key_image_repository&&) noexcept -> key_image_repository&;
172
173 [[nodiscard]] auto save(const key_image_record& record) -> VoidResult;
174 [[nodiscard]] auto find_by_id(std::string_view key_image_id) const
175 -> std::optional<key_image_record>;
176 [[nodiscard]] auto find_by_pk(int64_t pk) const
177 -> std::optional<key_image_record>;
178 [[nodiscard]] auto find_by_study(std::string_view study_uid) const
179 -> std::vector<key_image_record>;
180 [[nodiscard]] auto search(const key_image_query& query) const
181 -> std::vector<key_image_record>;
182 [[nodiscard]] auto remove(std::string_view key_image_id) -> VoidResult;
183 [[nodiscard]] auto exists(std::string_view key_image_id) const -> bool;
184 [[nodiscard]] auto count() const -> size_t;
185 [[nodiscard]] auto count_by_study(std::string_view study_uid) const
186 -> size_t;
187 [[nodiscard]] auto is_valid() const noexcept -> bool;
188
189private:
190 [[nodiscard]] auto parse_row(void* stmt) const -> key_image_record;
191
192 sqlite3* db_{nullptr};
193};
194
195} // namespace kcenon::pacs::storage
196
197#endif // PACS_WITH_DATABASE_SYSTEM
Generic base repository for CRUD operations.
Repository for key image persistence (legacy SQLite interface)
auto search(const key_image_query &query) const -> std::vector< key_image_record >
key_image_repository(key_image_repository &&) noexcept
key_image_repository(const key_image_repository &)=delete
auto find_by_study(std::string_view study_uid) const -> std::vector< key_image_record >
auto find_by_id(std::string_view key_image_id) const -> std::optional< key_image_record >
auto count_by_study(std::string_view study_uid) const -> size_t
auto remove(std::string_view key_image_id) -> VoidResult
auto exists(std::string_view key_image_id) const -> bool
auto find_by_pk(int64_t pk) const -> std::optional< key_image_record >
auto operator=(const key_image_repository &) -> key_image_repository &=delete
auto parse_row(void *stmt) const -> key_image_record
auto save(const key_image_record &record) -> VoidResult
Key image record data structures for database operations.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Key image record from the database.