diff --git a/builder-api/src/main/java/org/acme/controller/ScreenerTestResource.java b/builder-api/src/main/java/org/acme/controller/ScreenerTestResource.java new file mode 100644 index 00000000..4268faca --- /dev/null +++ b/builder-api/src/main/java/org/acme/controller/ScreenerTestResource.java @@ -0,0 +1,29 @@ + +package org.acme.controller; +import org.acme.model.domain.ScreenerTest; + +import io.quarkus.logging.Log; +import io.quarkus.security.identity.SecurityIdentity; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Context; + +@Path("/api") +public class ScreenerTestResource { + + @PUT + @Path("/screenerTest") + public void testScreener(@Context SecurityIdentity identity, ScreenerTest screenerTest) { + + // TODO: WRITE LOGIC HERE + Log.info(screenerTest); + } + + @GET + @Consumes + @Path("/screenerTest/{screenerTestId}") + public String getScreenerTestResult(@Context SecurityIdentity identity, @PathParam("screenerTestId") String screenerTestId) { + // Write logic here + return "Empty string"; + } + +} \ No newline at end of file diff --git a/builder-api/src/main/java/org/acme/model/domain/ScreenerTest.java b/builder-api/src/main/java/org/acme/model/domain/ScreenerTest.java new file mode 100644 index 00000000..c0fd5b30 --- /dev/null +++ b/builder-api/src/main/java/org/acme/model/domain/ScreenerTest.java @@ -0,0 +1,27 @@ +package org.acme.model.domain; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.util.Map; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class ScreenerTest { + Map inputData; + Map resultData; + + public Map getInputData() { + return inputData; + } + + public void setInputData(Map inputData) { + this.inputData = inputData; + } + + public Map getResultData() { + return resultData; + } + + public void setResultData(Map resultData) { + this.resultData = resultData; + } +} \ No newline at end of file diff --git a/builder-frontend/src/api/screenerTest.ts b/builder-frontend/src/api/screenerTest.ts new file mode 100644 index 00000000..3f817a2c --- /dev/null +++ b/builder-frontend/src/api/screenerTest.ts @@ -0,0 +1,48 @@ +import { authFetch } from "@/api/auth"; + +import type { ScreenerTest } from "@/types"; + +const apiUrl = import.meta.env.VITE_API_URL; + +export const getScreenerTestResult = async (screenerTestId) => { + const url = apiUrl + "/screenerTest/" + screenerTestId; + try { + const response = await authFetch(url, { + method: "GET", + headers: { + Accept: "application/json", + }, + }); + + if (!response.ok) { + throw new Error(`Fetch failed with status: ${response.status}`); + } + const data = await response.json(); + return data; + } catch (error) { + console.error("Error fetching screener test:", error); + throw error; // rethrow so you can handle it in your component if needed + } +}; + +export const testScreener = async (testScreenerData: ScreenerTest) => { + const url = apiUrl + "/screenerTest"; + try { + const response = await authFetch(url, { + method: "PUT", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + body: JSON.stringify(testScreenerData), + }); + console.log("test inserted(?)"); + + if (!response.ok) { + throw new Error(`Update failed with status: ${response.status}`); + } + } catch (error) { + console.error("Error updating project:", error); + throw error; + } +}; diff --git a/builder-frontend/src/components/project/preview/Preview.tsx b/builder-frontend/src/components/project/preview/Preview.tsx index e7049585..13c51f8a 100644 --- a/builder-frontend/src/components/project/preview/Preview.tsx +++ b/builder-frontend/src/components/project/preview/Preview.tsx @@ -4,6 +4,7 @@ import FormRenderer from "./FormRenderer"; import Results from "./Results"; import { evaluateScreener } from "../../../api/screener"; +import { testScreener, getScreenerTestResult } from "@/api/screenerTest"; import { PreviewFormData, ScreenerResult } from "./types"; @@ -35,15 +36,52 @@ const Preview = ({ project, formSchema }) => { setResultsLoading(false); }; + const handleTest = async (screenerTestData) => { + try { + await testScreener(screenerTestData); + console.log("Clicked!"); + } catch (e) { + console.log("Error submitting test screener", e); + } + } + + const handleTestResult = async (screenerId) => { + try{ + console.log("Clicked!"); + await getScreenerTestResult(screenerId); + } catch (e) { + console.log("Error getting test screener result", e); + } + } + return ( + // TODO: Make sure to put container as a row and not columns
Form
-
-
Results
- +
+
+
Results
+
+ +
+ +
+
+
+ +
+
); diff --git a/builder-frontend/src/types.ts b/builder-frontend/src/types.ts index eeb98c88..8580e084 100644 --- a/builder-frontend/src/types.ts +++ b/builder-frontend/src/types.ts @@ -95,6 +95,10 @@ export interface DateParameter extends BaseParameter { export interface ScreenerResult { [key: string]: BenefitResult; } +export interface ScreenerTest { + inputData: PublishedScreener + outputData: ScreenerResult +} export interface BenefitResult { name: string; result: OptionalBoolean;