22#include <kcenon/common/patterns/result.h>
30#ifdef PACS_WITH_DATABASE_SYSTEM
39class instance_repository :
public base_repository<instance_record, int64_t> {
65 std::string_view sop_uid,
66 std::string_view sop_class_uid,
67 std::string_view file_path,
69 std::string_view transfer_syntax = "",
70 std::optional<
int> instance_number = std::nullopt)
87 -> std::optional<instance_record>;
95 -> std::optional<instance_record>;
103 ->
Result<std::vector<instance_record>>;
111 ->
Result<std::vector<instance_record>>;
141 [[nodiscard]] auto
get_file_path(std::string_view sop_instance_uid)
142 ->
Result<std::optional<std::
string>>;
149 [[nodiscard]] auto
get_study_files(std::string_view study_instance_uid)
150 ->
Result<std::vector<std::
string>>;
158 ->
Result<std::vector<std::
string>>;
161 [[nodiscard]] auto map_row_to_entity(const database_row& row) const
162 -> instance_record override;
163 [[nodiscard]] auto entity_to_row(const instance_record& entity) const
164 -> std::map<std::
string, database_value> override;
165 [[nodiscard]] auto get_pk(const instance_record& entity) const
167 [[nodiscard]] auto has_pk(const instance_record& entity) const
169 [[nodiscard]] auto select_columns() const -> std::vector<std::
string> override;
173 -> std::chrono::system_clock::time_point;
174 [[nodiscard]] auto format_timestamp(
175 std::chrono::system_clock::time_point tp) const -> std::
string;
189using VoidResult = kcenon::common::VoidResult;
220 std::string_view sop_uid,
221 std::string_view sop_class_uid,
222 std::string_view file_path,
224 std::string_view transfer_syntax = "",
225 std::optional<
int> instance_number = std::nullopt)
241 [[nodiscard]] auto
find_instance(std::string_view sop_uid) const
257 [[nodiscard]] auto
list_instances(std::string_view series_uid) const
287 [[nodiscard]] auto
instance_count(std::string_view series_uid) const
296 [[nodiscard]] auto
get_file_path(std::string_view sop_instance_uid) const
297 ->
Result<std::optional<std::
string>>;
304 [[nodiscard]] auto
get_study_files(std::string_view study_instance_uid) const
305 ->
Result<std::vector<std::
string>>;
312 [[nodiscard]] auto
get_series_files(std::string_view series_instance_uid) const
313 ->
Result<std::vector<std::
string>>;
318 -> std::chrono::system_clock::time_point;
Generic base repository for CRUD operations.
Repository for instance metadata persistence (legacy SQLite interface)
auto find_instance_by_pk(int64_t pk) const -> std::optional< instance_record >
Find an instance record by its database primary key.
instance_repository(const instance_repository &)=delete
auto parse_instance_row(void *stmt) const -> instance_record
auto instance_count() const -> Result< size_t >
Get the total number of instance records in the repository.
instance_repository(instance_repository &&) noexcept
auto get_file_path(std::string_view sop_instance_uid) const -> Result< std::optional< std::string > >
Retrieve the file system path for a stored instance.
instance_repository(sqlite3 *db)
Construct an instance repository with a raw SQLite database handle.
auto upsert_instance(int64_t series_pk, std::string_view sop_uid, std::string_view sop_class_uid, std::string_view file_path, int64_t file_size, std::string_view transfer_syntax="", std::optional< int > instance_number=std::nullopt) -> Result< int64_t >
Insert or update an instance record by individual fields.
auto search_instances(const instance_query &query) const -> Result< std::vector< instance_record > >
Search for instance records matching the given query criteria.
auto get_study_files(std::string_view study_instance_uid) const -> Result< std::vector< std::string > >
Retrieve all file paths for instances belonging to a study.
auto list_instances(std::string_view series_uid) const -> Result< std::vector< instance_record > >
List all instance records belonging to a given series.
auto delete_instance(std::string_view sop_uid) -> VoidResult
Delete an instance record by its SOP Instance UID.
auto find_instance(std::string_view sop_uid) const -> std::optional< instance_record >
Find an instance record by its SOP Instance UID.
auto get_series_files(std::string_view series_instance_uid) const -> Result< std::vector< std::string > >
Retrieve all file paths for instances belonging to a series.
static auto parse_timestamp(const std::string &str) -> std::chrono::system_clock::time_point
auto operator=(const instance_repository &) -> instance_repository &=delete
Instance record data structures for database operations.
kcenon::common::Result< T > Result
Result type alias for operations returning a value.
Instance record from the database.