Skip to content

Commit 3750208

Browse files
Merge pull request #425 from qbicsoftware/release/0.30.0
Release/0.30.0
2 parents 9faf892 + 40a5bf4 commit 3750208

File tree

114 files changed

+1730
-751
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1730
-751
lines changed

application-commons/src/main/java/life/qbic/application/commons/ApplicationException.java

+2
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,9 @@ public enum ErrorCode {
138138
INVALID_PROJECT_TITLE,
139139
INVALID_PROJECT_CODE,
140140
DUPLICATE_PROJECT_CODE,
141+
DUPLICATE_GROUP_SELECTED,
141142
UNDEFINED_VARIABLE_LEVEL,
143+
NO_CONDITION_SELECTED,
142144
NO_SPECIES_DEFINED,
143145
NO_SPECIMEN_DEFINED,
144146
NO_ANALYTE_DEFINED,

finances-api/pom.xml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>life.qbic</groupId>
8+
<artifactId>datamanager</artifactId>
9+
<version>0.29.0</version>
10+
</parent>
11+
12+
<groupId>life.qbic.finances</groupId>
13+
<artifactId>finances-api</artifactId>
14+
15+
<properties>
16+
<maven.compiler.source>17</maven.compiler.source>
17+
<maven.compiler.target>17</maven.compiler.target>
18+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
19+
</properties>
20+
21+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package life.qbic.finances.api;
2+
3+
import java.util.Collection;
4+
import java.util.Optional;
5+
6+
/**
7+
* <b>Finance service</b>
8+
* <p>
9+
* Interface to enable clients to look up basic offer information.
10+
*
11+
* @since 1.0.0
12+
*/
13+
public interface FinanceService {
14+
15+
/**
16+
* Lists concise offer information for offers that contain a given character sequence in the
17+
* project title or in the offerId.
18+
* <p>
19+
* The search is inclusive, so either a match in the title or the project id will be returned.
20+
*
21+
* @param projectTitle a character sequence to search for in the project title of an offer
22+
* @param offerId a character sequence to search for in the offer id of an offer
23+
* @return list of {@link OfferSummary} matching the criteria
24+
* @since 1.0.0
25+
*/
26+
Collection<OfferSummary> findOfferContainingProjectTitleOrId(String projectTitle,
27+
String offerId);
28+
29+
/**
30+
* Same as {@link FinanceService#findOfferContainingProjectTitleOrId(String, String)} but with a
31+
* possibility for pagination by providing an offset and query result size limit.
32+
*
33+
* @param projectTitle a character sequence to search for in the project title of an offer
34+
* @param offerId a character sequence to search for in the offer id of an offer
35+
* @param offset the offset to start listing the matching search results
36+
* @param limit the maximum number of matching search results
37+
* @return list of {@link OfferSummary} matching the criteria
38+
* @since 1.0.0
39+
*/
40+
Collection<OfferSummary> findOfferContainingProjectTitleOrId(String projectTitle, String offerId,
41+
int offset, int limit);
42+
43+
44+
/**
45+
* Searches for an offer based on a given offer id
46+
*
47+
* @param offerId the offer id
48+
* @return an optional offer, is {@link Optional#empty()} if no matching offer was found
49+
* @since 1.0.0
50+
*/
51+
Optional<Offer> findOfferById(String offerId);
52+
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package life.qbic.finances.api;
2+
3+
/**
4+
* <b>Offer</b>
5+
*
6+
* <p>Holds offer information such as:</p>
7+
*
8+
* <ul>
9+
* <li>offer id</li>
10+
* <li>title</li>
11+
* <li>objective</li>
12+
* <li>experimental design</li>
13+
* </ul>
14+
*
15+
* @since 1.0.0
16+
*/
17+
public record Offer(String id, String title, String objective, String experimentDescription) {
18+
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package life.qbic.finances.api;
2+
3+
/**
4+
* <b>Offer summary</b>
5+
*
6+
* <p>Holds title and id of an offer</p>
7+
*
8+
* @since 1.0.0
9+
*/
10+
public record OfferSummary(String title, String offerId) {
11+
12+
}

finances-infrastructure/pom.xml

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>life.qbic</groupId>
8+
<artifactId>datamanager</artifactId>
9+
<version>0.29.0</version>
10+
</parent>
11+
12+
<artifactId>finances-infrastructure</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>17</maven.compiler.source>
16+
<maven.compiler.target>17</maven.compiler.target>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
</properties>
19+
<dependencies>
20+
<dependency>
21+
<groupId>life.qbic</groupId>
22+
<artifactId>finances</artifactId>
23+
<version>0.29.0</version>
24+
<scope>compile</scope>
25+
</dependency>
26+
</dependencies>
27+
28+
</project>

finances/src/main/java/life/qbic/projectmanagement/infrastructure/OfferPreviewRepository.java finances-infrastructure/src/main/java/life/qbic/finance/infrastructure/OfferPreviewRepository.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package life.qbic.projectmanagement.infrastructure;
1+
package life.qbic.finance.infrastructure;
22

33
import java.util.List;
4-
import life.qbic.controlling.domain.finances.offer.OfferPreview;
4+
import life.qbic.finance.domain.model.OfferPreview;
55
import org.springframework.data.domain.Page;
66
import org.springframework.data.domain.Pageable;
77
import org.springframework.data.repository.PagingAndSortingRepository;

finances/src/main/java/life/qbic/projectmanagement/infrastructure/OfferRepository.java finances-infrastructure/src/main/java/life/qbic/finance/infrastructure/OfferRepository.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package life.qbic.projectmanagement.infrastructure;
1+
package life.qbic.finance.infrastructure;
22

3-
import life.qbic.controlling.domain.finances.offer.Offer;
4-
import life.qbic.controlling.domain.finances.offer.OfferId;
3+
import life.qbic.finance.domain.model.Offer;
4+
import life.qbic.finance.domain.model.OfferId;
55
import org.springframework.data.repository.CrudRepository;
66

77
/**

finances/src/main/java/life/qbic/projectmanagement/infrastructure/OffsetBasedRequest.java finances-infrastructure/src/main/java/life/qbic/finance/infrastructure/OffsetBasedRequest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.projectmanagement.infrastructure;
1+
package life.qbic.finance.infrastructure;
22

33
import java.util.Objects;
44
import org.springframework.data.domain.Pageable;

finances/src/main/java/life/qbic/projectmanagement/infrastructure/SimpleOfferSearchService.java finances-infrastructure/src/main/java/life/qbic/finance/infrastructure/SimpleOfferSearchService.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package life.qbic.projectmanagement.infrastructure;
1+
package life.qbic.finance.infrastructure;
22

33
import java.util.List;
44
import java.util.Optional;
5-
import life.qbic.controlling.application.finances.offer.OfferSearchService;
6-
import life.qbic.controlling.domain.finances.offer.Offer;
7-
import life.qbic.controlling.domain.finances.offer.OfferId;
8-
import life.qbic.controlling.domain.finances.offer.OfferPreview;
5+
import life.qbic.finance.application.OfferSearchService;
6+
import life.qbic.finance.domain.model.Offer;
7+
import life.qbic.finance.domain.model.OfferId;
8+
import life.qbic.finance.domain.model.OfferPreview;
99
import org.springframework.beans.factory.annotation.Autowired;
1010
import org.springframework.stereotype.Service;
1111

finances/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@
3535
<groupId>jakarta.persistence</groupId>
3636
<artifactId>jakarta.persistence-api</artifactId>
3737
</dependency>
38+
<dependency>
39+
<groupId>life.qbic.finances</groupId>
40+
<artifactId>finances-api</artifactId>
41+
<version>0.29.0</version>
42+
<scope>compile</scope>
43+
</dependency>
3844
</dependencies>
3945

4046
</project>

finances/src/main/java/life/qbic/controlling/application/finances/offer/OfferLookupService.java

-73
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package life.qbic.finance.application;
2+
3+
import java.util.List;
4+
import java.util.Optional;
5+
import life.qbic.finance.domain.model.OfferPreview;
6+
import life.qbic.finances.api.FinanceService;
7+
import life.qbic.finances.api.Offer;
8+
import life.qbic.finances.api.OfferSummary;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.stereotype.Service;
11+
12+
/**
13+
* <b>Finance Service</b>
14+
* <p>
15+
* Enables search queries for offers.
16+
*
17+
* @since 1.0.0
18+
*/
19+
@Service
20+
public class FinanceServiceImpl implements FinanceService {
21+
22+
private final OfferSearchService offerSearchService;
23+
24+
@Autowired
25+
public FinanceServiceImpl(
26+
OfferSearchService offerSearchService) {
27+
this.offerSearchService = offerSearchService;
28+
}
29+
30+
private static OfferSummary convert(OfferPreview offerPreview) {
31+
return new OfferSummary(offerPreview.getProjectTitle().title(), offerPreview.offerId().id());
32+
}
33+
34+
private static Offer convert(life.qbic.finance.domain.model.Offer offer) {
35+
return new Offer(offer.offerId().id(), offer.projectTitle().title(),
36+
offer.projectObjective().objective(), offer.experimentalDesignDescription().description());
37+
}
38+
39+
/**
40+
* @inheritDocs
41+
*/
42+
@Override
43+
public List<OfferSummary> findOfferContainingProjectTitleOrId(String projectTitle,
44+
String offerId) {
45+
return offerSearchService.findByProjectTitleOrOfferId(projectTitle, offerId).stream()
46+
.map(FinanceServiceImpl::convert).toList();
47+
}
48+
49+
/**
50+
* @inheritDocs
51+
*/
52+
@Override
53+
public List<OfferSummary> findOfferContainingProjectTitleOrId(String projectTitle, String offerId,
54+
int offset, int limit) {
55+
return offerSearchService.findByProjectTitleOrOfferId(projectTitle, offerId, offset, limit)
56+
.stream().map(FinanceServiceImpl::convert).toList();
57+
}
58+
59+
/**
60+
* @inheritDocs
61+
*/
62+
@Override
63+
public Optional<life.qbic.finances.api.Offer> findOfferById(String offerId) {
64+
return offerSearchService.findByOfferId(offerId).map(FinanceServiceImpl::convert);
65+
}
66+
67+
}

finances/src/main/java/life/qbic/controlling/application/finances/offer/OfferSearchService.java finances/src/main/java/life/qbic/finance/application/OfferSearchService.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package life.qbic.controlling.application.finances.offer;
1+
package life.qbic.finance.application;
22

33
import java.util.List;
44
import java.util.Optional;
5-
import life.qbic.controlling.domain.finances.offer.Offer;
6-
import life.qbic.controlling.domain.finances.offer.OfferPreview;
5+
import life.qbic.finance.domain.model.Offer;
6+
import life.qbic.finance.domain.model.OfferPreview;
77

88
/**
99
* <b>OfferPreview Search Service</b>

finances/src/main/java/life/qbic/controlling/domain/finances/offer/ExperimentalDesignDescription.java finances/src/main/java/life/qbic/finance/domain/model/ExperimentalDesignDescription.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import jakarta.persistence.AttributeConverter;
44

finances/src/main/java/life/qbic/controlling/domain/finances/offer/Offer.java finances/src/main/java/life/qbic/finance/domain/model/Offer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import jakarta.persistence.Column;
44
import jakarta.persistence.Convert;

finances/src/main/java/life/qbic/controlling/domain/finances/offer/OfferId.java finances/src/main/java/life/qbic/finance/domain/model/OfferId.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import jakarta.persistence.AttributeConverter;
44
import java.util.Objects;

finances/src/main/java/life/qbic/controlling/domain/finances/offer/OfferPreview.java finances/src/main/java/life/qbic/finance/domain/model/OfferPreview.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import static java.util.Objects.requireNonNull;
44

finances/src/main/java/life/qbic/controlling/domain/finances/offer/ProjectObjective.java finances/src/main/java/life/qbic/finance/domain/model/ProjectObjective.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import jakarta.persistence.AttributeConverter;
44

finances/src/main/java/life/qbic/controlling/domain/finances/offer/ProjectTitle.java finances/src/main/java/life/qbic/finance/domain/model/ProjectTitle.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.controlling.domain.finances.offer;
1+
package life.qbic.finance.domain.model;
22

33
import jakarta.persistence.AttributeConverter;
44
import java.util.Objects;

0 commit comments

Comments
 (0)