PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
mpps_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 mpps_repository : public base_repository<mpps_record, int64_t> {
31public:
32 explicit mpps_repository(std::shared_ptr<pacs_database_adapter> db);
33 ~mpps_repository() override = default;
34
35 mpps_repository(const mpps_repository&) = delete;
36 auto operator=(const mpps_repository&) -> mpps_repository& = delete;
37 mpps_repository(mpps_repository&&) noexcept = default;
38 auto operator=(mpps_repository&&) noexcept -> mpps_repository& = default;
39
40 [[nodiscard]] auto create_mpps(std::string_view mpps_uid,
41 std::string_view station_ae = "",
42 std::string_view modality = "",
43 std::string_view study_uid = "",
44 std::string_view accession_no = "",
45 std::string_view start_datetime = "")
46 -> Result<int64_t>;
47 [[nodiscard]] auto create_mpps(const mpps_record& record) -> Result<int64_t>;
48 [[nodiscard]] auto update_mpps(std::string_view mpps_uid,
49 std::string_view new_status,
50 std::string_view end_datetime = "",
51 std::string_view performed_series = "")
52 -> VoidResult;
53 [[nodiscard]] auto update_mpps(const mpps_record& record) -> VoidResult;
54 [[nodiscard]] auto find_mpps(std::string_view mpps_uid)
55 -> std::optional<mpps_record>;
56 [[nodiscard]] auto find_mpps_by_pk(int64_t pk)
57 -> std::optional<mpps_record>;
58 [[nodiscard]] auto list_active_mpps(std::string_view station_ae)
59 -> Result<std::vector<mpps_record>>;
60 [[nodiscard]] auto find_mpps_by_study(std::string_view study_uid)
61 -> Result<std::vector<mpps_record>>;
62 [[nodiscard]] auto search_mpps(const mpps_query& query)
63 -> Result<std::vector<mpps_record>>;
64 [[nodiscard]] auto delete_mpps(std::string_view mpps_uid) -> VoidResult;
65 [[nodiscard]] auto mpps_count() -> Result<size_t>;
66 [[nodiscard]] auto mpps_count(std::string_view status) -> Result<size_t>;
67
68protected:
69 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
70 -> mpps_record override;
71 [[nodiscard]] auto entity_to_row(const mpps_record& entity) const
72 -> std::map<std::string, database_value> override;
73 [[nodiscard]] auto get_pk(const mpps_record& entity) const
74 -> int64_t override;
75 [[nodiscard]] auto has_pk(const mpps_record& entity) const
76 -> bool override;
77 [[nodiscard]] auto select_columns() const -> std::vector<std::string> override;
78
79private:
80 [[nodiscard]] auto parse_timestamp(const std::string& str) const
81 -> std::chrono::system_clock::time_point;
82 [[nodiscard]] auto format_timestamp(
83 std::chrono::system_clock::time_point tp) const -> std::string;
84};
85
86} // namespace kcenon::pacs::storage
87
88#else
89
90struct sqlite3;
91
92namespace kcenon::pacs::storage {
93
94template <typename T>
96
97using VoidResult = kcenon::common::VoidResult;
98
100public:
101 explicit mpps_repository(sqlite3* db);
103
105 auto operator=(const mpps_repository&) -> mpps_repository& = delete;
107 auto operator=(mpps_repository&&) noexcept -> mpps_repository&;
108
109 [[nodiscard]] auto create_mpps(std::string_view mpps_uid,
110 std::string_view station_ae = "",
111 std::string_view modality = "",
112 std::string_view study_uid = "",
113 std::string_view accession_no = "",
114 std::string_view start_datetime = "")
115 -> Result<int64_t>;
116 [[nodiscard]] auto create_mpps(const mpps_record& record) -> Result<int64_t>;
117 [[nodiscard]] auto update_mpps(std::string_view mpps_uid,
118 std::string_view new_status,
119 std::string_view end_datetime = "",
120 std::string_view performed_series = "")
121 -> VoidResult;
122 [[nodiscard]] auto update_mpps(const mpps_record& record) -> VoidResult;
123 [[nodiscard]] auto find_mpps(std::string_view mpps_uid) const
124 -> std::optional<mpps_record>;
125 [[nodiscard]] auto find_mpps_by_pk(int64_t pk) const
126 -> std::optional<mpps_record>;
127 [[nodiscard]] auto list_active_mpps(std::string_view station_ae) const
128 -> Result<std::vector<mpps_record>>;
129 [[nodiscard]] auto find_mpps_by_study(std::string_view study_uid) const
130 -> Result<std::vector<mpps_record>>;
131 [[nodiscard]] auto search_mpps(const mpps_query& query) const
132 -> Result<std::vector<mpps_record>>;
133 [[nodiscard]] auto delete_mpps(std::string_view mpps_uid) -> VoidResult;
134 [[nodiscard]] auto mpps_count() const -> Result<size_t>;
135 [[nodiscard]] auto mpps_count(std::string_view status) const
136 -> Result<size_t>;
137
138private:
139 [[nodiscard]] auto parse_mpps_row(void* stmt) const -> mpps_record;
140 [[nodiscard]] static auto parse_timestamp(const std::string& str)
141 -> std::chrono::system_clock::time_point;
142
143 sqlite3* db_{nullptr};
144};
145
146} // namespace kcenon::pacs::storage
147
148#endif
Generic base repository for CRUD operations.
static auto parse_timestamp(const std::string &str) -> std::chrono::system_clock::time_point
auto find_mpps(std::string_view mpps_uid) const -> std::optional< mpps_record >
auto operator=(const mpps_repository &) -> mpps_repository &=delete
auto parse_mpps_row(void *stmt) const -> mpps_record
auto find_mpps_by_pk(int64_t pk) const -> std::optional< mpps_record >
auto update_mpps(std::string_view mpps_uid, std::string_view new_status, std::string_view end_datetime="", std::string_view performed_series="") -> VoidResult
auto create_mpps(std::string_view mpps_uid, std::string_view station_ae="", std::string_view modality="", std::string_view study_uid="", std::string_view accession_no="", std::string_view start_datetime="") -> Result< int64_t >
auto search_mpps(const mpps_query &query) const -> Result< std::vector< mpps_record > >
mpps_repository(const mpps_repository &)=delete
auto mpps_count() const -> Result< size_t >
auto delete_mpps(std::string_view mpps_uid) -> VoidResult
auto find_mpps_by_study(std::string_view study_uid) const -> Result< std::vector< mpps_record > >
auto list_active_mpps(std::string_view station_ae) const -> Result< std::vector< mpps_record > >
MPPS (Modality Performed Procedure Step) record data structures.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
MPPS record from the database.