PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
repository_factory.cpp
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
18
19#ifdef PACS_WITH_DATABASE_SYSTEM
20
22
48
49namespace kcenon::pacs::storage {
50
51repository_factory::repository_factory(
52 std::shared_ptr<pacs_database_adapter> db)
53 : db_(std::move(db)) {}
54
55auto repository_factory::patients() -> std::shared_ptr<patient_repository> {
56 if (!patients_) {
57 patients_ = std::make_shared<patient_repository>(db_);
58 }
59 return patients_;
60}
61
62auto repository_factory::studies() -> std::shared_ptr<study_repository> {
63 if (!studies_) {
64 studies_ = std::make_shared<study_repository>(db_);
65 }
66 return studies_;
67}
68
69auto repository_factory::series() -> std::shared_ptr<series_repository> {
70 if (!series_) {
71 series_ = std::make_shared<series_repository>(db_);
72 }
73 return series_;
74}
75
76auto repository_factory::instances() -> std::shared_ptr<instance_repository> {
77 if (!instances_) {
78 instances_ = std::make_shared<instance_repository>(db_);
79 }
80 return instances_;
81}
82
83auto repository_factory::mpps() -> std::shared_ptr<mpps_repository> {
84 if (!mpps_) {
85 mpps_ = std::make_shared<mpps_repository>(db_);
86 }
87 return mpps_;
88}
89
90auto repository_factory::worklist() -> std::shared_ptr<worklist_repository> {
91 if (!worklist_) {
92 worklist_ = std::make_shared<worklist_repository>(db_);
93 }
94 return worklist_;
95}
96
97auto repository_factory::ups() -> std::shared_ptr<ups_repository> {
98 if (!ups_) {
99 ups_ = std::make_shared<ups_repository>(db_);
100 }
101 return ups_;
102}
103
104auto repository_factory::audit() -> std::shared_ptr<audit_repository> {
105 if (!audit_) {
106 audit_ = std::make_shared<audit_repository>(db_);
107 }
108 return audit_;
109}
110
111auto repository_factory::jobs() -> std::shared_ptr<job_repository> {
112 if (!jobs_) {
113 jobs_ = std::make_shared<job_repository>(db_);
114 }
115 return jobs_;
116}
117
118auto repository_factory::annotations()
119 -> std::shared_ptr<annotation_repository> {
120 if (!annotations_) {
121 annotations_ = std::make_shared<annotation_repository>(db_);
122 }
123 return annotations_;
124}
125
126auto repository_factory::routing_rules()
127 -> std::shared_ptr<routing_repository> {
128 if (!routing_rules_) {
129 routing_rules_ = std::make_shared<routing_repository>(db_);
130 }
131 return routing_rules_;
132}
133
134auto repository_factory::nodes() -> std::shared_ptr<node_repository> {
135 if (!nodes_) {
136 nodes_ = std::make_shared<node_repository>(db_);
137 }
138 return nodes_;
139}
140
141auto repository_factory::sync_states() -> std::shared_ptr<sync_repository> {
142 if (!sync_states_) {
143 sync_states_ = std::make_shared<sync_repository>(db_);
144 }
145 return sync_states_;
146}
147
148auto repository_factory::sync_configs()
149 -> std::shared_ptr<sync_config_repository> {
150 if (!sync_configs_) {
151 sync_configs_ = std::make_shared<sync_config_repository>(db_);
152 }
153 return sync_configs_;
154}
155
156auto repository_factory::sync_conflicts()
157 -> std::shared_ptr<sync_conflict_repository> {
158 if (!sync_conflicts_) {
159 sync_conflicts_ = std::make_shared<sync_conflict_repository>(db_);
160 }
161 return sync_conflicts_;
162}
163
164auto repository_factory::sync_history()
165 -> std::shared_ptr<sync_history_repository> {
166 if (!sync_history_) {
167 sync_history_ = std::make_shared<sync_history_repository>(db_);
168 }
169 return sync_history_;
170}
171
172auto repository_factory::key_images()
173 -> std::shared_ptr<key_image_repository> {
174 if (!key_images_) {
175 key_images_ = std::make_shared<key_image_repository>(db_);
176 }
177 return key_images_;
178}
179
180auto repository_factory::measurements()
181 -> std::shared_ptr<measurement_repository> {
182 if (!measurements_) {
183 measurements_ = std::make_shared<measurement_repository>(db_);
184 }
185 return measurements_;
186}
187
188auto repository_factory::viewer_states()
189 -> std::shared_ptr<viewer_state_repository> {
190 if (!viewer_states_) {
191 viewer_states_ = std::make_shared<viewer_state_repository>(db_);
192 }
193 return viewer_states_;
194}
195
196auto repository_factory::viewer_state_records()
197 -> std::shared_ptr<viewer_state_record_repository> {
198 if (!viewer_state_records_) {
199 viewer_state_records_ =
200 std::make_shared<viewer_state_record_repository>(db_);
201 }
202 return viewer_state_records_;
203}
204
205auto repository_factory::recent_studies()
206 -> std::shared_ptr<recent_study_repository> {
207 if (!recent_studies_) {
208 recent_studies_ = std::make_shared<recent_study_repository>(db_);
209 }
210 return recent_studies_;
211}
212
213auto repository_factory::prefetch_queue()
214 -> std::shared_ptr<prefetch_repository> {
215 if (!prefetch_queue_) {
216 prefetch_queue_ = std::make_shared<prefetch_repository>(db_);
217 }
218 return prefetch_queue_;
219}
220
221auto repository_factory::prefetch_rules()
222 -> std::shared_ptr<prefetch_rule_repository> {
223 if (!prefetch_rules_) {
224 prefetch_rules_ = std::make_shared<prefetch_rule_repository>(db_);
225 }
226 return prefetch_rules_;
227}
228
229auto repository_factory::prefetch_history()
230 -> std::shared_ptr<prefetch_history_repository> {
231 if (!prefetch_history_) {
232 prefetch_history_ = std::make_shared<prefetch_history_repository>(db_);
233 }
234 return prefetch_history_;
235}
236
237auto repository_factory::commitments()
238 -> std::shared_ptr<commitment_repository> {
239 if (!commitments_) {
240 commitments_ = std::make_shared<commitment_repository>(db_);
241 }
242 return commitments_;
243}
244
245auto repository_factory::canonical_repositories() -> canonical_repository_set {
246 return {
247 .patients = patients(),
248 .studies = studies(),
249 .series = series(),
250 .instances = instances(),
251 .mpps = mpps(),
252 .worklist = worklist(),
253 .ups = ups(),
254 .audit = audit(),
255 .jobs = jobs(),
256 .annotations = annotations(),
257 .routing_rules = routing_rules(),
258 .nodes = nodes(),
259 .sync =
260 {
261 .configs = sync_configs(),
262 .conflicts = sync_conflicts(),
263 .history = sync_history(),
264 },
265 .key_images = key_images(),
266 .measurements = measurements(),
267 .viewer_state =
268 {
269 .records = viewer_state_records(),
270 .recent_studies = recent_studies(),
271 },
272 .prefetch =
273 {
274 .rules = prefetch_rules(),
275 .history = prefetch_history(),
276 },
277 .commitments = commitments(),
278 };
279}
280
281auto repository_factory::compatibility_repositories()
282 -> compatibility_repository_set {
283 return {
284 .sync_states = sync_states(),
285 .viewer_states = viewer_states(),
286 .prefetch_queue = prefetch_queue(),
287 };
288}
289
290auto repository_factory::db() const
291 -> std::shared_ptr<pacs_database_adapter> {
292 return db_;
293}
294
295} // namespace kcenon::pacs::storage
296
297#endif // PACS_WITH_DATABASE_SYSTEM
Repository for annotation persistence using base_repository pattern.
Repository for audit log persistence.
Repository for Storage Commitment transaction tracking.
Repository for instance metadata persistence using base_repository pattern.
Repository for job persistence using base_repository pattern.
Repository for key image persistence using base_repository pattern.
Repository for measurement persistence using base_repository pattern.
Repository for MPPS lifecycle persistence using base_repository pattern.
@ move
C-MOVE move request/response.
@ worklist
Modality Worklist Service Class.
@ ups
Unified Procedure Step Service Class.
@ mpps
Modality Performed Procedure Step.
Repository for remote PACS node persistence using base_repository pattern.
Unified database adapter for PACS system.
Repository for patient metadata persistence using base_repository pattern.
Repository for prefetch history records using base_repository pattern.
Repository for prefetch rule and history persistence.
Repository for prefetch rules using base_repository pattern.
Repository for recent study records using base_repository pattern.
Factory for creating repository instances.
Repository for routing rule persistence using base_repository pattern.
Repository for series metadata persistence using base_repository pattern.
Repository for study metadata persistence using base_repository pattern.
Repository for sync config records using base_repository pattern.
Repository for sync conflict records using base_repository pattern.
Repository for sync history records using base_repository pattern.
Repository for sync persistence.
Repository for UPS lifecycle and subscription persistence.
Repository for viewer state records using base_repository pattern.
Repository for viewer state persistence.
Repository for modality worklist persistence using base_repository pattern.