Skip to content

Commit 3a359a3

Browse files
CR Changes: Updated naming conventions of endpoints. Updated Published Check filtering to not use prefix logic.
1 parent 47ca59c commit 3a359a3

File tree

7 files changed

+56
-62
lines changed

7 files changed

+56
-62
lines changed

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

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.acme.model.domain.CheckConfig;
1515
import org.acme.model.domain.EligibilityCheck;
1616
import org.acme.model.domain.Screener;
17+
import org.acme.model.dto.EvaluateCheckRequest;
1718
import org.acme.persistence.EligibilityCheckRepository;
1819
import org.acme.persistence.PublishedScreenerRepository;
1920
import org.acme.persistence.ScreenerRepository;
@@ -117,7 +118,6 @@ public Response evaluateScreener(
117118
}
118119

119120
private Map<String, Object> evaluateBenefit(Benefit benefit, Map<String, Object> inputData) throws Exception {
120-
121121
if (benefit.getPublic()){
122122
// Public benefit, call the Library API to evaluate
123123
Map<String, Object> result = new HashMap<>();
@@ -161,13 +161,13 @@ private Map<String, Object> evaluateBenefit(Benefit benefit, Map<String, Object>
161161
}
162162

163163
@POST
164-
@Path("/decision/v2/working_check")
164+
@Path("/decision/working-check")
165165
@Consumes(MediaType.APPLICATION_JSON)
166166
@Produces(MediaType.APPLICATION_JSON)
167167
public Response evaluateCheck(
168168
@Context SecurityIdentity identity,
169169
@QueryParam("checkId") String checkId,
170-
Map<String, Object> data
170+
EvaluateCheckRequest request
171171
) throws Exception {
172172
String userId = AuthUtils.getUserId(identity);
173173

@@ -176,31 +176,6 @@ public Response evaluateCheck(
176176
.entity("Error: Missing required query parameter: checkId")
177177
.build();
178178
}
179-
if (data == null || data.isEmpty()){
180-
return Response.status(Response.Status.BAD_REQUEST)
181-
.entity("Error: Missing decision inputs")
182-
.build();
183-
}
184-
185-
// Get CheckConfig from data
186-
if (!data.containsKey("checkConfig")) {
187-
return Response.status(Response.Status.BAD_REQUEST)
188-
.entity("Error: Missing CheckConfig in request body")
189-
.build();
190-
}
191-
// TODO: Fix to be more in-line with Java standards
192-
Map<String, Object> checkConfigData = (Map<String, Object>) data.get("checkConfig");
193-
CheckConfig checkConfig = new CheckConfig();
194-
checkConfig.setCheckId(checkId);
195-
checkConfig.setParameters((Map<String, Object>) checkConfigData.get("parameters"));
196-
197-
Map<String, Object> inputData = null;
198-
if (!data.containsKey("inputData")) {
199-
return Response.status(Response.Status.BAD_REQUEST)
200-
.entity("Error: Missing inputData in request body")
201-
.build();
202-
}
203-
inputData = (Map<String, Object>) data.get("inputData");
204179

205180
// Get EligibilityCheck
206181
Optional<EligibilityCheck> checkOpt = eligibilityCheckRepository.getWorkingCustomCheck(userId, checkId);
@@ -216,7 +191,7 @@ public Response evaluateCheck(
216191
String dmnModelName = check.getId();
217192

218193
OptionalBoolean result = dmnService.evaluateSimpleDmn(
219-
dmnFilepath, dmnModelName, inputData, checkConfig.getParameters()
194+
dmnFilepath, dmnModelName, request.inputData, request.checkConfig.getParameters()
220195
);
221196
return Response.ok().entity(Map.of("result", result)).build();
222197
} catch (Exception e) {

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,10 @@ public Response publishCustomCheck(@Context SecurityIdentity identity, @PathPara
301301
return Response.ok(check, MediaType.APPLICATION_JSON).build();
302302
}
303303

304+
/* Endpoint for returning all Published Check Versions related to a given Working Eligibility Check */
304305
@GET
305-
@Path("/custom-checks/{checkId}/related_published_checks")
306-
public Response getRelatedPublishedChecks(@Context SecurityIdentity identity, @PathParam("checkId") String checkId){
306+
@Path("/custom-checks/{checkId}/published-check-versions")
307+
public Response getPublishedVersionsOfWorkingCheck(@Context SecurityIdentity identity, @PathParam("checkId") String checkId){
307308
String userId = AuthUtils.getUserId(identity);
308309
Optional<EligibilityCheck> checkOpt = eligibilityCheckRepository.getWorkingCustomCheck(userId, checkId);
309310
if (checkOpt.isEmpty()){
@@ -320,7 +321,7 @@ public Response getRelatedPublishedChecks(@Context SecurityIdentity identity, @P
320321
// Update workingCheck so that the incremented version number is saved
321322
check.setVersion(check.getVersion() + 1);
322323
try {
323-
List<EligibilityCheck> publishedChecks = eligibilityCheckRepository.getRelatedPublishedChecks(check);
324+
List<EligibilityCheck> publishedChecks = eligibilityCheckRepository.getPublishedCheckVersions(check);
324325

325326
return Response.ok(publishedChecks, MediaType.APPLICATION_JSON).build();
326327
} catch (Exception e){
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.acme.model.dto;
2+
3+
import java.util.Map;
4+
5+
import org.acme.model.domain.CheckConfig;
6+
7+
public class EvaluateCheckRequest {
8+
public CheckConfig checkConfig;
9+
public Map<String, Object> inputData;
10+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface EligibilityCheckRepository {
1616

1717
List<EligibilityCheck> getWorkingCustomChecks(String userId);
1818

19-
List<EligibilityCheck> getRelatedPublishedChecks(EligibilityCheck workingCustomCheck);
19+
List<EligibilityCheck> getPublishedCheckVersions(EligibilityCheck workingCustomCheck);
2020

2121
List<EligibilityCheck> getPublishedCustomChecks(String userId);
2222

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

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,32 @@ public static List<Map<String, Object>> getFirestoreDocsByField(String collectio
5656
}
5757
}
5858

59+
public static List<Map<String, Object>> getFirestoreDocsByFields(String collection, Map<String, String> fieldValues) {
60+
System.out.println("Fetching documents from collection: " + collection + " with field values: " + fieldValues);
61+
System.out.println("Using Firestore instance: " + db.listCollections());
62+
try {
63+
Query query = db.collection(collection);
64+
for (Map.Entry<String, String> entry : fieldValues.entrySet()) {
65+
// Add a whereEqualTo clause for each field-value pair
66+
query = query.whereEqualTo(entry.getKey(), entry.getValue());
67+
}
68+
ApiFuture<QuerySnapshot> querySnapshot = query.get();
69+
List<QueryDocumentSnapshot> documents;
70+
documents = querySnapshot.get().getDocuments();
71+
72+
return documents.stream()
73+
.map(doc -> {
74+
Map<String, Object> data = doc.getData();
75+
data.put("id", doc.getId());
76+
return data;
77+
})
78+
.toList();
79+
}catch(Exception e){
80+
Log.error("Error fetching documents from firestore: ", e);
81+
return new ArrayList<>();
82+
}
83+
}
84+
5985
public static List<Map<String, Object>> getFirestoreDocsByField(String collection, String field, boolean value) {
6086
try {
6187
ApiFuture<QuerySnapshot> query = db.collection(collection)
@@ -138,30 +164,6 @@ public static Optional<Map<String, Object>> getFirestoreDocById(String collectio
138164
}
139165
}
140166

141-
public static List<Map<String, Object>> getFirestoreDocsByIdPrefix (String collection, String prefix) {
142-
try {
143-
/* TODO: Temporary logic - codify prefix searching in a more robust way */
144-
ApiFuture<QuerySnapshot> query = db.collection(collection)
145-
.whereGreaterThanOrEqualTo(FieldPath.documentId(), prefix)
146-
.whereLessThan(FieldPath.documentId(), prefix + "\uf8ff")
147-
.get();
148-
149-
List<QueryDocumentSnapshot> documents;
150-
documents = query.get().getDocuments();
151-
152-
return documents.stream()
153-
.map(doc -> {
154-
Map<String, Object> data = doc.getData();
155-
data.put("id", doc.getId());
156-
return data;
157-
})
158-
.toList();
159-
}catch(Exception e){
160-
Log.error("Error fetching documents from firestore: ", e);
161-
return new ArrayList<>();
162-
}
163-
}
164-
165167
public static String persistDocument(String collectionName, Map<String, Object> data) throws Exception {
166168
try {
167169
DocumentReference documentRef = db.collection(collectionName)

builder-api/src/main/java/org/acme/persistence/impl/EligibilityCheckRepositoryImpl.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,18 @@ public List<EligibilityCheck> getPublishedCustomChecks(String userId){
8181
return checkMaps.stream().map(checkMap -> mapper.convertValue(checkMap, EligibilityCheck.class)).toList();
8282
}
8383

84-
public List<EligibilityCheck> getRelatedPublishedChecks(EligibilityCheck workingCustomCheck){
84+
public List<EligibilityCheck> getPublishedCheckVersions(EligibilityCheck workingCustomCheck){
85+
Map<String, String> fieldValues = Map.of(
86+
"ownerId", workingCustomCheck.getOwnerId(),
87+
"module", workingCustomCheck.getModule(),
88+
"name", workingCustomCheck.getName()
89+
);
90+
8591
/* Get all related Published Checks for a Working Check */
8692
List<Map<String, Object>> checkMaps = (
87-
FirestoreUtils.getFirestoreDocsByIdPrefix(
93+
FirestoreUtils.getFirestoreDocsByFields(
8894
CollectionNames.PUBLISHED_CUSTOM_CHECK_COLLECTION,
89-
getPublishedPrefix(workingCustomCheck)
95+
fieldValues
9096
)
9197
);
9298
ObjectMapper mapper = new ObjectMapper();

builder-frontend/src/api/check.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ export const fetchUserDefinedChecks = async (
170170
};
171171

172172
export const evaluateWorkingCheck = async (checkId: string, checkConfig: any, inputData: Record<string, any>): Promise<OptionalBoolean> => {
173-
const url = apiUrl + `/decision/v2/working_check?checkId=${checkId}`;
173+
const url = apiUrl + `/decision/working-check?checkId=${checkId}`;
174174
try {
175175
const response = await authFetch(url, {
176176
method: "POST",
@@ -193,7 +193,7 @@ export const evaluateWorkingCheck = async (checkId: string, checkConfig: any, in
193193
}
194194

195195
export const getRelatedPublishedChecks = async (checkId: string): Promise<EligibilityCheck[]> => {
196-
const url = apiUrl + `/custom-checks/${checkId}/related_published_checks`;
196+
const url = apiUrl + `/custom-checks/${checkId}/published-check-versions`;
197197
try {
198198
const response = await authFetch(url, {
199199
method: "GET",

0 commit comments

Comments
 (0)