|
1 | 1 | package life.qbic.projectmanagement.application;
|
2 | 2 |
|
3 |
| -import java.util.List; |
4 |
| -import java.util.Objects; |
5 | 3 | import life.qbic.application.commons.Result;
|
6 | 4 | import life.qbic.projectmanagement.application.api.SampleCodeService;
|
7 | 5 | import life.qbic.projectmanagement.domain.project.ProjectId;
|
8 |
| -import life.qbic.projectmanagement.domain.project.repository.SampleRepository; |
9 | 6 | import life.qbic.projectmanagement.domain.project.sample.Sample;
|
| 7 | +import life.qbic.projectmanagement.domain.project.sample.SampleCode; |
10 | 8 | import life.qbic.projectmanagement.domain.project.sample.SampleRegistrationRequest;
|
11 | 9 | import life.qbic.projectmanagement.domain.project.service.SampleDomainService;
|
12 | 10 | import org.springframework.beans.factory.annotation.Autowired;
|
13 | 11 | import org.springframework.stereotype.Service;
|
14 | 12 |
|
| 13 | +import java.util.Collection; |
| 14 | +import java.util.HashMap; |
| 15 | +import java.util.Map; |
| 16 | +import java.util.Objects; |
| 17 | + |
15 | 18 | /**
|
16 | 19 | * Sample Registration Service
|
17 | 20 | * <p>
|
|
20 | 23 | @Service
|
21 | 24 | public class SampleRegistrationService {
|
22 | 25 |
|
23 |
| - private final SampleRepository sampleRepository; |
24 |
| - |
25 |
| - private final SampleCodeService sampleCodeService; |
26 |
| - |
27 |
| - private final SampleDomainService sampleDomainService; |
28 |
| - |
29 |
| - @Autowired |
30 |
| - public SampleRegistrationService(SampleRepository sampleRepository, |
31 |
| - SampleCodeService sampleCodeService, SampleDomainService sampleDomainService) { |
32 |
| - this.sampleRepository = Objects.requireNonNull(sampleRepository); |
33 |
| - this.sampleCodeService = Objects.requireNonNull(sampleCodeService); |
34 |
| - this.sampleDomainService = Objects.requireNonNull(sampleDomainService); |
35 |
| - } |
| 26 | + private final SampleCodeService sampleCodeService; |
| 27 | + private final SampleDomainService sampleDomainService; |
36 | 28 |
|
37 |
| - public List<String> retrieveProteomics() { |
38 |
| - return List.of("Sample Name", "Biological Replicate", "Treatment", "Cell Line", "Species", |
39 |
| - "Specimen", "Analyte", "Comment"); |
40 |
| - } |
41 |
| - |
42 |
| - public List<String> retrieveLigandomics() { |
43 |
| - return List.of("Sample Name", "Biological Replicate", "Treatment", "Cell Line", "Species", |
44 |
| - "Specimen", "Analyte", "Comment"); |
45 |
| - } |
46 |
| - |
47 |
| - public List<String> retrieveMetabolomics() { |
48 |
| - return List.of("Sample Name", "Biological Replicate", "Treatment", "Cell Line", "Species", |
49 |
| - "Specimen", "Analyte", "Comment"); |
50 |
| - } |
51 |
| - |
52 |
| - public List<String> retrieveGenomics() { |
53 |
| - return List.of("Analysis to be performed", "Plate position (e.g. A1)", "Plate title", |
54 |
| - "Sample label", "Biological replicate reference id", "Species", "Specimen", |
55 |
| - "FFPE material"); |
56 |
| - } |
| 29 | + @Autowired |
| 30 | + public SampleRegistrationService(SampleCodeService sampleCodeService, |
| 31 | + SampleDomainService sampleDomainService) { |
| 32 | + this.sampleCodeService = Objects.requireNonNull(sampleCodeService); |
| 33 | + this.sampleDomainService = Objects.requireNonNull(sampleDomainService); |
| 34 | + } |
57 | 35 |
|
58 |
| - public Result<Sample, ResponseCode> registerSample( |
59 |
| - SampleRegistrationRequest sampleRegistrationRequest, ProjectId projectId) { |
60 |
| - var result = sampleCodeService.generateFor(projectId); |
61 |
| - if (result.isError()) { |
62 |
| - return Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED); |
| 36 | + public Result<Sample, ResponseCode> registerSample(SampleRegistrationRequest sampleRegistrationRequest, ProjectId projectId) { |
| 37 | + Objects.requireNonNull(sampleRegistrationRequest); |
| 38 | + Objects.requireNonNull(projectId); |
| 39 | + var sampleCode = sampleCodeService.generateFor(projectId); |
| 40 | + if (sampleCode.isError()) { |
| 41 | + return Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED); |
| 42 | + } |
| 43 | + var result = sampleDomainService.registerSample(sampleCode.getValue(), sampleRegistrationRequest); |
| 44 | + if (result.isError()) { |
| 45 | + return Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED); |
| 46 | + } |
| 47 | + return Result.fromValue(result.getValue()); |
63 | 48 | }
|
64 |
| - var registration = sampleDomainService.registerSample(result.getValue(), sampleRegistrationRequest); |
65 |
| - if (registration.isValue()) { |
66 |
| - return Result.fromValue(registration.getValue()); |
| 49 | + |
| 50 | + public Result<Collection<Sample>, ResponseCode> registerSamples( |
| 51 | + Collection<SampleRegistrationRequest> sampleRegistrationRequests, ProjectId projectId) { |
| 52 | + Objects.requireNonNull(sampleRegistrationRequests); |
| 53 | + Objects.requireNonNull(projectId); |
| 54 | + if (sampleRegistrationRequests.size() < 1) { |
| 55 | + return Result.fromError(ResponseCode.NO_SAMPLES_DEFINED); |
| 56 | + } |
| 57 | + Map<SampleCode, SampleRegistrationRequest> sampleCodesToRegistrationRequests = new HashMap<>(); |
| 58 | + sampleRegistrationRequests.forEach(sampleRegistrationRequest -> sampleCodeService.generateFor(projectId) |
| 59 | + .onValue(sampleCode -> sampleCodesToRegistrationRequests.put(sampleCode, sampleRegistrationRequest)) |
| 60 | + .onError(responseCode -> Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED))); |
| 61 | + var result = sampleDomainService.registerSamples(sampleCodesToRegistrationRequests); |
| 62 | + return result.onValue(Result::fromValue).flatMapError(responseCode -> Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED)); |
67 | 63 | }
|
68 |
| - return Result.fromError(ResponseCode.SAMPLE_REGISTRATION_FAILED); |
69 |
| - } |
70 | 64 |
|
71 |
| - public enum ResponseCode { |
72 |
| - SAMPLE_REGISTRATION_FAILED |
73 |
| - } |
| 65 | + public enum ResponseCode { |
| 66 | + SAMPLE_REGISTRATION_FAILED, |
| 67 | + NO_SAMPLES_DEFINED |
| 68 | + } |
74 | 69 |
|
75 | 70 | }
|
0 commit comments