26#include <kcenon/common/patterns/result.h>
34#ifdef PACS_WITH_DATABASE_SYSTEM
45using VoidResult = kcenon::common::VoidResult;
79class sync_repository {
116 [[nodiscard]] auto
save_config(const client::sync_config& config) -> VoidResult;
124 [[nodiscard]] auto
find_config(std::string_view config_id) const
125 -> std::optional<client::sync_config>;
132 [[nodiscard]] auto
list_configs() const -> std::vector<client::sync_config>;
147 [[nodiscard]] auto
remove_config(std::string_view config_id) -> VoidResult;
158 std::string_view config_id,
160 size_t studies_synced) -> VoidResult;
174 [[nodiscard]] auto
save_conflict(const client::sync_conflict& conflict) -> VoidResult;
182 [[nodiscard]] auto
find_conflict(std::string_view study_uid) const
183 -> std::optional<client::sync_conflict>;
191 [[nodiscard]] auto
list_conflicts(std::string_view config_id) const
192 -> std::vector<client::sync_conflict>;
200 -> std::vector<client::sync_conflict>;
210 std::string_view study_uid,
211 client::conflict_resolution resolution) -> VoidResult;
232 [[nodiscard]] auto
save_history(const client::sync_history& history) -> VoidResult;
241 [[nodiscard]] auto
list_history(std::string_view config_id,
size_t limit = 100) const
242 -> std::vector<client::sync_history>;
251 -> std::optional<client::sync_history>;
296 [[nodiscard]] auto
is_valid() const noexcept ->
bool;
306 [[nodiscard]] auto map_row_to_config(const database_row& row) const
307 -> client::sync_config;
312 [[nodiscard]] auto map_row_to_conflict(const database_row& row) const
313 -> client::sync_conflict;
318 [[nodiscard]] auto map_row_to_history(const database_row& row) const
319 -> client::sync_history;
325 const std::vector<std::
string>& vec) -> std::
string;
331 std::string_view json) -> std::vector<std::
string>;
336 [[nodiscard]] auto parse_timestamp(const std::
string& str) const
337 -> std::chrono::system_clock::time_point;
342 [[nodiscard]] auto format_timestamp(
343 std::chrono::system_clock::time_point tp) const -> std::
string;
346 std::shared_ptr<pacs_database_adapter>
db_;
366using VoidResult = kcenon::common::VoidResult;
386 [[nodiscard]] auto
save_config(const client::sync_config& config) -> VoidResult;
387 [[nodiscard]] auto
find_config(std::string_view config_id) const
388 -> std::optional<client::sync_config>;
389 [[nodiscard]] auto
list_configs() const -> std::vector<client::sync_config>;
391 [[nodiscard]] auto
remove_config(std::string_view config_id) -> VoidResult;
393 std::string_view config_id,
bool success,
size_t studies_synced) -> VoidResult;
396 [[nodiscard]] auto
save_conflict(const client::sync_conflict& conflict) -> VoidResult;
397 [[nodiscard]] auto
find_conflict(std::string_view study_uid) const
398 -> std::optional<client::sync_conflict>;
399 [[nodiscard]] auto
list_conflicts(std::string_view config_id) const
400 -> std::vector<client::sync_conflict>;
402 -> std::vector<client::sync_conflict>;
404 std::string_view study_uid, client::conflict_resolution resolution) -> VoidResult;
409 [[nodiscard]] auto
save_history(const client::sync_history& history) -> VoidResult;
410 [[nodiscard]] auto
list_history(std::string_view config_id,
size_t limit = 100) const
411 -> std::vector<client::sync_history>;
413 -> std::optional<client::sync_history>;
423 [[nodiscard]] auto
is_valid() const noexcept ->
bool;
426 [[nodiscard]] auto
parse_config_row(
void* stmt) const -> client::sync_config;
430 const std::vector<std::
string>& vec) -> std::
string;
432 std::string_view json) -> std::vector<std::
string>;
Repository for sync persistence (legacy SQLite interface)
auto find_config(std::string_view config_id) const -> std::optional< client::sync_config >
auto list_unresolved_conflicts() const -> std::vector< client::sync_conflict >
auto save_config(const client::sync_config &config) -> VoidResult
auto count_syncs_today() const -> size_t
auto remove_config(std::string_view config_id) -> VoidResult
sync_repository(sync_repository &&) noexcept
auto count_unresolved_conflicts() const -> size_t
static auto serialize_vector(const std::vector< std::string > &vec) -> std::string
auto get_last_history(std::string_view config_id) const -> std::optional< client::sync_history >
auto save_history(const client::sync_history &history) -> VoidResult
auto list_enabled_configs() const -> std::vector< client::sync_config >
auto parse_config_row(void *stmt) const -> client::sync_config
sync_repository(const sync_repository &)=delete
auto find_conflict(std::string_view study_uid) const -> std::optional< client::sync_conflict >
auto resolve_conflict(std::string_view study_uid, client::conflict_resolution resolution) -> VoidResult
auto list_configs() const -> std::vector< client::sync_config >
auto cleanup_old_history(std::chrono::hours max_age) -> Result< size_t >
auto parse_conflict_row(void *stmt) const -> client::sync_conflict
static auto deserialize_vector(std::string_view json) -> std::vector< std::string >
auto is_valid() const noexcept -> bool
sync_repository(sqlite3 *db)
auto update_config_stats(std::string_view config_id, bool success, size_t studies_synced) -> VoidResult
auto operator=(const sync_repository &) -> sync_repository &=delete
auto count_configs() const -> size_t
auto list_conflicts(std::string_view config_id) const -> std::vector< client::sync_conflict >
auto parse_history_row(void *stmt) const -> client::sync_history
auto list_history(std::string_view config_id, size_t limit=100) const -> std::vector< client::sync_history >
auto save_conflict(const client::sync_conflict &conflict) -> VoidResult
auto cleanup_old_conflicts(std::chrono::hours max_age) -> Result< size_t >
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Unified database adapter for PACS system.
Types and structures for bidirectional DICOM synchronization.