4
4
5
5
import java .util .Collection ;
6
6
import java .util .List ;
7
+ import java .util .Map ;
7
8
import java .util .Optional ;
9
+ import java .util .Set ;
8
10
import life .qbic .application .commons .Result ;
9
11
import life .qbic .logging .api .Logger ;
12
+ import life .qbic .projectmanagement .application .measurement .MeasurementService .DeletionErrorCode ;
13
+ import life .qbic .projectmanagement .application .measurement .MeasurementService .MeasurementDeletionException ;
14
+ import life .qbic .projectmanagement .application .sample .SampleIdCodeEntry ;
10
15
import life .qbic .projectmanagement .domain .model .measurement .MeasurementCode ;
11
16
import life .qbic .projectmanagement .domain .model .measurement .NGSMeasurement ;
12
17
import life .qbic .projectmanagement .domain .model .measurement .ProteomicsMeasurement ;
@@ -68,7 +73,7 @@ public Result<ProteomicsMeasurement, ResponseCode> save(
68
73
return Result .fromError (ResponseCode .FAILED );
69
74
}
70
75
try {
71
- measurementDataRepo .addProtemicsMeasurement (measurement , sampleCodes );
76
+ measurementDataRepo .addProteomicsMeasurement (measurement , sampleCodes );
72
77
} catch (RuntimeException e ) {
73
78
log .error ("Saving proteomics measurement in data repo failed for measurement "
74
79
+ measurement .measurementCode ().value (), e );
@@ -80,24 +85,126 @@ public Result<ProteomicsMeasurement, ResponseCode> save(
80
85
}
81
86
82
87
@ Override
83
- public Optional <ProteomicsMeasurement > find (String measurementCode ) {
88
+ public Optional <ProteomicsMeasurement > findProteomicsMeasurement (String measurementCode ) {
84
89
try {
85
90
var code = MeasurementCode .parse (measurementCode );
86
91
return pxpMeasurementJpaRepo .findProteomicsMeasurementByMeasurementCode (code );
87
92
} catch (IllegalArgumentException e ) {
88
93
log .error ("Illegal measurement code: " + measurementCode , e );
89
94
return Optional .empty ();
90
95
}
96
+ }
97
+
98
+ @ Override
99
+ public void deleteAllProteomics (Set <ProteomicsMeasurement > measurements ) {
100
+ if (measurements .isEmpty ()) {
101
+ return ;
102
+ }
103
+ List <MeasurementCode > measurementCodes = measurements .stream ()
104
+ .map (ProteomicsMeasurement ::measurementCode ).toList ();
105
+ if (measurementDataRepo .hasDataAttached (measurementCodes )) {
106
+ throw new MeasurementDeletionException (DeletionErrorCode .DATA_ATTACHED );
107
+ }
108
+ try {
109
+ deleteAllPtx (measurements .stream ().toList ());
110
+ } catch (Exception e ) {
111
+ log .error ("Measurement deletion failed due to " + e .getMessage ());
112
+ throw new MeasurementDeletionException (DeletionErrorCode .FAILED );
113
+ }
114
+ }
115
+
116
+ @ Override
117
+ public void deleteAllNGS (Set <NGSMeasurement > measurements ) {
118
+ if (measurements .isEmpty ()) {
119
+ return ;
120
+ }
121
+ List <MeasurementCode > measurementCodes = measurements .stream ()
122
+ .map (NGSMeasurement ::measurementCode ).toList ();
123
+ if (measurementDataRepo .hasDataAttached (measurementCodes )) {
124
+ throw new MeasurementDeletionException (DeletionErrorCode .DATA_ATTACHED );
125
+ }
126
+ try {
127
+ deleteAllNGS (measurements .stream ().toList ());
128
+ } catch (Exception e ) {
129
+ log .error ("Measurement deletion failed due to " + e .getMessage ());
130
+ throw new MeasurementDeletionException (DeletionErrorCode .FAILED );
131
+ }
132
+ }
133
+
134
+ private void deleteAllPtx (List <ProteomicsMeasurement > measurements ) {
135
+ pxpMeasurementJpaRepo .deleteAll (measurements );
136
+ measurementDataRepo .deleteProteomicsMeasurements (measurements );
137
+ }
91
138
139
+ private void deleteAllNGS (List <NGSMeasurement > measurements ) {
140
+ ngsMeasurementJpaRepo .deleteAll (measurements );
141
+ measurementDataRepo .deleteNGSMeasurements (measurements );
142
+ }
143
+
144
+ @ Override
145
+ public Optional <NGSMeasurement > findNGSMeasurement (String measurementCode ) {
146
+ try {
147
+ var code = MeasurementCode .parse (measurementCode );
148
+ return ngsMeasurementJpaRepo .findNGSMeasurementByMeasurementCode (code );
149
+ } catch (IllegalArgumentException e ) {
150
+ log .error ("Illegal measurement code: " + measurementCode , e );
151
+ return Optional .empty ();
152
+ }
92
153
}
93
154
94
155
@ Override
95
- public void update (ProteomicsMeasurement measurement ) {
156
+ public void updateProteomics (ProteomicsMeasurement measurement ) {
96
157
pxpMeasurementJpaRepo .save (measurement );
97
158
}
98
159
99
160
@ Override
100
- public void updateAll (Collection <ProteomicsMeasurement > measurements ) {
161
+ public void updateNGS (NGSMeasurement measurement ) {
162
+ ngsMeasurementJpaRepo .save (measurement );
163
+ }
164
+
165
+ @ Override
166
+ public void updateAllProteomics (Collection <ProteomicsMeasurement > measurements ) {
101
167
pxpMeasurementJpaRepo .saveAll (measurements );
102
168
}
169
+
170
+ @ Override
171
+ public void updateAllNGS (Collection <NGSMeasurement > measurements ) {
172
+ ngsMeasurementJpaRepo .saveAll (measurements );
173
+ }
174
+
175
+ @ Override
176
+ public void saveAllProteomics (
177
+ Map <ProteomicsMeasurement , Collection <SampleIdCodeEntry >> proteomicsMeasurementsMapping ) {
178
+ try {
179
+ pxpMeasurementJpaRepo .saveAll (proteomicsMeasurementsMapping .keySet ());
180
+ } catch (RuntimeException e ) {
181
+ log .error ("Saving proteomics measurement failed" , e );
182
+ throw e ;
183
+ }
184
+ try {
185
+ measurementDataRepo .saveAllProteomics (proteomicsMeasurementsMapping );
186
+ } catch (RuntimeException e ) {
187
+ log .error ("Saving proteomics measurement in data repo failed" , e );
188
+ pxpMeasurementJpaRepo .deleteAll (proteomicsMeasurementsMapping .keySet ());
189
+ throw e ;
190
+ }
191
+ }
192
+
193
+ @ Override
194
+ public void saveAllNGS (
195
+ Map <NGSMeasurement , Collection <SampleIdCodeEntry >> ngsMeasurementsMapping ) {
196
+ try {
197
+ ngsMeasurementJpaRepo .saveAll (ngsMeasurementsMapping .keySet ());
198
+ } catch (RuntimeException e ) {
199
+ log .error ("Saving ngs measurement failed" , e );
200
+ throw e ;
201
+ }
202
+ try {
203
+ measurementDataRepo .saveAllNGS (ngsMeasurementsMapping );
204
+ } catch (RuntimeException e ) {
205
+ log .error ("Saving ngs measurement in data repo failed" , e );
206
+ ngsMeasurementJpaRepo .deleteAll (ngsMeasurementsMapping .keySet ());
207
+ throw e ;
208
+ }
209
+ }
103
210
}
0 commit comments