11package org .acme .controller ;
22
33import io .quarkus .logging .Log ;
4+ import io .quarkus .security .identity .SecurityIdentity ;
45import jakarta .inject .Inject ;
56import jakarta .ws .rs .*;
6- import jakarta .ws .rs .container .ContainerRequestContext ;
77import jakarta .ws .rs .core .Context ;
88import jakarta .ws .rs .core .MediaType ;
99import jakarta .ws .rs .core .Response ;
1212import org .acme .enums .OptionalBoolean ;
1313import org .acme .model .domain .Benefit ;
1414import org .acme .model .domain .CheckConfig ;
15- import org .acme .auth .AuthUtils ;
16- import org .acme .model .domain .Benefit ;
1715import org .acme .model .domain .EligibilityCheck ;
1816import org .acme .model .domain .Screener ;
1917import org .acme .persistence .BenefitRepository ;
2018import org .acme .persistence .EligibilityCheckRepository ;
2119import org .acme .persistence .ScreenerRepository ;
2220import org .acme .persistence .StorageService ;
23- import org .acme .service .DmnParser ;
2421import org .acme .service .DmnService ;
2522
26- import io .quarkus .logging .Log ;
27-
28- import java .time .Instant ;
2923import java .util .*;
3024
3125@ Path ("/api" )
@@ -46,78 +40,17 @@ public class DecisionResource {
4640 @ Inject
4741 BenefitRepository benefitRepository ;
4842
49- @ POST
50- @ Path ("/decision" )
51- @ Consumes (MediaType .APPLICATION_JSON )
52- @ Produces (MediaType .APPLICATION_JSON )
53- public Response post (@ QueryParam ("screenerId" ) String screenerId , Map <String , Object > inputData ) {
54- if (screenerId == null || screenerId .isBlank ()){
55- return Response .status (Response .Status .BAD_REQUEST )
56- .entity ("Error: Missing required query parameter: screenerId" )
57- .build ();
58- }
59-
60- if (inputData == null || inputData .isEmpty ()){
61- return Response .status (Response .Status .BAD_REQUEST )
62- .entity ("Error: Missing decision inputs" )
63- .build ();
64- }
65-
66- return getScreenerResults (screenerId , inputData );
67- }
68-
69- private Response getScreenerResults (String screenerId , Map <String , Object > inputData ) {
70- Optional <Screener > screenerOptional = screenerRepository .getScreener (screenerId );
71-
72- if (screenerOptional .isEmpty ()){
73- throw new NotFoundException (String .format ("Form %s was not found" , screenerId ));
74- }
75-
76- Screener screener = screenerOptional .get ();
77-
78- try {
79- if (isLastScreenerCompileOutOfDate (screener )){
80- dmnService .compileWorkingDmnModel (screener );
81- updateScreenerLastCompileTime (screenerId , screener .getDmnModel ());
82- }
83-
84- Map <String , Object > result = dmnService .evaluateDecision (screener , inputData );
85-
86- if (result .isEmpty ()) return Response .ok ().entity (Collections .emptyList ()).build ();
87-
88- return Response .ok ().entity (result ).build ();
89-
90- } catch (Exception e ){
91- Log .error ("Error evaluating decision: " , e );
92- return Response .status (Response .Status .INTERNAL_SERVER_ERROR ).build ();
93- }
94- }
95-
96- private static boolean isLastScreenerCompileOutOfDate (Screener screener ) {
97- return screener .getLastDmnCompile () == null || Instant .parse (screener .getLastDmnSave ()).isAfter (Instant .parse (screener .getLastDmnCompile ()));
98- }
99-
100- private void updateScreenerLastCompileTime (String screenerId , String dmnXml ) throws Exception {
101- Screener updateScreener = new Screener ();
102- updateScreener .setId (screenerId );
103- updateScreener .setLastDmnCompile (Instant .now ().toString ());
104- DmnParser dmnParser = new DmnParser (dmnXml );
105- updateScreener .setWorkingDmnName (dmnParser .getName ());
106- updateScreener .setWorkingDmnNameSpace (dmnParser .getNameSpace ());
107- screenerRepository .updateScreener (updateScreener );
108- }
109-
11043 @ POST
11144 @ Path ("/decision/v2" )
11245 @ Consumes (MediaType .APPLICATION_JSON )
11346 @ Produces (MediaType .APPLICATION_JSON )
11447 public Response evaluateScreener (
115- @ Context ContainerRequestContext requestContext ,
48+ @ Context SecurityIdentity identity ,
11649 @ QueryParam ("screenerId" ) String screenerId ,
11750 Map <String , Object > inputData
11851 ) throws Exception {
11952 // Authorize user and get benefit
120- String userId = AuthUtils .getUserId (requestContext );
53+ String userId = AuthUtils .getUserId (identity );
12154 if (screenerId .isEmpty () || !isUserAuthorizedToAccessScreenerByScreenerId (userId , screenerId )){
12255 return Response .status (Response .Status .UNAUTHORIZED ).build ();
12356 }
@@ -152,7 +85,7 @@ public Response evaluateScreener(
15285 @ Consumes (MediaType .APPLICATION_JSON )
15386 @ Produces (MediaType .APPLICATION_JSON )
15487 public Response evaluateBenefit (
155- @ Context ContainerRequestContext requestContext ,
88+ @ Context SecurityIdentity identity ,
15689 @ QueryParam ("screenerId" ) String screenerId ,
15790 @ QueryParam ("benefitId" ) String benefitId ,
15891 Map <String , Object > inputData
@@ -169,7 +102,7 @@ public Response evaluateBenefit(
169102 }
170103
171104 // Authorize user and get benefit
172- String userId = AuthUtils .getUserId (requestContext );
105+ String userId = AuthUtils .getUserId (identity );
173106 Optional <Benefit > benefitOpt = Optional .empty ();
174107 if (!screenerId .isEmpty ()){
175108 if (!isUserAuthorizedToAccessScreenerByScreenerId (userId , screenerId )){
0 commit comments