PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
worklist_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 worklist_repository : public base_repository<worklist_item, int64_t> {
31public:
32 explicit worklist_repository(std::shared_ptr<pacs_database_adapter> db);
33 ~worklist_repository() override = default;
34
35 worklist_repository(const worklist_repository&) = delete;
36 auto operator=(const worklist_repository&) -> worklist_repository& = delete;
37 worklist_repository(worklist_repository&&) noexcept = default;
38 auto operator=(worklist_repository&&) noexcept
39 -> worklist_repository& = default;
40
41 [[nodiscard]] auto add_worklist_item(const worklist_item& item)
42 -> Result<int64_t>;
43 [[nodiscard]] auto update_worklist_status(std::string_view step_id,
44 std::string_view accession_no,
45 std::string_view new_status)
46 -> VoidResult;
47 [[nodiscard]] auto query_worklist(const worklist_query& query)
48 -> Result<std::vector<worklist_item>>;
49 [[nodiscard]] auto find_worklist_item(std::string_view step_id,
50 std::string_view accession_no)
51 -> std::optional<worklist_item>;
52 [[nodiscard]] auto find_worklist_by_pk(int64_t pk)
53 -> std::optional<worklist_item>;
54 [[nodiscard]] auto delete_worklist_item(std::string_view step_id,
55 std::string_view accession_no)
56 -> VoidResult;
57 [[nodiscard]] auto cleanup_old_worklist_items(std::chrono::hours age)
58 -> Result<size_t>;
59 [[nodiscard]] auto cleanup_worklist_items_before(
60 std::chrono::system_clock::time_point before) -> Result<size_t>;
61 [[nodiscard]] auto worklist_count() -> Result<size_t>;
62 [[nodiscard]] auto worklist_count(std::string_view status)
63 -> Result<size_t>;
64
65protected:
66 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
67 -> worklist_item override;
68 [[nodiscard]] auto entity_to_row(const worklist_item& entity) const
69 -> std::map<std::string, database_value> override;
70 [[nodiscard]] auto get_pk(const worklist_item& entity) const
71 -> int64_t override;
72 [[nodiscard]] auto has_pk(const worklist_item& entity) const
73 -> bool override;
74 [[nodiscard]] auto select_columns() const -> std::vector<std::string> override;
75
76private:
77 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
78 -> std::string;
79 [[nodiscard]] auto parse_timestamp(const std::string& str) const
80 -> std::chrono::system_clock::time_point;
81 [[nodiscard]] auto format_timestamp(
82 std::chrono::system_clock::time_point tp) const -> std::string;
83};
84
85} // namespace kcenon::pacs::storage
86
87#else
88
89struct sqlite3;
90
91namespace kcenon::pacs::storage {
92
93template <typename T>
95
96using VoidResult = kcenon::common::VoidResult;
97
99public:
100 explicit worklist_repository(sqlite3* db);
102
106 auto operator=(worklist_repository&&) noexcept -> worklist_repository&;
107
108 [[nodiscard]] auto add_worklist_item(const worklist_item& item)
109 -> Result<int64_t>;
110 [[nodiscard]] auto update_worklist_status(std::string_view step_id,
111 std::string_view accession_no,
112 std::string_view new_status)
113 -> VoidResult;
114 [[nodiscard]] auto query_worklist(const worklist_query& query) const
115 -> Result<std::vector<worklist_item>>;
116 [[nodiscard]] auto find_worklist_item(std::string_view step_id,
117 std::string_view accession_no) const
118 -> std::optional<worklist_item>;
119 [[nodiscard]] auto find_worklist_by_pk(int64_t pk) const
120 -> std::optional<worklist_item>;
121 [[nodiscard]] auto delete_worklist_item(std::string_view step_id,
122 std::string_view accession_no)
123 -> VoidResult;
124 [[nodiscard]] auto cleanup_old_worklist_items(std::chrono::hours age)
125 -> Result<size_t>;
126 [[nodiscard]] auto cleanup_worklist_items_before(
127 std::chrono::system_clock::time_point before) -> Result<size_t>;
128 [[nodiscard]] auto worklist_count() const -> Result<size_t>;
129 [[nodiscard]] auto worklist_count(std::string_view status) const
130 -> Result<size_t>;
131
132private:
133 [[nodiscard]] auto parse_worklist_row(void* stmt) const -> worklist_item;
134 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
135 -> std::string;
136 [[nodiscard]] static auto parse_timestamp(const std::string& str)
137 -> std::chrono::system_clock::time_point;
138
139 sqlite3* db_{nullptr};
140};
141
142} // namespace kcenon::pacs::storage
143
144#endif
Generic base repository for CRUD operations.
auto cleanup_old_worklist_items(std::chrono::hours age) -> Result< size_t >
auto operator=(const worklist_repository &) -> worklist_repository &=delete
auto update_worklist_status(std::string_view step_id, std::string_view accession_no, std::string_view new_status) -> VoidResult
auto cleanup_worklist_items_before(std::chrono::system_clock::time_point before) -> Result< size_t >
worklist_repository(const worklist_repository &)=delete
auto worklist_count() const -> Result< size_t >
auto find_worklist_by_pk(int64_t pk) const -> std::optional< worklist_item >
auto query_worklist(const worklist_query &query) const -> Result< std::vector< worklist_item > >
static auto parse_timestamp(const std::string &str) -> std::chrono::system_clock::time_point
auto find_worklist_item(std::string_view step_id, std::string_view accession_no) const -> std::optional< worklist_item >
auto parse_worklist_row(void *stmt) const -> worklist_item
auto delete_worklist_item(std::string_view step_id, std::string_view accession_no) -> VoidResult
auto add_worklist_item(const worklist_item &item) -> Result< int64_t >
static auto to_like_pattern(std::string_view pattern) -> std::string
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Worklist item record from the database.
Modality Worklist (MWL) record data structures.