Skip to content

Commit 0c373b6

Browse files
Working custom checks crud operations wired up
1 parent f06af7b commit 0c373b6

File tree

11 files changed

+135
-103
lines changed

11 files changed

+135
-103
lines changed

builder-api/src/main/java/org/acme/controller/DecisionResource.java

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.acme.auth.AuthUtils;
1212
import org.acme.enums.OptionalBoolean;
1313
import org.acme.model.domain.Benefit;
14-
import org.acme.model.domain.CheckConfig;
1514
import org.acme.model.domain.EligibilityCheck;
1615
import org.acme.model.domain.Screener;
1716
import org.acme.persistence.BenefitRepository;
@@ -55,7 +54,7 @@ public Response evaluateScreener(
5554
return Response.status(Response.Status.UNAUTHORIZED).build();
5655
}
5756

58-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
57+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
5958
if (screenerOpt.isEmpty()){
6059
return Response.status(Response.Status.NOT_FOUND).build();
6160
}
@@ -130,53 +129,64 @@ public Response evaluateBenefit(
130129
private Map<String, Object> evaluateBenefitDmn(Benefit benefit, Map<String, Object> inputData) throws Exception {
131130
List<EligibilityCheck> checks = eligibilityCheckRepository.getChecksInBenefit(benefit);
132131

133-
List<OptionalBoolean> checkResultsList = new ArrayList<>();
134-
Map<String, Object> checkResults = new HashMap<>();
135-
for (EligibilityCheck check : checks) {
136-
Optional<CheckConfig> matchingCheckConfig = benefit.getChecks().stream().filter(
137-
checkConfig -> checkConfig.getCheckId().equals(check.getId())
138-
).findFirst();
139-
if (matchingCheckConfig.isEmpty()) {
140-
throw new Exception("Could not find CheckConfig for check " + check.getId());
141-
}
142-
143-
String dmnFilepath = storageService.getCheckDmnModelPath(
144-
check.getModule(), check.getId(), check.getVersion()
145-
);
146-
String dmnModelName = check.getId();
147-
148-
OptionalBoolean result = dmnService.evaluateSimpleDmn(
149-
dmnFilepath, dmnModelName, inputData, matchingCheckConfig.get().getParameters()
150-
);
151-
checkResultsList.add(result);
152-
checkResults.put(check.getId(), Map.of("name", check.getName(),"result", result));
153-
}
154-
155-
// Determine overall Benefit result
156-
Boolean allChecksTrue = checkResultsList.stream().allMatch(result -> result == OptionalBoolean.TRUE);
157-
Boolean anyChecksFalse = checkResultsList.stream().anyMatch(result -> result == OptionalBoolean.FALSE);
158-
Log.info("All True: " + allChecksTrue + " Any False: " + anyChecksFalse);
159-
160-
OptionalBoolean benefitResult;
161-
if (allChecksTrue) {
162-
benefitResult = OptionalBoolean.TRUE;
163-
} else if (anyChecksFalse) {
164-
benefitResult = OptionalBoolean.FALSE;
132+
if (benefit.getPublic()){
133+
// Public benefit, call the Library API to evaluate
134+
Map<String, Object> result = new HashMap<>();
135+
return result;
165136
} else {
166-
benefitResult = OptionalBoolean.UNABLE_TO_DETERMINE;
137+
// Custom benefit, evaluate here in the web app api (as opposed to calling the library api for evaluation)
138+
List<OptionalBoolean> checkResultsList = new ArrayList<>();
139+
Map<String, Object> checkResults = new HashMap<>();
140+
141+
Map<String, Object> result = new HashMap<>();
142+
return result;
143+
//TODO: update implementation here
144+
// for (EligibilityCheck check : checks) {
145+
// Optional<CheckConfig> matchingCheckConfig = benefit.getChecks().stream().filter(
146+
// checkConfig -> checkConfig.getCheckId().equals(check.getId())
147+
// ).findFirst();
148+
// if (matchingCheckConfig.isEmpty()) {
149+
// throw new Exception("Could not find CheckConfig for check " + check.getId());
150+
// }
151+
//
152+
// String dmnFilepath = storageService.getCheckDmnModelPath(
153+
// check.getModule(), check.getId(), check.getVersion()
154+
// );
155+
// String dmnModelName = check.getId();
156+
//
157+
// OptionalBoolean result = dmnService.evaluateSimpleDmn(
158+
// dmnFilepath, dmnModelName, inputData, matchingCheckConfig.get().getParameters()
159+
// );
160+
// checkResultsList.add(result);
161+
// checkResults.put(check.getId(), Map.of("name", check.getName(), "result", result));
162+
// }
163+
//
164+
// // Determine overall Benefit result
165+
// Boolean allChecksTrue = checkResultsList.stream().allMatch(result -> result == OptionalBoolean.TRUE);
166+
// Boolean anyChecksFalse = checkResultsList.stream().anyMatch(result -> result == OptionalBoolean.FALSE);
167+
// Log.info("All True: " + allChecksTrue + " Any False: " + anyChecksFalse);
168+
//
169+
// OptionalBoolean benefitResult;
170+
// if (allChecksTrue) {
171+
// benefitResult = OptionalBoolean.TRUE;
172+
// } else if (anyChecksFalse) {
173+
// benefitResult = OptionalBoolean.FALSE;
174+
// } else {
175+
// benefitResult = OptionalBoolean.UNABLE_TO_DETERMINE;
176+
// }
177+
//
178+
// return new HashMap<String, Object>(
179+
// Map.of(
180+
// "name", benefit.getName(),
181+
// "result", benefitResult,
182+
// "check_results", checkResults
183+
// )
184+
// );
167185
}
168-
169-
return new HashMap<String, Object>(
170-
Map.of(
171-
"name", benefit.getName(),
172-
"result", benefitResult,
173-
"check_results", checkResults
174-
)
175-
);
176186
}
177187

178188
private boolean isUserAuthorizedToAccessScreenerByScreenerId(String userId, String screenerId) {
179-
Optional<Screener> screenerOpt = screenerRepository.getScreenerMetaDataOnly(screenerId);
189+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreenerMetaDataOnly(screenerId);
180190
if (screenerOpt.isEmpty()){
181191
return false;
182192
}

builder-api/src/main/java/org/acme/controller/EligibilityCheckResource.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ public Response createPublicCheck(@Context SecurityIdentity identity,
7676
newCheck.setVersion(1);
7777
try {
7878
String checkId = eligibilityCheckRepository.savePublicCheck(newCheck);
79-
newCheck.setId(checkId);
8079
return Response.ok(newCheck, MediaType.APPLICATION_JSON).build();
8180
} catch (Exception e){
8281
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
@@ -189,10 +188,10 @@ public Response getCustomCheck(@Context SecurityIdentity identity, @PathParam("c
189188

190189
if (statusIndicator == CheckStatus.WORKING.getCode()){
191190
Log.info("Fetching working custom check: " + checkId + " User: " + userId);
192-
checkOpt = eligibilityCheckRepository.getWorkingCustomCheck(userId, userId);
191+
checkOpt = eligibilityCheckRepository.getWorkingCustomCheck(userId, checkId);
193192
} else {
194193
Log.info("Fetching published custom check: " + checkId + " User: " + userId);
195-
checkOpt = eligibilityCheckRepository.getPublishedCustomCheck(userId, userId);
194+
checkOpt = eligibilityCheckRepository.getPublishedCustomCheck(userId, checkId);
196195
}
197196

198197
if (checkOpt.isEmpty()){
@@ -217,9 +216,9 @@ public Response createCustomCheck(@Context SecurityIdentity identity,
217216
newCheck.setOwnerId(userId);
218217
newCheck.setPublic(false);
219218
newCheck.setVersion(1);
219+
newCheck.setPublished(false);
220220
try {
221-
String checkId = eligibilityCheckRepository.saveWorkingCustomCheck(newCheck);
222-
newCheck.setId(checkId);
221+
eligibilityCheckRepository.saveWorkingCustomCheck(newCheck);
223222
return Response.ok(newCheck, MediaType.APPLICATION_JSON).build();
224223
} catch (Exception e){
225224
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
@@ -236,7 +235,7 @@ public Response updateCustomCheck(@Context SecurityIdentity identity,
236235

237236
// TODO: Add authorization to update check
238237
try {
239-
eligibilityCheckRepository.saveWorkingCustomCheck(updateCheck);
238+
eligibilityCheckRepository.updateWorkingCustomCheck(updateCheck);
240239
return Response.ok().entity(updateCheck).build();
241240
} catch (Exception e){
242241
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)

builder-api/src/main/java/org/acme/controller/ScreenerResource.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public Response getScreeners(@Context SecurityIdentity identity) {
5252
return Response.status(Response.Status.UNAUTHORIZED).build();
5353
}
5454
Log.info("Fetching screeners for user: " + userId);
55-
List<Screener> screeners = screenerRepository.getScreeners(userId);
55+
List<Screener> screeners = screenerRepository.getWorkingScreeners(userId);
5656

5757
return Response.ok(screeners, MediaType.APPLICATION_JSON).build();
5858
}
@@ -67,7 +67,7 @@ public Response getScreener(@Context SecurityIdentity identity, @PathParam("scre
6767

6868
//perform authentication
6969

70-
Optional<Screener> screenerOptional = screenerRepository.getScreener(screenerId);
70+
Optional<Screener> screenerOptional = screenerRepository.getWorkingScreener(screenerId);
7171

7272
if (screenerOptional.isEmpty()){
7373
throw new NotFoundException();
@@ -92,7 +92,7 @@ public Response postScreener(@Context SecurityIdentity identity, Screener newScr
9292

9393
newScreener.setOwnerId(userId);
9494
try {
95-
String screenerId = screenerRepository.saveNewScreener(newScreener);
95+
String screenerId = screenerRepository.saveNewWorkingScreener(newScreener);
9696
newScreener.setId(screenerId);
9797
return Response.ok(newScreener, MediaType.APPLICATION_JSON).build();
9898
} catch (Exception e){
@@ -115,7 +115,7 @@ public Response updateScreener(@Context SecurityIdentity identity, Screener scre
115115

116116
Log.info("isPublished: " + screener.isPublished());
117117
try {
118-
screenerRepository.updateScreener(screener);
118+
screenerRepository.updateWorkingScreener(screener);
119119

120120
return Response.ok().build();
121121
} catch (Exception e){
@@ -182,7 +182,7 @@ public Response publishScreener(@Context SecurityIdentity identity, PublishScree
182182
updateScreener.setIsPublished(true);
183183
updateScreener.setLastPublishDate(Instant.now().toString());
184184
//update screener metadata
185-
screenerRepository.updateScreener(updateScreener);
185+
screenerRepository.updateWorkingScreener(updateScreener);
186186

187187
Map<String, Object> responseData = new HashMap<>();
188188
responseData.put("screenerUrl", getScreenerUrl(screenerId));
@@ -214,7 +214,7 @@ public Response unpublishScreener(@Context SecurityIdentity identity, @QueryPara
214214
Screener updateScreener = new Screener();
215215
updateScreener.setId(screenerId);
216216
updateScreener.setIsPublished(false);
217-
screenerRepository.updateScreener(updateScreener);
217+
screenerRepository.updateWorkingScreener(updateScreener);
218218
Log.info("Updated Screener " + screenerId + " to unpublished.");
219219
return Response.ok().build();
220220

@@ -237,7 +237,7 @@ public Response deleteScreener(@Context SecurityIdentity identity, @QueryParam("
237237
if (!isUserAuthorizedToAccessScreener(userId, screenerId)) return Response.status(Response.Status.UNAUTHORIZED).build();
238238

239239
try {
240-
screenerRepository.deleteScreener(screenerId);
240+
screenerRepository.deleteWorkingScreener(screenerId);
241241
return Response.ok().build();
242242
} catch (Exception e){
243243
Log.error("Error: error deleting screener " + screenerId);
@@ -246,7 +246,7 @@ public Response deleteScreener(@Context SecurityIdentity identity, @QueryParam("
246246
}
247247

248248
private boolean isUserAuthorizedToAccessScreener(String userId, String screenerId) {
249-
Optional<Screener> screenerOptional = screenerRepository.getScreenerMetaDataOnly(screenerId);
249+
Optional<Screener> screenerOptional = screenerRepository.getWorkingScreenerMetaDataOnly(screenerId);
250250
if (screenerOptional.isEmpty()){
251251
return false;
252252
}
@@ -268,7 +268,7 @@ public Response getScreenerBenefits(@Context SecurityIdentity identity,
268268
@PathParam("screenerId") String screenerId){
269269
String userId = AuthUtils.getUserId(identity);
270270

271-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
271+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
272272
if (screenerOpt.isEmpty()){
273273
throw new NotFoundException();
274274
}
@@ -321,7 +321,7 @@ public Response getScreenerCustomBenefitChecks(@Context SecurityIdentity identit
321321
try {
322322
String userId = AuthUtils.getUserId(identity);
323323

324-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
324+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
325325
if (screenerOpt.isEmpty()){
326326
throw new NotFoundException();
327327
}
@@ -363,7 +363,7 @@ public Response addCustomBenefit(@Context SecurityIdentity identity,
363363
benefitDetail.setPublic(newBenefit.getPublic());
364364
try {
365365
// Check to make sure not introducing duplicates
366-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
366+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
367367
if (screenerOpt.isEmpty()){
368368
Log.error("Screener not found. Screener ID:" + screenerId);
369369
throw new NotFoundException();
@@ -390,7 +390,7 @@ public Response addCustomBenefit(@Context SecurityIdentity identity,
390390
}
391391

392392
String benefitId = benefitRepository.saveNewCustomBenefit(screenerId, newBenefit);
393-
screenerRepository.addBenefitDetailToScreener(screenerId, benefitDetail);
393+
screenerRepository.addBenefitDetailToWorkingScreener(screenerId, benefitDetail);
394394
newBenefit.setId(benefitId);
395395
return Response.ok(newBenefit, MediaType.APPLICATION_JSON).build();
396396
} catch (Exception e) {
@@ -407,7 +407,7 @@ public Response copyPublicBenefit(@Context SecurityIdentity identity,
407407
@PathParam("screenerId") String screenerId,
408408
@QueryParam("benefitId") String benefitId) {
409409
// Check if Screener and Benefit exist
410-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
410+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
411411
Optional<Benefit> benefitOpt = benefitRepository.getBenefit(benefitId);
412412
if (screenerOpt.isEmpty()) {
413413
throw new NotFoundException();
@@ -450,7 +450,7 @@ public Response copyPublicBenefit(@Context SecurityIdentity identity,
450450
benefitDetail.setPublic(newBenefit.getPublic());
451451

452452
String generatedBenefitId = benefitRepository.saveNewCustomBenefit(screenerId, newBenefit);
453-
screenerRepository.addBenefitDetailToScreener(screenerId, benefitDetail);
453+
screenerRepository.addBenefitDetailToWorkingScreener(screenerId, benefitDetail);
454454
newBenefit.setId(generatedBenefitId);
455455

456456
return Response.ok(newBenefit, MediaType.APPLICATION_JSON).build();
@@ -499,7 +499,7 @@ public Response deleteCustomBenefit(@Context SecurityIdentity identity,
499499
@PathParam("benefitId") String benefitId) {
500500
try {
501501
// Check if Screener and Benefit exist
502-
Optional<Screener> screenerOpt = screenerRepository.getScreener(screenerId);
502+
Optional<Screener> screenerOpt = screenerRepository.getWorkingScreener(screenerId);
503503
Optional<Benefit> benefitOpt = benefitRepository.getCustomBenefit(screenerId, benefitId);
504504
if (screenerOpt.isEmpty()){
505505
throw new NotFoundException();
@@ -522,7 +522,7 @@ public Response deleteCustomBenefit(@Context SecurityIdentity identity,
522522
.filter(benefitDetail -> !benefitDetail.getId().equals(benefitId))
523523
.toList();
524524
screener.setBenefits(updatedBenefits);
525-
screenerRepository.updateScreener(screener);
525+
screenerRepository.updateWorkingScreener(screener);
526526

527527
return Response.ok().build();
528528
} catch (Exception e) {

builder-api/src/main/java/org/acme/model/domain/EligibilityCheck.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ public class EligibilityCheck {
2020
private String ownerId;
2121
@JsonProperty("isPublic")
2222
private Boolean isPublic;
23+
private Boolean isPublished;
2324

2425
public String getWorkingId() {
2526
return CheckStatus.WORKING.getCode() + "-" + ownerId + "-" + module + "-" + name;
2627
}
2728

2829
public String getPublishedId() {
2930
return CheckStatus.PUBLISHED.getCode() + "-" + ownerId + "-" + module + "-" + name;
30-
3131
}
3232

33-
public void setId(String id) {
34-
this.id = id;
33+
public String getId() {
34+
return this.id;
3535
}
3636

3737
public String getName() {
@@ -113,4 +113,8 @@ public Boolean getPublic() {
113113
public void setPublic(Boolean aPublic) {
114114
isPublic = aPublic;
115115
}
116+
117+
public void setPublished(Boolean published) {
118+
isPublished = published;
119+
}
116120
}

builder-api/src/main/java/org/acme/persistence/EligibilityCheckRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,9 @@ public interface EligibilityCheckRepository {
2626

2727
String savePublishedCustomCheck(EligibilityCheck check) throws Exception;
2828

29+
void updateWorkingCustomCheck(EligibilityCheck check) throws Exception;
30+
31+
void updatePublishedCustomCheck(EligibilityCheck check) throws Exception;
32+
2933
String savePublicCheck(EligibilityCheck check) throws Exception;
3034
}

builder-api/src/main/java/org/acme/persistence/GoogleStorageService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ public String getCheckDmnModelPath(String userId, String checkId){
145145
}
146146

147147
@Override
148-
public String getCheckDmnModelPath(String userId, String module, String checkId, String version){
149-
return "check/" + userId + "/" + module + "/" + checkId + "/" + version + "/" + checkId + ".dmn";
148+
public String getCheckDmnModelPath(String userId, String module, String checkId, Integer version){
149+
return "check/" + userId + "/" + module + "/" + checkId + "/" + version.toString() + "/" + checkId + ".dmn";
150150
}
151151

152152
@Override

builder-api/src/main/java/org/acme/persistence/ScreenerRepository.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
import java.util.Optional;
88

99
public interface ScreenerRepository {
10-
public List<Screener> getScreeners(String userId);
10+
public List<Screener> getWorkingScreeners(String userId);
1111

12-
public Optional<Screener> getScreener(String screenerId);
12+
public Optional<Screener> getWorkingScreener(String screenerId);
1313

14-
public Optional<Screener> getScreenerMetaDataOnly(String screenerId);
14+
public Optional<Screener> getWorkingScreenerMetaDataOnly(String screenerId);
1515

16-
public String saveNewScreener(Screener screener) throws Exception;
16+
public String saveNewWorkingScreener(Screener screener) throws Exception;
1717

18-
public void updateScreener(Screener screener) throws Exception;
18+
public void updateWorkingScreener(Screener screener) throws Exception;
1919

20-
public void addBenefitDetailToScreener(String screenerId, BenefitDetail benefitDetail) throws Exception;
20+
public void addBenefitDetailToWorkingScreener(String screenerId, BenefitDetail benefitDetail) throws Exception;
2121

22-
public void deleteScreener(String screenerId) throws Exception;
22+
public void deleteWorkingScreener(String screenerId) throws Exception;
2323
}

builder-api/src/main/java/org/acme/persistence/StorageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public interface StorageService {
2626

2727
String getCheckDmnModelPath(String userId, String checkId);
2828

29-
String getCheckDmnModelPath(String userId, String module, String checkId, String version);
29+
String getCheckDmnModelPath(String userId, String module, String checkId, Integer version);
3030

3131
Map<String, Object> getFormSchemaFromStorage(String filePath);
3232

0 commit comments

Comments
 (0)