PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
storage_commitment_endpoints.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
19#pragma once
20
21#include <chrono>
22#include <map>
23#include <mutex>
24#include <optional>
25#include <string>
26#include <string_view>
27#include <vector>
28
30
31namespace kcenon::pacs::web {
32
33struct rest_server_context;
34
35namespace storage_commitment {
36
41 pending,
42 success,
43 partial,
44 failure
45};
46
50[[nodiscard]] std::string_view to_string(transaction_state state) noexcept;
51
55[[nodiscard]] std::optional<transaction_state> parse_state(
56 std::string_view str) noexcept;
57
63 std::string transaction_uid;
64
67
69 std::vector<services::sop_reference> requested_references;
70
72 std::vector<services::sop_reference> success_references;
73
75 std::vector<std::pair<services::sop_reference,
77
79 std::string study_instance_uid;
80
82 std::chrono::system_clock::time_point created_at;
83
85 std::optional<std::chrono::system_clock::time_point> completed_at;
86};
87
95public:
100 void add(commitment_transaction txn);
101
107 [[nodiscard]] std::optional<commitment_transaction> find(
108 std::string_view transaction_uid) const;
109
115 bool update(const commitment_transaction& txn);
116
122 [[nodiscard]] std::vector<commitment_transaction> list(
123 size_t limit = 0) const;
124
128 [[nodiscard]] size_t size() const;
129
130private:
131 mutable std::mutex mutex_;
132 std::map<std::string, commitment_transaction, std::less<>> transactions_;
133};
134
140[[nodiscard]] std::string transaction_to_json(const commitment_transaction& txn);
141
147[[nodiscard]] std::string transactions_to_json(
148 const std::vector<commitment_transaction>& transactions);
149
157 std::vector<services::sop_reference> references;
158 std::string error_message;
159 bool valid{false};
160};
161
162[[nodiscard]] parse_result parse_commitment_request(
163 std::string_view json_body,
164 std::string_view study_uid = "");
165
166} // namespace storage_commitment
167
168namespace endpoints {
169
170// Internal function - implementation in cpp file
171// Registers storage commitment endpoints with the Crow app
172// Called from rest_server.cpp
173
174} // namespace endpoints
175
176} // namespace kcenon::pacs::web
std::map< std::string, commitment_transaction, std::less<> > transactions_
std::optional< commitment_transaction > find(std::string_view transaction_uid) const
Find a transaction by its UID.
void add(commitment_transaction txn)
Add a new transaction.
bool update(const commitment_transaction &txn)
Update an existing transaction.
size_t size() const
Get the number of stored transactions.
std::vector< commitment_transaction > list(size_t limit=0) const
List all transactions (newest first)
commitment_failure_reason
Failure reason codes for Storage Commitment.
transaction_state
Transaction state for DICOMweb Storage Commitment.
@ partial
Some instances verified, others failed.
@ success
All referenced instances verified present and intact.
@ pending
Commitment request received, verification in progress.
parse_result parse_commitment_request(std::string_view json_body, std::string_view study_uid="")
std::string transactions_to_json(const std::vector< commitment_transaction > &transactions)
Serialize a list of transactions to DICOM JSON array.
std::optional< transaction_state > parse_state(std::string_view str) noexcept
Parse transaction state from string.
std::string_view to_string(transaction_state state) noexcept
Convert transaction state to string.
std::string transaction_to_json(const commitment_transaction &txn)
Serialize a commitment transaction to DICOM JSON.
Data types for DICOM Storage Commitment Push Model Service.
Reference to a SOP Instance in a commitment request.
std::vector< std::pair< services::sop_reference, services::commitment_failure_reason > > failed_references
Failed references with reasons (populated when verified)
std::string transaction_uid
Unique transaction identifier (DICOM UID format)
std::vector< services::sop_reference > success_references
Successfully committed references (populated when verified)
std::optional< std::chrono::system_clock::time_point > completed_at
Timestamp when verification completed.
std::string study_instance_uid
Study Instance UID (optional, for study-level commitment)
std::vector< services::sop_reference > requested_references
SOP Instance references requested for commitment.
std::chrono::system_clock::time_point created_at
Timestamp when the commitment was requested.