PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
audit_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 audit_repository : public base_repository<audit_record, int64_t> {
31public:
32 explicit audit_repository(std::shared_ptr<pacs_database_adapter> db);
33 ~audit_repository() override = default;
34
35 audit_repository(const audit_repository&) = delete;
36 auto operator=(const audit_repository&) -> audit_repository& = delete;
37 audit_repository(audit_repository&&) noexcept = default;
38 auto operator=(audit_repository&&) noexcept -> audit_repository& = default;
39
40 [[nodiscard]] auto add_audit_log(const audit_record& record)
41 -> Result<int64_t>;
42 [[nodiscard]] auto query_audit_log(const audit_query& query)
43 -> Result<std::vector<audit_record>>;
44 [[nodiscard]] auto find_audit_by_pk(int64_t pk)
45 -> std::optional<audit_record>;
46 [[nodiscard]] auto audit_count() -> Result<size_t>;
47 [[nodiscard]] auto cleanup_old_audit_logs(std::chrono::hours age)
48 -> Result<size_t>;
49
50protected:
51 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
52 -> audit_record override;
53 [[nodiscard]] auto entity_to_row(const audit_record& entity) const
54 -> std::map<std::string, database_value> override;
55 [[nodiscard]] auto get_pk(const audit_record& entity) const
56 -> int64_t override;
57 [[nodiscard]] auto has_pk(const audit_record& entity) const
58 -> bool override;
59 [[nodiscard]] auto select_columns() const -> std::vector<std::string> override;
60
61private:
62 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
63 -> std::string;
64 [[nodiscard]] auto parse_timestamp(const std::string& str) const
65 -> std::chrono::system_clock::time_point;
66 [[nodiscard]] auto format_timestamp(
67 std::chrono::system_clock::time_point tp) const -> std::string;
68};
69
70} // namespace kcenon::pacs::storage
71
72#else
73
74struct sqlite3;
75
76namespace kcenon::pacs::storage {
77
78template <typename T>
80
81using VoidResult = kcenon::common::VoidResult;
82
84public:
85 explicit audit_repository(sqlite3* db);
87
89 auto operator=(const audit_repository&) -> audit_repository& = delete;
91 auto operator=(audit_repository&&) noexcept -> audit_repository&;
92
93 [[nodiscard]] auto add_audit_log(const audit_record& record)
94 -> Result<int64_t>;
95 [[nodiscard]] auto query_audit_log(const audit_query& query) const
96 -> Result<std::vector<audit_record>>;
97 [[nodiscard]] auto find_audit_by_pk(int64_t pk) const
98 -> std::optional<audit_record>;
99 [[nodiscard]] auto audit_count() const -> Result<size_t>;
100 [[nodiscard]] auto cleanup_old_audit_logs(std::chrono::hours age)
101 -> Result<size_t>;
102
103private:
104 [[nodiscard]] auto parse_audit_row(void* stmt) const -> audit_record;
105 [[nodiscard]] static auto to_like_pattern(std::string_view pattern)
106 -> std::string;
107 [[nodiscard]] static auto parse_timestamp(const std::string& str)
108 -> std::chrono::system_clock::time_point;
109
110 sqlite3* db_{nullptr};
111};
112
113} // namespace kcenon::pacs::storage
114
115#endif
Audit log record data structures.
Generic base repository for CRUD operations.
auto audit_count() const -> Result< size_t >
auto query_audit_log(const audit_query &query) const -> Result< std::vector< audit_record > >
static auto to_like_pattern(std::string_view pattern) -> std::string
auto add_audit_log(const audit_record &record) -> Result< int64_t >
auto operator=(const audit_repository &) -> audit_repository &=delete
auto cleanup_old_audit_logs(std::chrono::hours age) -> Result< size_t >
static auto parse_timestamp(const std::string &str) -> std::chrono::system_clock::time_point
auto parse_audit_row(void *stmt) const -> audit_record
audit_repository(const audit_repository &)=delete
auto find_audit_by_pk(int64_t pk) const -> std::optional< audit_record >
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Query parameters for audit log search.
Audit log record from the database.