From af360d779314afc23a70c7b2176f00aab8155055 Mon Sep 17 00:00:00 2001 From: Narayanan Madaswamy Date: Sun, 2 Aug 2026 00:47:00 +0530 Subject: [PATCH] Case Punching Feature Done --- .vscode/launch.json | 2 + .../cygnus/client/CloudIdentityClient.java | 11 + .../cloud/query/CloudQueryController.java | 6 + .../cloud/query/QueryCatalogRepository.java | 27 +- .../cloud/query/QueryNotFoundException.java | 4 + .../db/platform/001_query_catalog.sql | 12 +- .../platform/003_application_save_query.sql | 11 + ...tionError.java => ApplicationMessage.java} | 45 ++- .../lib/exceptions/ApplicationException.java | 20 ++ .../src/main/java/lib/models/ApiResponse.java | 12 + .../java/lib/models/ApplicationDetails.java | 87 ++++++ .../java/lib/models/ApplicationSaveData.java | 4 + .../lib/models/ApplicationSaveResult.java | 16 + .../main/java/lib/models/CasePunching.java | 2 +- .../main/java/lib/models/CaseSaveRequest.java | 11 + ...{ErrorDetails.java => MessageDetails.java} | 22 +- .../java/lib/models/ErrorDetailsTest.java | 22 -- .../java/lib/models/MessageDetailsTest.java | 22 ++ .../lib/constants/ApplicationError.class | Bin 5764 -> 0 bytes .../lib/constants/ApplicationMessage.class | Bin 0 -> 6419 bytes .../lib/exceptions/ApplicationException.class | Bin 0 -> 1010 bytes .../classes/lib/models/ApiResponse.class | Bin 0 -> 2260 bytes .../lib/models/ApplicationDetails.class | Bin 0 -> 16870 bytes .../lib/models/ApplicationSaveData.class | Bin 0 -> 1586 bytes .../lib/models/ApplicationSaveResult.class | Bin 0 -> 1455 bytes .../classes/lib/models/CasePunching.class | Bin 4035 -> 4047 bytes .../classes/lib/models/CaseSaveRequest.class | Bin 0 -> 1944 bytes .../classes/lib/models/ErrorDetails.class | Bin 3268 -> 0 bytes .../classes/lib/models/MessageDetails.class | Bin 0 -> 3241 bytes .../target/classes/lib/models/Option.class | Bin 1353 -> 1353 bytes .../UserSession$UserSessionBuilder.class | Bin 4111 -> 4210 bytes .../classes/lib/models/UserSession.class | Bin 7725 -> 7832 bytes .../target/cygnus-lib-1.0.0-SNAPSHOT.jar | Bin 8479 -> 20966 bytes .../compile/default-compile/createdFiles.lst | 13 +- .../compile/default-compile/inputFiles.lst | 10 +- .../default-testCompile/createdFiles.lst | 2 +- .../default-testCompile/inputFiles.lst | 2 +- .../TEST-lib.models.ErrorDetailsTest.xml | 63 ---- .../lib.models.ErrorDetailsTest.txt | 4 - .../lib/models/ErrorDetailsTest.class | Bin 1204 -> 0 bytes .../lib/models/MessageDetailsTest.class | Bin 0 -> 1217 bytes .../WEB-INF/app/edp/punching/initcase.jsp | 24 +- .../build/WebContent/WEB-INF/app/error.jsp | 20 +- .../build/WebContent/css/add-cases-v4.css | 1 + .../build/WebContent/js/appjs/editcases.js | 2 +- .../build/WebContent/js/appjs/portfolio.js | 2 +- .../build/WebContent/js/edp/initiation.js | 170 ++++++++++ .../build/WebContent/js/lib/payload-crypto.js | 91 ++++++ .../AbstractAuthenticatedController.java | 36 ++- .../ApplicationErrorController.java | 8 +- .../controllers/PunchingController.java | 79 ++++- .../query/CloudQueryDefinitionProvider.java | 6 + .../matrix/nimble/query/CloudQuerySource.java | 7 + .../matrix/nimble/query/QueryProvider.java | 4 + .../java/matrix/nimble/query/QuerySource.java | 3 + .../query/RedisCachingQueryProvider.java | 17 +- .../nimble/security/PayloadCryptoService.java | 174 +++++++++++ .../nimble/security/WebJsonConfiguration.java | 16 + .../services/commons/CommonErrorService.java | 10 +- .../matrix/services/edp/PunchingService.java | 127 +++++++- .../nimble/RoleVisibleBatchMigrationTest.java | 3 +- .../security/PayloadCryptoServiceTest.java | 66 ++++ .../commons/CommonErrorServiceTest.java | 6 +- .../java/com/cygnus/db/CygnusDbExecutor.java | 3 + .../com/cygnus/db/JdbcCygnusDbExecutor.java | 9 + .../cygnus/db/QueryDefinitionProvider.java | 3 + .../resources/db/003_application_save.sql | 293 ++++++++++++++++++ 67 files changed, 1431 insertions(+), 179 deletions(-) create mode 100644 cygnus-cloud-service/src/main/resources/db/platform/003_application_save_query.sql rename cygnus-lib/src/main/java/lib/constants/{ApplicationError.java => ApplicationMessage.java} (59%) create mode 100644 cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java create mode 100644 cygnus-lib/src/main/java/lib/models/ApiResponse.java create mode 100644 cygnus-lib/src/main/java/lib/models/ApplicationDetails.java create mode 100644 cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java create mode 100644 cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java create mode 100644 cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java rename cygnus-lib/src/main/java/lib/models/{ErrorDetails.java => MessageDetails.java} (70%) delete mode 100644 cygnus-lib/src/test/java/lib/models/ErrorDetailsTest.java create mode 100644 cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java delete mode 100644 cygnus-lib/target/classes/lib/constants/ApplicationError.class create mode 100644 cygnus-lib/target/classes/lib/constants/ApplicationMessage.class create mode 100644 cygnus-lib/target/classes/lib/exceptions/ApplicationException.class create mode 100644 cygnus-lib/target/classes/lib/models/ApiResponse.class create mode 100644 cygnus-lib/target/classes/lib/models/ApplicationDetails.class create mode 100644 cygnus-lib/target/classes/lib/models/ApplicationSaveData.class create mode 100644 cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class create mode 100644 cygnus-lib/target/classes/lib/models/CaseSaveRequest.class delete mode 100644 cygnus-lib/target/classes/lib/models/ErrorDetails.class create mode 100644 cygnus-lib/target/classes/lib/models/MessageDetails.class delete mode 100644 cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml delete mode 100644 cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt delete mode 100644 cygnus-lib/target/test-classes/lib/models/ErrorDetailsTest.class create mode 100644 cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class create mode 100644 cygnus-onprem-app/build/WebContent/js/edp/initiation.js create mode 100644 cygnus-onprem-app/build/WebContent/js/lib/payload-crypto.js create mode 100644 cygnus-onprem-app/src/main/java/matrix/nimble/security/PayloadCryptoService.java create mode 100644 cygnus-onprem-app/src/main/java/matrix/nimble/security/WebJsonConfiguration.java create mode 100644 cygnus-onprem-app/src/test/java/matrix/nimble/security/PayloadCryptoServiceTest.java create mode 100644 cygnus-onprem-db/src/main/resources/db/003_application_save.sql diff --git a/.vscode/launch.json b/.vscode/launch.json index 3a50d71..95e6faa 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -68,6 +68,8 @@ "CYGNUS_CLIENT_ASSERTION": "file:${workspaceFolder}/config/clients/matrix/matrix-matrix-delhi-cygnus-01-assertion.jwt", "CYGNUS_LOGIN_KEY_ID": "cygnus-login-2026-01", "CYGNUS_LOGIN_PUBLIC_KEY": "file:${workspaceFolder}/config/keys/login-public.pem", + "CYGNUS_PAYLOAD_PRIVATE_KEY": "file:${workspaceFolder}/config/keys/case-save-private.pem", + "CYGNUS_PAYLOAD_PUBLIC_KEY": "file:${workspaceFolder}/config/keys/case-save-public.pem", "CYGNUS_CLOUD_REQUEST_TIMEOUT": "PT10S", "CYGNUS_TOKEN_REFRESH_SKEW": "PT30S" }, diff --git a/cygnus-cloud-client/src/main/java/com/cygnus/client/CloudIdentityClient.java b/cygnus-cloud-client/src/main/java/com/cygnus/client/CloudIdentityClient.java index 00f0dbd..f21dd8b 100644 --- a/cygnus-cloud-client/src/main/java/com/cygnus/client/CloudIdentityClient.java +++ b/cygnus-cloud-client/src/main/java/com/cygnus/client/CloudIdentityClient.java @@ -62,4 +62,15 @@ public class CloudIdentityClient { .bodyToMono(CloudQueryResponse.class)) .timeout(properties.requestTimeout()); } + + public Mono fetchQuery(String queryKey) { + return tokenProvider.accessToken() + .flatMap(token -> webClient.get() + .uri(properties.baseUri().resolve("/api/v1/queries/key/" + queryKey)) + .header(HttpHeaders.AUTHORIZATION, "Bearer " + token) + .accept(MediaType.APPLICATION_JSON) + .retrieve() + .bodyToMono(CloudQueryResponse.class)) + .timeout(properties.requestTimeout()); + } } diff --git a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/CloudQueryController.java b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/CloudQueryController.java index d3ce136..2c51892 100644 --- a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/CloudQueryController.java +++ b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/CloudQueryController.java @@ -25,4 +25,10 @@ public class CloudQueryController { return repository.findEnabled(queryId) .switchIfEmpty(Mono.error(new QueryNotFoundException(queryId))); } + + @GetMapping("/key/{queryKey}") + public Mono queryByKey(@PathVariable String queryKey) { + return repository.findEnabled(queryKey) + .switchIfEmpty(Mono.error(new QueryNotFoundException(queryKey))); + } } diff --git a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryCatalogRepository.java b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryCatalogRepository.java index 7f06181..da6cbd7 100644 --- a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryCatalogRepository.java +++ b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryCatalogRepository.java @@ -10,8 +10,10 @@ public class QueryCatalogRepository { private static final String INITIALIZE = """ CREATE SCHEMA IF NOT EXISTS platform; + CREATE SEQUENCE IF NOT EXISTS platform.application_query_id_seq; CREATE TABLE IF NOT EXISTS platform.application_query ( - query_id integer PRIMARY KEY, + query_id integer PRIMARY KEY DEFAULT nextval('platform.application_query_id_seq'), + query_key varchar(100), query_text text NOT NULL, enabled boolean NOT NULL DEFAULT true, created_at timestamptz NOT NULL DEFAULT current_timestamp, @@ -20,7 +22,15 @@ public class QueryCatalogRepository { CHECK (query_id > 0), CONSTRAINT ck_platform_application_query_text CHECK (length(btrim(query_text)) > 0) - ) + ); + ALTER TABLE platform.application_query + ADD COLUMN IF NOT EXISTS query_key varchar(100); + ALTER TABLE platform.application_query ALTER COLUMN query_id + SET DEFAULT nextval('platform.application_query_id_seq'); + CREATE UNIQUE INDEX IF NOT EXISTS ux_platform_application_query_key + ON platform.application_query (query_key) WHERE query_key IS NOT NULL; + SELECT setval('platform.application_query_id_seq', + greatest(coalesce((SELECT max(query_id) FROM platform.application_query), 0) + 1, 1), false) """; private static final String FIND = """ SELECT query_id, query_text @@ -28,6 +38,12 @@ public class QueryCatalogRepository { WHERE query_id = $1 AND enabled = true """; + private static final String FIND_BY_KEY = """ + SELECT query_id, query_text + FROM platform.application_query + WHERE query_key = $1 + AND enabled = true + """; private final ReactiveDatabaseClient database; public QueryCatalogRepository(ReactiveDatabaseClient database) { @@ -45,4 +61,11 @@ public class QueryCatalogRepository { .map(row -> new CloudQuery( row.getInteger("query_id"), row.getString("query_text"))); } + + public Mono findEnabled(String queryKey) { + return database.preparedQuery(FIND_BY_KEY, Tuple.of(queryKey)) + .flatMapMany(rows -> reactor.core.publisher.Flux.fromIterable(rows)) + .next() + .map(row -> new CloudQuery(row.getInteger("query_id"), row.getString("query_text"))); + } } diff --git a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryNotFoundException.java b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryNotFoundException.java index e001549..0f83d63 100644 --- a/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryNotFoundException.java +++ b/cygnus-cloud-service/src/main/java/com/cygnus/cloud/query/QueryNotFoundException.java @@ -9,4 +9,8 @@ public class QueryNotFoundException extends RuntimeException { public QueryNotFoundException(int queryId) { super("Query was not found: " + queryId); } + + public QueryNotFoundException(String queryKey) { + super("Query was not found: " + queryKey); + } } diff --git a/cygnus-cloud-service/src/main/resources/db/platform/001_query_catalog.sql b/cygnus-cloud-service/src/main/resources/db/platform/001_query_catalog.sql index 5b5888a..50fd358 100644 --- a/cygnus-cloud-service/src/main/resources/db/platform/001_query_catalog.sql +++ b/cygnus-cloud-service/src/main/resources/db/platform/001_query_catalog.sql @@ -1,7 +1,9 @@ CREATE SCHEMA IF NOT EXISTS platform; +CREATE SEQUENCE IF NOT EXISTS platform.application_query_id_seq; CREATE TABLE IF NOT EXISTS platform.application_query ( - query_id integer PRIMARY KEY, + query_id integer PRIMARY KEY DEFAULT nextval('platform.application_query_id_seq'), + query_key varchar(100), query_text text NOT NULL, enabled boolean NOT NULL DEFAULT true, created_at timestamptz NOT NULL DEFAULT current_timestamp, @@ -11,3 +13,11 @@ CREATE TABLE IF NOT EXISTS platform.application_query ( CONSTRAINT ck_platform_application_query_text CHECK (length(btrim(query_text)) > 0) ); +ALTER TABLE platform.application_query + ADD COLUMN IF NOT EXISTS query_key varchar(100); +CREATE UNIQUE INDEX IF NOT EXISTS ux_platform_application_query_key + ON platform.application_query (query_key) WHERE query_key IS NOT NULL; +ALTER TABLE platform.application_query ALTER COLUMN query_id + SET DEFAULT nextval('platform.application_query_id_seq'); +SELECT setval('platform.application_query_id_seq', + greatest(coalesce((SELECT max(query_id) FROM platform.application_query), 0) + 1, 1), false); diff --git a/cygnus-cloud-service/src/main/resources/db/platform/003_application_save_query.sql b/cygnus-cloud-service/src/main/resources/db/platform/003_application_save_query.sql new file mode 100644 index 0000000..aa7e94b --- /dev/null +++ b/cygnus-cloud-service/src/main/resources/db/platform/003_application_save_query.sql @@ -0,0 +1,11 @@ +-- Stable query key; query_id is generated by PostgreSQL. +BEGIN; + +INSERT INTO platform.application_query(query_key, query_text, enabled, created_at, updated_at, ismigrated) +VALUES ('APPLICATION_SAVE', + 'procedure!C0L!select * from public.save_application_details(?::jsonb,?::smallint,?::smallint,?::smallint)', + true, clock_timestamp(), clock_timestamp(), true) +ON CONFLICT (query_key) WHERE query_key IS NOT NULL DO UPDATE SET + query_text=excluded.query_text, enabled=true, updated_at=clock_timestamp(), ismigrated=true; + +COMMIT; diff --git a/cygnus-lib/src/main/java/lib/constants/ApplicationError.java b/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java similarity index 59% rename from cygnus-lib/src/main/java/lib/constants/ApplicationError.java rename to cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java index 6c1cfac..45a25d6 100644 --- a/cygnus-lib/src/main/java/lib/constants/ApplicationError.java +++ b/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java @@ -1,9 +1,7 @@ package lib.constants; -import java.util.Arrays; - -/** Canonical user-facing errors shared by Cygnus applications. */ -public enum ApplicationError { +/** Canonical user-facing messages shared by Cygnus applications. */ +public enum ApplicationMessage { BAD_REQUEST(400, "HTTP-400", "Invalid request", "Cygnus could not process the submitted request.", "Review the supplied information and try again."), @@ -28,6 +26,23 @@ public enum ApplicationError { TOO_MANY_REQUESTS(429, "HTTP-429", "Too many requests", "Cygnus has received too many requests in a short period.", "Wait briefly before trying again."), + PAYLOAD_INVALID(400, "REQ-4001", "Invalid request details", + "The encrypted request could not be verified.", + "Refresh the page and submit the form again."), + APPLICATION_VALIDATION_FAILED(422, "APP-4221", "Application validation failed", + "One or more application fields contain invalid information.", + "Correct the highlighted fields and submit the application again."), + APPLICATION_ACCESS_DENIED(403, "APP-4031", "Application access denied", + "The selected portfolio or application is not available to your account.", + "Select an authorized portfolio or contact your administrator."), + APPLICATION_SAVE_CONFLICT(409, "APP-4091", "Application save conflict", + "This request was already processed or the application changed.", + "Refresh the application before submitting it again."), + APPLICATION_SAVED(200, "APP-2001", "Application saved", + "The application details were saved successfully.", ""), + APPLICATION_SAVE_FAILED(500, "APP-5001", "Application could not be saved", + "Cygnus could not save the application details.", + "Try again. If the issue continues, share the reference ID with support."), INTERNAL_SERVER_ERROR(500, "HTTP-500", "Something went wrong", "Cygnus could not complete your request.", "Try again. If the issue continues, share the reference ID with support."), @@ -47,7 +62,7 @@ public enum ApplicationError { private final String message; private final String description; - ApplicationError( + ApplicationMessage( int httpStatus, String code, String title, String message, String description) { this.httpStatus = httpStatus; this.code = code; @@ -56,11 +71,21 @@ public enum ApplicationError { this.description = description; } - public static ApplicationError fromHttpStatus(int status) { - return Arrays.stream(values()) - .filter(error -> error.httpStatus == status) - .findFirst() - .orElse(INTERNAL_SERVER_ERROR); + public static ApplicationMessage fromHttpStatus(int status) { + return switch (status) { + case 400 -> BAD_REQUEST; + case 401 -> SESSION_REQUIRED; + case 403 -> ACCESS_DENIED; + case 404 -> PAGE_NOT_FOUND; + case 405 -> METHOD_NOT_ALLOWED; + case 409 -> CONFLICT; + case 413 -> PAYLOAD_TOO_LARGE; + case 429 -> TOO_MANY_REQUESTS; + case 502 -> BAD_GATEWAY; + case 503 -> SERVICE_UNAVAILABLE; + case 504 -> GATEWAY_TIMEOUT; + default -> INTERNAL_SERVER_ERROR; + }; } public int getHttpStatus() { return httpStatus; } diff --git a/cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java b/cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java new file mode 100644 index 0000000..77de0ac --- /dev/null +++ b/cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java @@ -0,0 +1,20 @@ +package lib.exceptions; + +import lib.constants.ApplicationMessage; + +/** Single typed application exception carrying a safe user-facing message. */ +public class ApplicationException extends RuntimeException { + private final ApplicationMessage applicationMessage; + + public ApplicationException(ApplicationMessage message, String technicalMessage) { + super(technicalMessage); + this.applicationMessage = message; + } + + public ApplicationException(ApplicationMessage message, String technicalMessage, Throwable cause) { + super(technicalMessage, cause); + this.applicationMessage = message; + } + + public ApplicationMessage getApplicationMessage() { return applicationMessage; } +} diff --git a/cygnus-lib/src/main/java/lib/models/ApiResponse.java b/cygnus-lib/src/main/java/lib/models/ApiResponse.java new file mode 100644 index 0000000..d866bd1 --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/ApiResponse.java @@ -0,0 +1,12 @@ +package lib.models; + +/** Consistent API response contract for every migrated workflow. */ +public record ApiResponse(boolean success, T data, MessageDetails message) { + public static ApiResponse success(T data, MessageDetails message) { + return new ApiResponse<>(true, data, message); + } + + public static ApiResponse failure(MessageDetails message) { + return new ApiResponse<>(false, null, message); + } +} diff --git a/cygnus-lib/src/main/java/lib/models/ApplicationDetails.java b/cygnus-lib/src/main/java/lib/models/ApplicationDetails.java new file mode 100644 index 0000000..ed2ec4a --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/ApplicationDetails.java @@ -0,0 +1,87 @@ +package lib.models; + +import java.io.Serial; +import java.io.Serializable; +import java.util.LinkedHashMap; +import java.util.Map; +import lombok.Getter; +import lombok.Setter; + +/** User-editable case initiation data. Identity and audit fields come from UserSession. */ +@Getter +@Setter +public class ApplicationDetails implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + private Integer applicationId; + private Short portfolioId; + private Short bankBranchId; + private String applicationNumber; + private String bankCode; + private String product; + private String loanAmount; + private String customerName; + private String fatherName; + private String applicationType; + private String category; + private String dateOfBirth; + private String contactPerson; + private String mobileNumber; + private String specialInstruction; + + private Boolean residenceVerification; + private Boolean residenceTelephoneVerification; + private Boolean officeVerification; + private Boolean officeTelephoneVerification; + private Boolean propertyVerification; + private Boolean referenceVerification; + private Boolean documentVerification; + private Boolean residenceCoApplicant; + private Boolean residenceCoProprietor; + private Boolean officeCoProprietor; + private Boolean sameResidenceAddress; + private Boolean sameOfficeAddress; + private Boolean samePropertyAddress; + + private String residenceAddress1; + private String residenceAddress2; + private String residenceAddress3; + private String residenceLandmark; + private Integer residenceColonyId; + private String residenceCity; + private String residencePincode; + private String residencePhone; + + private String companyName; + private String officeAddress1; + private String officeAddress2; + private String officeAddress3; + private String officeLandmark; + private Integer officeColonyId; + private String officeCity; + private String officePincode; + private String department; + private String designation; + private String officePhone; + private String extension; + + private String propertyAddress1; + private String propertyAddress2; + private String propertyAddress3; + private String propertyLandmark; + private Integer propertyColonyId; + private String propertyCity; + private String propertyPincode; + + private String referenceName1; + private String referenceAddress1; + private String referenceContactNumber1; + private String referenceName2; + private String referenceAddress2; + private String referenceContactNumber2; + + private Map dynamicFields = new LinkedHashMap<>(); + private Boolean autoCutOff; + private Integer formMode; +} diff --git a/cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java b/cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java new file mode 100644 index 0000000..163ada4 --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java @@ -0,0 +1,4 @@ +package lib.models; + +/** Data returned after saving a loan-verification application. */ +public record ApplicationSaveData(String operation, Integer applicationId, String mvCode) {} diff --git a/cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java b/cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java new file mode 100644 index 0000000..10253a0 --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java @@ -0,0 +1,16 @@ +package lib.models; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** Result row returned by the application-save database operation. */ +@Getter +@Setter +@NoArgsConstructor +public class ApplicationSaveResult { + private String operation; + private Integer applicationId; + private String mvCode; + private String internalUuid; +} diff --git a/cygnus-lib/src/main/java/lib/models/CasePunching.java b/cygnus-lib/src/main/java/lib/models/CasePunching.java index d561e2b..9ce054e 100644 --- a/cygnus-lib/src/main/java/lib/models/CasePunching.java +++ b/cygnus-lib/src/main/java/lib/models/CasePunching.java @@ -9,7 +9,7 @@ import lombok.Setter; @Getter @Setter public class CasePunching { - private ErrorDetails errorDetails; + private MessageDetails messageDetails; private Map optionsl; private Map> options; private List visibleSections; diff --git a/cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java b/cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java new file mode 100644 index 0000000..49809e8 --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java @@ -0,0 +1,11 @@ +package lib.models; + +/** Hybrid RSA-OAEP/AES-GCM envelope submitted by the initiation page. */ +public record CaseSaveRequest( + String keyId, + String encryptedKey, + String initializationVector, + String encryptedPayload, + String requestId, + String timestamp) { +} diff --git a/cygnus-lib/src/main/java/lib/models/ErrorDetails.java b/cygnus-lib/src/main/java/lib/models/MessageDetails.java similarity index 70% rename from cygnus-lib/src/main/java/lib/models/ErrorDetails.java rename to cygnus-lib/src/main/java/lib/models/MessageDetails.java index c57584d..0ccdfcd 100644 --- a/cygnus-lib/src/main/java/lib/models/ErrorDetails.java +++ b/cygnus-lib/src/main/java/lib/models/MessageDetails.java @@ -1,6 +1,6 @@ package lib.models; -import lib.constants.ApplicationError; +import lib.constants.ApplicationMessage; import java.io.Serial; import java.io.Serializable; import java.time.Instant; @@ -10,37 +10,37 @@ import lombok.Getter; /** Dependency-free error information shared across Cygnus modules. */ @Getter -public final class ErrorDetails implements Serializable { +public final class MessageDetails implements Serializable { @Serial private static final long serialVersionUID = 1L; private final int httpStatus; - private final String errorCode; + private final String code; private final String title; private final String message; private final String description; private final String referenceId; private final Instant timestamp; - public ErrorDetails(ApplicationError error) { - this(error.getHttpStatus(), error.getCode(), error.getTitle(), - error.getMessage(), error.getDescription(), + public MessageDetails(ApplicationMessage message) { + this(message.getHttpStatus(), message.getCode(), message.getTitle(), + message.getMessage(), message.getDescription(), UUID.randomUUID().toString(), Instant.now()); } - private ErrorDetails( + private MessageDetails( int httpStatus, - String errorCode, + String code, String title, String message, String description, String referenceId, Instant timestamp) { - if (httpStatus < 400 || httpStatus > 599) { - throw new IllegalArgumentException("HTTP error status must be between 400 and 599"); + if (httpStatus < 100 || httpStatus > 599) { + throw new IllegalArgumentException("HTTP status must be between 100 and 599"); } this.httpStatus = httpStatus; - this.errorCode = required(errorCode, "errorCode"); + this.code = required(code, "code"); this.title = required(title, "title"); this.message = required(message, "message"); this.description = description == null ? "" : description.trim(); diff --git a/cygnus-lib/src/test/java/lib/models/ErrorDetailsTest.java b/cygnus-lib/src/test/java/lib/models/ErrorDetailsTest.java deleted file mode 100644 index ef9ad9c..0000000 --- a/cygnus-lib/src/test/java/lib/models/ErrorDetailsTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package lib.models; - -import lib.constants.ApplicationError; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.Test; - -class ErrorDetailsTest { - @Test - void createsAReusableErrorContract() { - ErrorDetails details = new ErrorDetails(ApplicationError.ACCESS_DENIED); - assertEquals(403, details.getHttpStatus()); - assertEquals("AUTH-403", details.getErrorCode()); - } - - @Test - void mapsHttpStatusToCanonicalError() { - assertEquals(ApplicationError.PAGE_NOT_FOUND, ApplicationError.fromHttpStatus(404)); - assertEquals(ApplicationError.INTERNAL_SERVER_ERROR, - ApplicationError.fromHttpStatus(599)); - } -} diff --git a/cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java b/cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java new file mode 100644 index 0000000..a15c9d0 --- /dev/null +++ b/cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java @@ -0,0 +1,22 @@ +package lib.models; + +import lib.constants.ApplicationMessage; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class MessageDetailsTest { + @Test + void createsAReusableErrorContract() { + MessageDetails details = new MessageDetails(ApplicationMessage.ACCESS_DENIED); + assertEquals(403, details.getHttpStatus()); + assertEquals("AUTH-403", details.getCode()); + } + + @Test + void mapsHttpStatusToCanonicalError() { + assertEquals(ApplicationMessage.PAGE_NOT_FOUND, ApplicationMessage.fromHttpStatus(404)); + assertEquals(ApplicationMessage.INTERNAL_SERVER_ERROR, + ApplicationMessage.fromHttpStatus(599)); + } +} diff --git a/cygnus-lib/target/classes/lib/constants/ApplicationError.class b/cygnus-lib/target/classes/lib/constants/ApplicationError.class deleted file mode 100644 index 71c961f21da5bf430160731e2d8050089e8e4c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5764 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 literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/exceptions/ApplicationException.class b/cygnus-lib/target/classes/lib/exceptions/ApplicationException.class new file mode 100644 index 0000000000000000000000000000000000000000..a93c0c844274fb6169c82dd1a15aa4517cf69c36 GIT binary patch literal 1010 zcmbVK+iuf95IvJiO&q65(*}A0dI6-=6#U3TQKbseCl>*&`qY<=yGj;0c4TjW&jJZl ziHCkbKMFBxr*06bB4Nq)%yBt8o-6j9&%IF7U$%Ho{R7Pn=`GEGHa5_Wup9WbgEk^T#MlCw`(c&#F( z4+yWi^V9v?9!_+kqW=Ew8KLqfzK}M`s5`LW5IWsii8T-w9aOPEX!-qJD{M66?2sL}qnCqnC3>Op+*UL;~D zwM>}I|1TY;z)uHB{KX8x;uuxdj4JB{cZMo=lo6_d7^f^tXJ!V+`%+I`m14@L-QD?X zB-khMI0@vDGSaV20Tp-ZrCBw$d1qz5t-K$zIJU}cTeyc3YV3XBzd5hFdzY}?=ReW- z&Ta`!{w`)mHW$`m!$FHgzcP*D;#s& zy%(2Qok`bZxE8}MWpr+yU(h)Pox|vcj?u7zhm3598|8v{BO`x=$J~M$)#JbEv+Djp X;~N|Kka_dV8Jm+QOxOsUS=QDc$OY`k literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/ApiResponse.class b/cygnus-lib/target/classes/lib/models/ApiResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..d91e2bd515dbc22213d40dae5bc0fa1bc8f46213 GIT binary patch literal 2260 zcmb7FYfl?T6g}eyi_NAOhtLN!p&>MD198%ZK4MBsph;*=k_HPY&Zo6KflcgPcXu7B z|EV7usi+c_`UCo-s-D?h;sIk{l-e@^}au!ScEQUY@wr&;NGZP^Jb zTRrEQ40@g$NCO#x!YliYUFq2FVda@@d45~K2>Pv-3<3es5XiLc&=x4x28vIbuVgE% z3gq^kL)Q-bz7$B;>y#K>8rp~4&(}1sd$Dv!hPKlQsQ1ts#v5Z$($BOMh_t^^zc-Av zX)zq#=v)M&05@p1Nz}|X%aw<~jEN#H3ruV{t`lww+_4(N?#6jK5SXqxu6*3@Hl<&; zn;llCSo2zT=fL(IwNHd|XNAA?P7exuGCcCyPi^1s%24`jjq#F|j0(SQjq|Rboh{tc z5rxw&{%6(FR;iI=(LOej#e~4DRT{39K-Ma;%u4YS69y(}K*iB?QJObQOu-bG488r( zcihAC=&`g~B=0Q~%P0w~o~ewUy&hI#Na!OwI8uElnXS^ULRvFX#x0V0G}11)A%E`M z9X9341*|SL6wqfTD)?MrZ6wfep-Q}c*R95X5cwdFG`>(Q{W6N1bj$C1eZM6iIErZn zE$>_E4hvWpcV3Gi9tFGyh5Mct2BB~FVhRR%e1mTd@FH9r3F|6}`?8uP#*5jO{Scq`JRR+_EnZR4t_E)%6Wu2aZ!&nv@qj=wA}Q8PYy z57U(XL|Ka8sXrl}XUZ#opzs^FY0UCHK^XPE!uMRP7J+k1PzB4s6|U7+NesFJ-sh7` zaic`a?+5tso!5^duj}+0nJBMmQBJ(3G_U!{>nU=afDZ`PT~3m-j+t2%rLA^6O)^SRRJ316Wj#O8*yYr zo`D$-nw1NTR)O<*=|&aYPK+#iQn^l+S5C-{F;@Kd!R2>txf@mEE^RZko@GPU%k#%r zD6bx4vAlMSrMFRt16B5kLr0AU-6y7*GaMOp~`)MLEeu#zm4zl01xqq aQuY73iyyH^mOSQufkDMgKFi~X0{;R`P4;sD literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/ApplicationDetails.class b/cygnus-lib/target/classes/lib/models/ApplicationDetails.class new file mode 100644 index 0000000000000000000000000000000000000000..b8a861ae6556dc772d0936b00ab40e977dfb3f2f GIT binary patch literal 16870 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 BVBi1% literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class b/cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class new file mode 100644 index 0000000000000000000000000000000000000000..08c844cb35db3b32c20eb786ef6bc54246373d24 GIT binary patch literal 1455 zcma)4+iuf95S`7X!NH}bZ9-|FlzWl_eg}jUA%P;L6g4I9n`D)4vDcB~%Zq4FkfYdrS!Kt?(+T{%<7 zYBKer5)}kFXL2T8PnwZ?)IU>$NRSnbRT#$#+U%^}yHTjk=#`*#xq@pC1#KmQ+9pyX z6(VZQpS?wOLAJ(SXr%XPsu69ERCKheuw8E?(w8-A$5Rt&U$xClPjuf?En|WxW;J12 zUf}nG&+dC=n5!D1V1dh7B6vmIZ7;GpJA zv%}B2cH=_WI61{2^TNC`3zliO3a9lKyx}pJZ}U#aZ1H{WnZoKYST8GtN@TLgVAi?x zgkyIs1`B0L>w3Z}RLo19Ojbq9HodOP8Ei*qcl@rDu6iyeR2&{DA!8;GU~r^KkO`DU z$J7ak)wei%m zSKJlnqG8fT=z@te-*g(?Hn+XrKw?MO!YeVD%x~5hOzmMdDVT&C2D}05ba%q$PrB_o zcb}PfFqDeZFs+*D3hD=gQ{IKZ4A#_xRZWF^S!{7H>JkRm^PB35=rpcbf7-P@(dNf? za4);I?RauWsFp2TPP^{>RygD~cTJBsi%DRRH((kPcpNC`UoM$&5v2xgczcFe=~c?+kpUT4^w0GmH10|yx@TRAFBy=9B`kIncpmt8IT9T>nS#GCU>R1h z+%R}wwKYwCX+Vx9Db-+-JWf+b2CUN53QpCA3{MeX8E}mv$bb70_tWeX1J>khXV{%L z@?*?N)sm@j@4{)GnXcL99(Sn*k<&L_Hb3AwTJ>OHaKsIbG94|=MQiWnWv~8HeOcVG zu0X5_Ni&P+A@eP%64HAVx-mF9Vr!)$Mb0BMV!GvEsp2_`qvPy*EvE+ctVUr;4C`5J zMGXoZMll(Ti8#y8Lh%#22xEp_gx;aG5$|B(SDmig;0J;p#YOe8yG!p3yo2tV#P4ky zCg?rFUla6V;Am3*PGKLbJM0_S$AS#|3)shcld)Jwvc(dSEmnhU(fYDQgUc4JjO{8i z@bSj~Z(^^2EyH$t>uN8s5g=h97__zl%Kv@4-zJe?N%2g>4k{Cv5zV zgA>pPB}albVGGZ|-|y|Qz&m=ty9%%{7I;q&_z`>@X86fi;I^Wg=eI2O%eWPyzo6;VgL10h0`*HV8>}G{4IPJ?)dxh!rQvS{xhoz&%r`}$8%En z2lz4WCLfZZ`U<}8i0K^N0sGc)45r@M zr*_4$-BxA4{*E^S24ic&6~Q`#;icunakv2E8OU0Y1B<~$N7O5AugRTGWz+8PgRa{+ z7H*4y#eLuNw|HO+r^DcKRZ%`srdEkKX+a*Q7+mm90^zwGhe5t7chU`nQ`xgmq^xK` ziDa2bMoVWbD8oh6pNfvCJG_Q_CIlWuAyh>tkci6`T!C2zxf9P1jyy+ryG;g#P%4jI zJH{EQ{lJ2&@FDK%$n)EKct{2%MY!t*yv2Pfy>7t`_y~Q~?QoxnMMYQ(d~}J_eQd!3 z=_Z=*UArwB+k!jI4xMAkf@PY?MKe1=+oAEB7Tluo;wksVk!aX-I&$@Hlcw)jP@(C` zrq}4Uxf_I24907s<=R2l$6Y^EJb}JkOYSW>vcAe-C*?YMN#x=+^_KVLU9PU7Z0FGS1@)uBk>FV9v86^K0`n~%sNu$7 zc4=ANr8g=&$WK zqh|UvXE}xOi?BCQGEMhsqHw_kN6D6&N8uKtAxa_|A=x;} z&Vpq|6-BW^nkm%i(b5}=q6G(x(LzEkTCz2->o@qepy#QeK09|P|KU2m&O=yZbNIzt ziT{SE$N_`9^8Y>TV>OHW_py(aEbc$RK9(w}#WEyYtTD318X{Y)7_!9*AzLg3*b)Pa zIetIEUIkl*?dZy1z01r*f#j? zk`A0Q0Q-;n6m|@tIUQ6O2-<~b2GBJfR2&F;ZUoKipwd84)d*VDLDK_4dq&WT4w@MV zdSL|J)0=n@OkJDidRsB z5t&d`6+c1vVI?)s!-o&hYgC6hKZZ}zy`DjuzKfGX@J2IyXf|9(YdC!ARKq2>-!n|p zq2afh;cwtu(}}0k8V;XS)o>Xe^bD6{!{2F!zlR@8H+hK+tFPdBuBNv;zR4?zoBR=e zGU4aa;;AIW_^S#0&+v;0e=RMZDou>Pk-*z#{CrwG6|fk;kigf?_{Fq%s*5pxIe~AO f@hfTZRBmJZtpvVl#@|khrz#%fD+xT80eJL3TF<|3 diff --git a/cygnus-lib/target/classes/lib/models/CaseSaveRequest.class b/cygnus-lib/target/classes/lib/models/CaseSaveRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..240ed4aa548738a904a6d73fbac7bb27b65a9e00 GIT binary patch literal 1944 zcmb_dU31$+6g`{7lI@5jH73LX+5%0mm9}pA2A39^66(P~r|IMYp4RqGqehmDBxlC_ zCLZVv9%k~u58y{JoYgwE@CZNgaQE)6?zwyS=v?Wqzc2m-@DC51G^Qr2EQD2~Nrp9ghN@xD;IElRAc}u`iK`$B) z6V?A#jRmS+;3b~)y?1z%sN|8BLXD%h)fCb3GkQwTYymQtL zS#t>jn+^)F=sRAZz8?*`DtacnzS8xDJ?Wpw$kXd|Qv+UgV8hb0*Blhh>~#kvGpji$ zo7o!<)^*}y5}MmpNZVBhZ{nK3oqFfLiEHInTs)QWsjgaJwccp!Z0|a_jvE5kmS<}V zSR_aKF>9`8*!ZFQf`qmjKk8(42YYA;++CV156$%V^n1E55N6X)Uup*OKkqb7%2>rM z2QF@>tej99->Kv@>_3r_9H>M^ymR?D97R2KcP`Ut6liHR4RO;*2cO_mimrQ^LEvSU1}``d&s5VyKbAq?SMiNb7@m!Wt)<*d zfzQT6^+?6N$Qx4pS;(O;<2bu9<@cvd+MLt>rLU<5HZ6Qm1RJoEc4uqWU~I!yUK7qE zrY+c-HDGJjewzXtv6cAW%_y0TtVLB(OK9Ij81J#%vr3TwNYYJsNsB zF&`b=WxK9Y1mrIQ8t{)U$t6&+er!6Ip=6@fEK2=mmYj{T&;>ak7Ff zj+WWPm2?MO*}0I)BE-r-in);LBE-%>O1Y5jMMyCNDd$3V79ph!WIY$My9g=IAXoU2 zyJYM=QluHP-3z=0EP_M^bRBOqRMVUVy#xH3(z?ab5S<0>VSfs$^Q0BV6y1XhW>|s} z{9qg~Rv&dlZ`1F)f8eHjFu{g36nR-~0^W!gGz4R<)MP>Ao-Z?ojj7$fjG?%@mE#{+!Hf9gX%(}Fw1*Z2lCJmz|z Smo}0$f;DnAVl`4th58RfZjsXf literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/ErrorDetails.class b/cygnus-lib/target/classes/lib/models/ErrorDetails.class deleted file mode 100644 index 76ad449a90f486e4d258991e49caceefb93287d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3268 zcmb_eS#uOs6#j0uo(xSO&E^n@!=4PwfD#p>LP&rNCM-!9#Jw|fNt*OBboYeCecu(A z2Ys~4DqnoiDuEPMsZUzvk5a#Tdt!!UG%qIU^zD03f9E^jIrrTD8ag-mZR9vTI$4=lM3&S83SUDx*;W)00$97ze1e$w#3koA; zq8(`ggX@DqSqiM}=^eRb&)Rv{_NVgWap?F{{mRrdu~M0)XgcA*9Q&D8nScmlnHkh~v8LnzS)!1?K=gt*|h!War1nJ*-IFj_yjBCu{Auzr!4+p)vIP7}M( zBd|d!=}`$c%4_Y0WNbSwC2M=c@tycFfy+IGr3(GOGj}oUEvAvfZUcK1$Grlp7xHs@ z@{%mYI-f-Yd4a79YX#SpQ?@%0PE|eW$H%Ugq|QPL2L$#GPfVQ2N>v?MRt<|H>s6yT zJ1O}WUy;(!9^Ah_%Y0<}4joEkAMRJ)4=Nd##@btKr;HDncn}XUjnj3NCJHG$EYPl9 zsS;CyKVsrhP|8#&FISyVmIWSa0NcRP(kbQnh>3?WAYd(BPGL}>HC6?yERUHO#6Sus zSo2;|uxh$s;)I%hTmWf|;*^2YCeElrt5Z8EIDr=K3QxT@W@23VT~S^r@)XW-B9s?p zDE*Qwl$GIm6Xz8E1uCJEOUb=T8c*SA1J9Uv7SGLBuCDeZtt`5Znn0%l|5Vj=7s-^E z^)C&&ehb%(6bswL1xyO8N#3}t%2d>46A~Axj1wK@_Mg#p^`ym?Gi}1bC2kMTo{@ur z&*pO8iKjVAT8_ZZ2KlR}QR^fI7{pp#q)w0@m!V_3&UJgzW$RfT>BpiBBQ^`&5yVOM zu6Zv-+pWr0vQa-mU|Y|~fA_uq-XfEg^tDwZjxSGDy-68PB<`${pk%v6n-u82HrWzS zJJda+ksI`ZeioB1Wr6H+-Wk!TjHiS089TH+88a?MGalQenNhn^bJ#koq9RS7CIVe! zRbS<$;LkddLtX>EA8>zC5WZ}UxPdnr%;Zl1gd)O*h2Ls>l5=e z$K5#|RKt=y?kLGS^^3J0w@;;oq>lzc9L1qsN!UjzyhGk1>qOc4{kp0R@1^lRJ}~g1 zDvgf>wl8!Z$Da*mWbN=ss^z#{ii7Z)z?b!PQZr2a471s|GTJ^81T)o2gQ~8p^SfT0 zxK@!3%%7^WuWf?*f~-Ld+O9k9#8L@a@TuycYe$ic4BQadu_UHOR1JK_Bly2fd442u z;Q%*c4gxbsVIw^F90x4uCRAXl2FkIe+L^wyS?N2wlfJXv=sUZKzH>kGo+idFgv5yW zbdktSyl>6zz6HU{;I)ER2d~aKti6SebJ%n)7j#MxY? z&6?1w#aza)o|wavzoPplo>!4H>qz!t1;;zlLP{1%ZKB#+u$#Yo(1*P^!n14~dG_4> zaG4Di;aEcWp9npj2cd${nNab2>foRcHB#AV(Ib@)rJSewJKFR}<;1`X9G^hTUnG$- zuw57!z5A~lX!p7D7oq;mqKWH#OG~}kAS;j$$V6d-ae#iouC8i;M{1G+l*vD)}|*rHNKe`)HHvYHfr@14fHCbNou(s=&&MO z4`eM1#4pwcKtqdx)+`IeuiOSe!;68|E(^r(;s!ux7Xz(Z7U;ExK*hyC>z4(3of~?o m*v~Hp+OP~zGv3hYc@uB(o?Avsl zQ~TJN&h(`Z?MxFGI@9*4o#~G%{f^`iXOh-=sK-}#(YfC}%XiMzUw=RN6+kb((h<{; zwyp78$t^0|&z)AjZ%(Lw6_}Ro>xgS;xnWM5Ioot5a%aYGs6wElNke%6ipz=ix&4ER^z$}$D zv_){TlFLV$5U=T|FFM$a(z@TiS^i^qeDZc z-X;SZ(MjtkR4`CuXG2$aUQjXy9>-?d!}o$ruXc4WHe5uv7}zSJ35t%27i4j}fi780 zaWCZdNQ$F`*7Ev2zKm#Y+M{W?&UoC(t63O9onG(khb|47AGRMGZ*e8pd^) z3#v}UGy?@;UYy0CB-@mMlx%C0$)tfcnY1S{g^~_?j*lUIqq5~2aNv^tRf~pPXQ*OR za)DiuY|mmNY7?_6Bq!fA(2h0CaTc+{)M>LEQbz0u3{)`9?6&;lte#V0d@rY1_ih`w zgS#5mmCPx{%E&@Q)jD|e4yd$TBEDd5#RuM zY%71upzBUm%1Z>NCR__Pj@~J&CB(1P$X8=o>)k3upK048R-k%TH{qQGK4y@$jOAzM zGs4I_bY!1x`o7|2`5AALMfNUbfsQXUbpE#}ucydd>?O?_*cy>wb=UdiWGj0~@wHe-jK??|CuWTO=IoAHq}evHJ;An(t@}Q9 z&f>}Y*nbZ_KT#@%r}<1F&gXib-a*6-yva7=8Lq62knk*eIU^>s`#4YQQX9y56}OW?U=z(c4zABeVm)Y`RuOL zg>ZB+n~tY0hr=t`bmN~$q^^FCM7nVnFU_EsO*f^khi@mcX+34#$Bo}{UXAda-9 zzVQqhNg%{kw$v*IQAQGsrf?+T(BW}>3h{>&PU!qD(s6C!{{YbJ@XbR){hLIL@3|}V z^hTXpf%<@&AoRLao;J32wxksIC;})_PtmzE`v;QQS@_?eReZnW0d4`I|LM;kDG~W> zRcO~fdTu|`I9L<(PP|OJ#E-H%Kv$Lr#Lu`o xK*i+&yf%F6+2z?)%6-oo4LrJ#Mt_7OheOiI(I_#9s%{SS;#v_Jp= literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/Option.class b/cygnus-lib/target/classes/lib/models/Option.class index 2df6df018b4ebca454650d840a88c5a66cd92cb9..0b261289aa4042ed26c0eb4a5d1efbccfaccd06e 100644 GIT binary patch literal 1353 zcma)*+iuf95QhKF`C!sCJy2+&w49O@@I6IH6^IHcP}HK_uai}}#jz`Alji~ngv138 zz(XNs)>cZ=O7@M%-kJUOpMS@H{{H$6;0Vvl$O)|a+H=R@Q27)0MiFEDd|g3`HRUj6X{??$@)-D29dUODjh}P^irVoN(b7! z7Ra|deSyLo5>Z1QD-P;#1Xg-FP#>pbPeq@l=i8IRf%N+_()^t)7R zM#}VK+3W4jO~SWNr-9L9^*)&Ci6-n(5QIju5kzhE{BZ1rU)*CAs7M+$Jgh?Cj)Njf zF}@c!zKBm+=h}M?%BTo5NXpwQA2{{EL6uXi@|aEG#fJ`Rc5yP7zR|v}oGoj9Q06=w zev*+KE2AP3T%lcwqJ>?FAl}uWlK+Ind+hN7wX<*<4b(f$cGu&1c){0=J(8BExhWvW zz0+Hc`?8Umu#t3A>3NI3T#ABXvHKH^Z?>#S&yroNV3ppvlnT(o8byJ1Y!G}i zsk%*Z5%e8fUuiLiD^Tf1&|Pe&fOfKh?x%uwvw`+fLHpT2kMNkTW7(sZ)NYP_>mK~T z*0S4WYtm+1k+{t_!PhD9g!UEb?<7|Ro}!(G-^q&SDVgKT7T-z7?`FmG@Xhg6i|?l6 S_p{=8rsw#Y#UI$=d-e~7J-tl; literal 1353 zcma))+iuf95QhKF$vL=blcwcR&c`GLd`}Tl1)@R<6j7A>b+SsgICf=k@?0Q+khtIh zcqqh-ZKZNzDY@D4tY^MC{QLLc?>_*J@w|=#iWW*X%BTqJT*$d}Jn2uIQ};rRj6mg; z_O*E}Q0(@GHB?cvP`A;5Ezt6`>r8{O@*?N-(&)e!D9@!gQv&V5GV6%5n>MzwLt&nD zm6r`WGokh;aah~NE{8S7DjJ14W^?+Ujr}-%5(cwNfzlhQF0eh&zWO+ux+?r4T`w*l zjHEY|p=Lk5ESYm13G5D5`aTkRN249^M<*QH{HBO;}WYR1&omHSoW#3*6ne=gzOjnH-E$wwzJL(Ndu@B0e2jfpN zlv8C?NR4n-S~HWCmgKA^g=CA;MOw6e7RHJ|%UIyq$>MwY_|~R)esBvs ZJ6U``AK%#&&+mAFXD5q4q^%Y3>_6B4zqSAX diff --git a/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class b/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class index af44226eddbe7c8a3dd2865cc961c97ca92a1479..eabc2fc199aba37b534e671d83a86fad524b20e3 100644 GIT binary patch literal 4210 zcmds(>vG#f6vzLYn=esf=UUoAX&`Ciq^&8Xl;S4MrR0X2lsZW%v z&8~9O&F{F}DRI{|Y-=*mUuqa;l{*RaFk}z(BRy~G)?R+Ae84LnL#kre>biBjUS$|6 zp3Il_ZO1DxTz=ZHJfp_fts}!V$|hg5EZfsPdW*|2Tr}-k**?s#a*I2<$E&oZUm-X3 z8W&3fP|q=}y}*)Xa-AVrc66(RblYhKMH^aH~(ym^N1>D(?ukMJOk zZd}%I0q-zmiiX8E8?`cbwsne$_)7B2+|?aJjFqv++czjkv&Gn1qR`Aw2LtA3A@>%5 z6c|3x(2G7w_hatu+tnw!L&5R5L%uw0qsw%>E&iH@6w=~F(;E6^Z$^WLK4H6|VL;k$ zX&98fk2GXt?_&*Fx$YAUL(=xChGE(JOv8wr{anMSv^~%;CVTT5#*t>|EsG<~aB2F# zJTD}$#4z4D>}k3^k3=HBVEDT&9DcBa(UHu%<04A+8@l*Ogc0Xa;?YfHlue8q5~rXTWU+oB8o z%<%T9=X$#3xr}9lF!{nl*uDR&r9;@LFqZ6wQ{gLys5aRhDr&0M-x6sf(~@m_uIK1= zdFkCWcJXxr&lo085^GpT_94&9kjl`n=oQa)jzvzMGyEKkyjm@RYr0i6xjR|3?ZZa> z>~yqk+&-@J4$EHz(%0dIg-joIlK7V4ui&=_`by`fTY5IfZd?s0QD7*_ zxfnKO=cF%G;bhdluBkj?UdYILwb>Ke)9eStr)g5^(>83rsHHz*wkbe!EXSa&TO_H= zrtZ4jP2dNHsZbs}WhMbS4Oh-yN(v{_NWv8kAr*#A?s{vs>tTW_dN`ZT^9q-K^~3cp{fd`^Fz?Z?CKuoe-lq{s8?I8gPlE~s z@1ps{%H2x#&jAZ> zu=srDC6&;Zn4)%_T8`Q*wVTxP)NWI|L+viLd(`ezD^Qzzh2_qLSJv=_Rt;alY6l-Y zl2Asac!O9IzhjLaEf?gl%?oL2IUd0*4D00RR91 literal 4111 zcmd^?>rNX-6vxk)i!Ur-2!%p!gg|No#Z4M|b07o~z^y~l7)aCfqP0E33+r8LcZ|fF z^f6i~Risqv1N1%m6qTx;;~B$lW`j0-?T2CKoIUfKvvc_$^Vh#`{se#r@N)(d(36B- z1Nxw!LH5u*HVd}t92A~Z4|z>6=)Y$Fbr88E~E4 zLo&MT)=Yt4MI&w)FhlhIHh!&S&l)gC(J68{iu{oQIdTq@^P%OpZ1bc$>%0LA#2BD= zTb|o)NzlgzEYX<3Q-62FCkEW6H)-2Fu$)~>X8)-HcRLd|xzpYjO*;vnF&K~Dk_;@v z7qrP=GWaJKT++_+2OV;a&-YwtkPf~O=0bzy-1+@cJoZHc?!gL!iKcnPH(Up|_qin+ z*z<+y2%jyxI{Fg0<@3fm$?(Ld5kfQNA+54tvk*%D)qG2Ivp&Wg9BlHBPSk*Tv|6YLXV=fwQ z{i*5UtrgtE4DN@R>d?Fww698n$6zY=u4FLvlyEB@ID;{a3y7hd5|ygrw!IqPv}nz; zd#DsjTbC#p2|L^u+pdoSon3cb;S0}f$?x$~@GXPCgJS}HrN_BbHC|zh(*eN^n6!mt zc9rz3Pr`I&h2y$%N$*L?O7(7!#If5CXkyo;q%dT5Cpr~AdfU~z6_y|Fhe`%^VJ`{$ zbgQ2;m_1uf%Q<$BctI|;yy%-|O}O3(gI|I>tperxZJSQr=KgHib&uMuqP{x;PiWxo zNsC8>zYN67qFM}Yxk7B1wq3CV$J1ey9K1*yw(0wv?w7uMNqEU%PW#ZP{FCq_gKOu9 zVm*@|3pcRFB~T)V@Gn+)z*~k^KR)l{GePxP^I;j*d{}}tA68(^hvirEVeQp?SadZX zR$a}9MOX7-vDJK7Xf+>}Sj~q8_ATECt^@v5!nIh#UIE`S^31;m_8WE*_@hcL7(fQr zu}_oJkPUc<&){<6PXKrXJsnUHN7BM4=NEp*KfhvEM~%x6g~DL9N1HSO(XwyxhhZy< zKNy=Y_gnGF2F^$q4gjqSt>qHecRb#h=mmbJ6+VjLnxCp!j5j^Up=| zZ^hHeYI{;*$~P-;L(q ziOrY#tN3Ju`P)!JNnAtuJH&USvul6A@{9RbD50-l5Zeg0F>Djqrm$VbHjV8jwp-Zp z*cP!Bu-$nLpGOO?)bO=P4gVUxQ8_fQY*G%Z$hy${Z{RC{^D*cARZ_yW@KJ^TPa!Q_8X?iQ*5 diff --git a/cygnus-lib/target/classes/lib/models/UserSession.class b/cygnus-lib/target/classes/lib/models/UserSession.class index 5fb4f06a412aac0f8754f5ab1d5627949de28399..a6faf69782ba5e382ca15f15e44cb5a7a9f77a4a 100644 GIT binary patch literal 7832 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 literal 7725 zcmd^E`*U1X9sitU-+T9w&GRN{DG;#TwnWe>+|n8v2n3T-NgFIw%O<%tOE$Y+qZ%lYCF4bB+o^@Atbq>%I*7?6HM7RtHe z;_~#8D2EJ~0**OKAr|$Bfl;5@qu6NREKw&N^h{|nSLG1I<7@-x2zzLqLvy&t44fzE zh^UG#^IHsT7G+A5m**>Mh1^lE)vST7!VwqSmF3d;T^)$)a*kxch-o+T$H?QXk6@~uIKAf{gc5b;|m@hN1N0{Se-s8@P z=r1>Lh3KQyOUI^{M0=%yt3;c0wQg+0bhUwZW5zMLU6kM`^fh+)5Cij``vSgj~!_~+2slDcX0IO)zJ!nqltz`MT`n-L${cjwkVJ8mX3? zLxLlkE3KCo?Ww#@mj^g|?!Dsz$*4Re_u7@}tS!la8#KMARH|00<=mRHwJQ-ksqiPC z+vfUi+NHK_@-1KAr;JZNz3??;>38F+8Rx}8>`t&fNh0FOzKD1#cP^Sfy@u)m5~~-W zU201zgr{Tp6@DGYGjbgNMq#XR3(gmBDXrM!P7IwBdMdYAEtQWd+~+?+T%Z%It8&Gq zf?XM#DV0{%*LI%r@NIJ3e{{`m1HZw?;9cZ=Dwkq1S18Qot2XnYF$m-YAAP(Gg#h;BfRt|tntw>j4~>et2}eNu#SwpMJQ+F zL7{8D6?DzFfv))+&^7P>y5@yn*Sy{9npb*V^A@jb-q>}`8@jG}AJ;W+;H-ODg7_f1 z@gW}i2K$hrWEfL90FRBNXUIB0buG%F2CQ|GVg4^jX1N|uLC_aXdbMOo@ zHnEm}k*Bfa;Ny7b!<1E1Sp1$!UO2AjIB^n~VD>SD#myhhl#Zt10NiLc6Y(9=hA7cW zlrosjzoN7wIS+jCCYRp;;X0)(O@f4Z$~0NqS_D*w-WVrB;uQ^4bg^H zqW+FVd~UWO+SE!k(2`277Xd9w! ztwh5eiTG}9Lp0t>G}4iX@7y*-7qt?Nb|m5-ES%&V7$o6Y-1Ea*vkxK|IKK5cMD9nh z`}o#p5t+@Nz{PvF@s}0Y{vzUL;05#?gR$KVoWP|TM#O{_BxJ%0nL)vXUO?s;5@yg0 z`9PCan4n23Vul42aY11-;sZ@tQG%wdm>CsN%mqcwm=82<#R;0W3^Ohu!v#_Dfo81) zL9T^N8W}gpq(CR1XpfzCj3uwRv^_v4e&>?G(phMP>IVhkZ7c^)N`9Oy)lc2-a zuxSct*aey9un)9gjS#e8jhZ6@8g)S<=BN*3TN?Qz&C316esr)<>l zbxQqe1rPBOaR&y}UF7`+r9pKMdv`yjA@vYe@J&jls=>y$C=IKZFokbZ8d0xc0^gxD zs$Rv}_%5Xl>Lf<+JxUw#0OR=pwuK|FVRQF0NP9GtF5s zZHm=ROgWC%ycO3bW*gTl?wJl+hBg^>li`^TSqW`o`f zfCniBu$#N$7^NT%s`Kz;N+DEL3_qb1=1%)7eo86A-!I{3l%jYZPqHo9pMT++|2d^N zUgPgyuo!9p%iKrYpXx%);$ccjHG_-r2&I%dfe7b0t zJau~H4gNE5aGOYCX20L!_jm#3zX78h{)qqp diff --git a/cygnus-lib/target/cygnus-lib-1.0.0-SNAPSHOT.jar b/cygnus-lib/target/cygnus-lib-1.0.0-SNAPSHOT.jar index de0f13b9f5f2f6b43238708830a685bf8f10df80..7feaa467f85a8b8d92a6f62944c8a4785ac9e3aa 100644 GIT binary patch literal 20966 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

%&s3XP;}y4z$b0)h=;`-hoJqKe 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 Mq?C4c)P(-+zrcxwFaQ7m delta 6689 zcmZ8mcQl;sx1B*mCwdp6*U>xCMvXpNf`sV3MK?Op89hcDJ&5R0B1G>Dg6LgzQAV_z z9Rmjdzybgqih;@a%;{mz@}E}{H5aRGpEasYrCMvX=bRdRQC zap$#keC6R$WrXcR(?b@tuI}JZHw0r{$$8h!*r>3UL+cgH-bnkt-yn&!l)!1kgnCZB z$n>L$IDh+2V3T%!L}UF~QT=!*BT>G#nv2>|>sh|{ZlHEP#epoMfrUX8h5B&>TmAvR zZ@b(YsiY71ad;ig-kpuE-(w4b&QKqyiNEO-boww(Hn?49FnGq@N6=cmK0|__hTE4X z=&a{zAE`(Mbl$l#4fIFn&elH9wwIVzN4{jrQBkxA8>S@B%W1{6) z!$-ZVso`!~t-=0I4Z~?#s&+eqcf1#y0Gz(=8D9rqR&o z^7V*(L2GF8@rxn)z3RBfbnN#wyPhJ_?{pS^u?>Xhs(&?VWW%8!T&6Fd8Y4YORh(=XBeQ#} z<|#TEan=TqHZP?Z$MU-q8x7&Kw31#GkZ8T_rcWf)?iKK&E+$3%inA)c<~A&RF>hu^ zqIV@+*PoiN5!~xZ&4$a8^8rmifo7Ckdj&b4_^v`N9o#?-?bO`UV!d>l|7aBp7P-*v z24h#%ug0irt7svl5Y@Q@{H;bHT}}RXB9486r`0fdL&~LQ5KhlT&Ze(LuXP<*Wpt}K zv!?r%xzY?hbvoQ_A?FA1Ydtb@Ta$V#({Apa6@_o@YHS>s{KwD!fF;3oPdq#Q4-=2L zrR!zq5{q4+(>uE27FGN-SknUBq&f%+{&~Gaks~VmL6RP4wUETk8`r1r*W#-^BUVAv2mZ0hcyNzMes+I z1iXOw_x1@m=-9QjTeb!&O*P>ktmDnho#W}K+jVkTq7mb-a|-d}T)-b#bWA(;**_@i zPOuzT>8~EU@2BUwB})|j>eMJT{bcgR{lR$I0}eS~Fr{4`Najaowa_-Tsc~$6S3;Rh>Eg8=fRw%9|jn9q4x z1`S*(!j|od2=BB`c-2JfgvN<3=^TKH8=Gd=uPC3%R4^sfZT7SmqF*1)<@lusKoJSk z8Lr>WiawPAzh7qxYfJOALD%zFLFftpTER<&R@qk3xN=__KaEZGNw9qV%v;0O^9iDA zz}VkVqymp8p(tD><4vQz7z>Y4#vu7MyNMLd#HgMzh%M%gDZZ0 z1#QE6t9UqW2YN5m;z2#EDZYK!RgmlIj&=>SkJ_vyY)z0ZnUJ16{uyaHIIvlV_CTk# zLTcl%hbk+_xc(7G8m?qLyY)rjs%Nl>>8iIGIRA6MSy7X|X9wS^V?6jWL(Unw0|avs zcfo6PCu@@W#5v;%rIAqTK+Jaf>@0&!C^7D($_v{hUQjCJmXhZgtE=!UN6b1lVH6#^Q)-)*NGz zVarM2^sF@jvsiG@o5^bp3UfE<c9V^b_a1VrBin#C4z3=&_7JbF9gZ0%-d<+3`yc zI%$^cvkr;dh&$@n8U`C1dydtX)A*H<)0jr^Q8W$9`o?`al3sDS(9DIQ@;ZS3D3y5P#%IRTM*^Efr(D7o`DFp`8xL@868K(=5%U$BU z+#kqI8PiRqu#D5sT};(i@!yn{PO8gnXG?Eoq|GN+1g=ctk4|l{+fIPXgeOisWj79) zg%^@LXV-Q}9#rp+GRnO4wb%Hvs%!~oaR<7-JB`?$6!`fO8|(RdYv}I1qLPluS#;O2 zUVuH7w0o9*Pb?aQ%jR3KeZCW%#&AK^=1sMf+9JG4Sb4W?bY>ngg`6|-PW>hE99@~i zeNQ73Li*+Y0INQX8dw!Enyos;ItD4XL*#LA=Dkj-n1*TS#rvhat$=6= zKv;0IDudD51fI$gLWytD@;o*^fKlNmyM5aM0YT+}Tb#Ko;oIJ^Q8`)3Uj7(*MBvb2 z31eaF&P%d8({9@sg9W)=WAWz|fPJQ`Cr@!7H%|K2Q!fvR3+?DY%w?kzD^73HgSIJZ zaP=#u-z;e^ijI``c|pKr`SLpXVQ?Le=L9&_e(s#K z>{Ez+h1Ey}7u0c72bGa7bUQy(+QD&UX%B(?a?XLAdHc0(WRp!q3S5-<*DwdUdEvI^ zFsz9m9;+V~bvfx*p-6;z_HlwTwN5EcDY$~3o|v0_@2cL&ILY{FcxuQM6t>pUSRG;7 zW8Sy?Wx0E~5cMnus+1pLIy}>E5H2KGfn3iCT?3_95;}Q%&C$ z+f^y5^vWjfWdm`5%aRATkY*+4v`S$Y0^42mW^t^B9x=H7{ zN^n{t44Qo`8$9s+>GR_SExDFxa^$0_Rrmb?8oLM5!GTwxtxe1NTwxtaN&NG&lhQ9F zXGMkg`OtK~L`Xr&{qIm~Z<_XXWyr4MqlP=eKQx{6H%-R^{Gr-Se&;VNF#v#2LI8jc z0021JS@1czytZ=m;8S?zVWsWmY-wxf41*G4L$5vN!9;zAjh2o{ox#t{s*zIrSTOlt zD#+gI=id@DG5VZUcCHy$;`qo?l!_Zba5X-uGl}TS)hm%d7C-I zh#pHlEWRz{?Kn31SP$2F^5-XrxWE{CT@Hb-fO@#~R8yq_kQZ_L;L-q(-+23pF++hB`QW@1BZ2 zEt(+R)=^^FVT%s!dr8{BrMkc+D~ROOXo8dEXR1Lq!@3-2S%JXGVD4wjM^N$1Jle@liWY!u}t!vo{SOkuHx;}x&<`_yt8#CX z9+vf(XDe}dlQs6@OvTq?-Xk*A>y$Gt=HmQ{W;Mv7EsZ`p>kLClDt-u>#f~MvEfv9h z8d-@Y(9U(q$s(6-r$wyPscjp|ZKv=6;-diJrqS_BBID!4)k=>L1(TcUlMl2YJ)Z9e z>m}5#sp^)Xe7eV0N3eWGo=rfa%=J8#Lom};u4QC=SMLJ@j+v-$puvPoLYK$G=ggbFK4#}zGwZ%eDZW-?&HPbci^(Pdz9S^M;R{ceGG&<1(_5#sSl=K#{F=1L0 z_ET4cDmSd+dpO(5t2@?!`OvYK5@;q#a=19!P?AQLm2I_`2ACy%XdOwxlE=kp&CKY6 zmLaXgu7nq4{@zNMyqXKG=q$EMm{x3|^j{0mJQXlESwkz-#+{&4sd-p_g&0*s`NePZ zOVzY>FnP2vrc?9%1gvC-ah$aQUc`Z~|kK6wS+ngERu9Hndq0 zC=wKoHCn*4Za$(Q3Czz>fHVVlsNW$W`lPG*j2Fi-uGfm=!j~(R6{%dGurF6~D;c^g zm;qHdZKR^E_bN~_bc$nJIt*SsH0YBDcjTY-tWMPyG$!Yyu{?NE29BmtY0W6eqYmoM zdw^`kvFO^`ZVA;&>|NKMsp=;$W0096ra}3x$2|YCByYm!?C=zWy_gt@$H=%ZOWM>2s_gZF$|znxf?vFtu2kRxyc>42 zXb|)~ajYSZOu@hBs|LvN+51ZL_0L-t(a%yMq=;S_zbPasPd8}X?5eA^BDUGas}fC( zcqNvm7SLb#lsV6rXkO?fCrU6^#elZ$?W-MQqN;T}L z-g?`!=&5!q6kCkM%L-F{6~kHMyGzz)S~cN@;_L`Pb*N0*I1Fhw6L(7}$oAvD;bsoo z5*<}T02=@zPhPWp1U>T;L%atKaaSB@Q-^AC1%d;@mBX6K-H=$Z}u2`mR&F`=*D zpsPb|Q9=~<-c+{}JpDZqQnd1XW#{PeKPN*5dwL{>r1y(SHH_R?zy@IPqX~JU(5iY)Co*(- z?);Qs$hE6#bxrMDd@D`B*=!efhm2*D4C2PuZVPMwJ41)yP^=4nYMz7~d z^mz4|o~zdr8PN>dC#25>>kLL)u`|%-K$MThyeno|zPj@8H50WQmxY$aNbgwNrj0fG zCG^4Q8B(k4Of6^4&=y)$Go@!sUv|XwjSto6fwG>k;<535qFJvlp;0uxMYfc;jtRUt zcxE7Qc5i1o&>tG78zy*h#cM}Q<3OW_ao~Zt0BFvNU;~6LoRs zu)LWZA4dZvHI&n^vxqN|M^Vj{m9vN7SD5iDAI+YeFS1%1(QCw;p8~KbPC`Q|AZ_6p z>Ts^sMJ}$7-(E07ZF>c5a3XcUFdKuglEUO@c|A9JTs$YpSf@}erx-7ZV2ej+u4#Ip z7o)}#8`X#eE>9`ygWR{RW)mey4Ec-qL@>G?w4;@}k94Ex2H(&j3M$RNGvAltKg zvC}uX-w96GqX3dhb?-N<%mi_y07r@Z`v-78)B@sjk%ceR!|8jf^J$j6bI5nQF;kzx z!6ec6fXP6eUGEIfK~{nDU~!QANOyY{b=4+ZAbaaDB~2PJXOhsGN@1n&@JXFi)n+UK zIu{d{yJHHr!nR{4sh4UtR|^8xQ)XvUjp3!(ADQ;NCVib`VWV;Dlv`ZKu0J6|GegwF zMznS8yH*C&FG160kaLzQNS9*idDE5%`=GpBUJds*Hz%GWr6Y_JV9!Wl3keVWo6|Xp zJv{N`ZK#%#LqP9%ow38>i;wBPA2-aJa;5~Tt(IS+-Z&oqo@+!^nW z?R=NRc4>UgdTuN>8F$`?tJp>+Pnz;ZYh-uZca76Rqa<;h`S-823OG?QW}Sqh#g|bw zabccBmM@LKM0EX~%yWg27mSHDl=;k2Jz_A2!e&jO*Mld;I)sZAp!8-$c zPT9e`5{e(k8&M5z$=9zV^~9p9+4KvZ!=4Mc|ir2$nlk z6{>`;WJ~!iHYd<*oUjf6!J=s4OS!rJBC!%Ufc~Dt{10_$i@)d#Mh%ufF^r#aVU9&b z9j=@#Tf*N{CeUFq829yaCiGx-u@woC$D+Qn6^l{DV%*7t0)8lCJP8rjs9JO6)@9Hf zTD&q+#Fp(yz=h^JkYy;cdI`YfgeEV8P#n-A(1V89*`=_cU$Vik@K(f(i-=0IBr(D& z7zJ|9(U$r_YCVR7K$%UE*^r6;=HrGqpli95Y5=v^#%NMQu4kJy76% zDXuNZZkt|Cy1z@=kC<3CJA~) zP!)Q8*J^~peBZr&fIpgTWfm3v>6K#tko9!yamBt6V>_4_=6kj3;FuyOjOqu}D@9Or zD8&N1cQwZ;qHjZ2^F&%I%{ZU4eEva2Dh_RLzK+E3BPrl~+UJ}BjBr2`hCHC=dT9S1 zdrFtgwwAW6omKleB)@L+>30XTb_g$-?PpqB5#I9QCs;_4wCg zs$Mgi9cO*GVrSl{Y6`K*+13qH2u3+{*8zL2Xcu( zn4AvV|1|usGcJC`1My_U#$h<3F12 zAI4<BD70KoA_R094Bxq*uR diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 3d4bcd3..9d7b257 100644 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,3 +1,12 @@ -lib/models/ErrorDetails.class +lib/models/MessageDetails.class lib/models/CasePunching.class -lib/constants/ApplicationError.class +lib/exceptions/ApplicationException.class +lib/models/Option.class +lib/models/UserSession.class +lib/models/ApiResponse.class +lib/models/ApplicationSaveResult.class +lib/constants/ApplicationMessage.class +lib/models/ApplicationSaveData.class +lib/models/UserSession$UserSessionBuilder.class +lib/models/CaseSaveRequest.class +lib/models/ApplicationDetails.class diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 7251d26..0ccd846 100644 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,5 +1,11 @@ -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/constants/ApplicationError.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApiResponse.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationDetails.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/CasePunching.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ErrorDetails.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/MessageDetails.java /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/Option.java /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/UserSession.java diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst index f236490..f382137 100644 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -1 +1 @@ -lib/models/ErrorDetailsTest.class +lib/models/MessageDetailsTest.class diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 15f82d3..5b52a0d 100644 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1 +1 @@ -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/test/java/lib/models/ErrorDetailsTest.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java diff --git a/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml b/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml deleted file mode 100644 index 0ea63ab..0000000 --- a/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt b/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt deleted file mode 100644 index 18dfcf8..0000000 --- a/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: lib.models.ErrorDetailsTest -------------------------------------------------------------------------------- -Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 s -- in lib.models.ErrorDetailsTest diff --git a/cygnus-lib/target/test-classes/lib/models/ErrorDetailsTest.class b/cygnus-lib/target/test-classes/lib/models/ErrorDetailsTest.class deleted file mode 100644 index 01b853f4bc11de81cbcb60491befca06f04534d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1204 zcmah|>rNU`5dIEg7jeCSqEZ!YZ7XPXZM9dd$p+R+LZAVp=`V7?EnTzh(%nN}q&CHqk_51rz06Gq$2w_A)Sj8xAF-)KGPh7LP)7Hw( zQ?n%)ZtYu+B@P%y(wVw~2*bQ>HMNd=V%olDc%JL!O~EbOA43%53RD#nm}E#vvzF`l zf;+<3^lsO-T3lGJ6F4zU=((Ixtv2#TsbJ(8R*V1l$VQ=HT1FaUSWDkzovBOv85Ofg z5Lw$4M?!R~f{UIXWK)P@9t#SRDsE$u_+789o%SeOl3h!fp2oYDru)9>$*{>w<-x)D z*yA=GN7IEurXImELqtEW9c}IH>`KxV6|1;I=0qAKo19uqr zb5q$Q_LhomiJd5vYDT4`7aLWhQa36Mqf#kX6zni8Ueg3M)2F5h_Y%jb(*GE z<4v1N5HGqdZr8bI$@AbcEIwFN&E+7pD;i5;W=Y@jOfF1cub4ewx(`b02#?E7RZjYS z$dJ4aiBOW2o+GS|S+{(PFm%UpsU`Z)yHvco1qK16I=t%->sfPi+;JUhYJ1Sp(W=|? zTIQi8Q%wYygV~S>+w$$HF*KSv`5U1>O&u5>(N3e4$(xOHu&=ZU;W0_61|rxcsrC)9 zhbMFbo{}~cI5!APg0B34^6m^{=a?$S*yqh}h+kkXzC@eU1?~=E;|P=aIDIM-G_NU4 z1{8CBm;uE&&CWACC)yWeEkk)pE0Fz5TqS!MVDb$2W9-WX(nNEHhq2Jx{(eX~N67+l aBAg*fLrLob$zf*60qtcnhJEr1;ng24wH!78 diff --git a/cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class b/cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class new file mode 100644 index 0000000000000000000000000000000000000000..1d4fbe1a8115a57ed2cce05c94eaeceab2cb0cd1 GIT binary patch literal 1217 zcmah|>uwT36#jvhccc45=?r_B;TuKK_7#BXd9Igs9qDluPrTT6 zq}3D^%eTmCIF2j1v|NYK7jmxG(9hZwFv*rBg{SkDrK|i>A;jqQjr7Bq!b}L$3@gf~ zPJog-($|ev%eLwrieA+;%wmpV)JUhzQmL9T^I0>)u-3`#wuh+*qPV9DH_x!1xZ6Kj zQ7;xXEMb`l8$upS*(y=OZAzCql8s;$_d{5tu&>YE@O|NR>Z9QS))_S3xiLStxlJI0 ziEK7m31fpHY@C#jxA%AV6lqe!Cbk$tM5=nuFqKH=`twnep5-(sqg8AxZ_H}GP_7;o zPV$)unVxBQju&M5=(){4iYk3Jd3W&@`YR17g+86lm(60{$W=>bv0@ghX0cc(GDJ#l z+pCKsOAY?))nB!v3WgO>v*;(HBk9}FIYcL&G$TE@d4ceE+5`|GsmwqaBP6x11L;vZ z0b^thV4QZ!Yl5@_suFO3^ztu6Kb&Lo0`Xjweck$jg-fi&9?~XpiAQ~k7=q+JLQBIm zK`#-oqMPZ$^yo&Y0y=g(Aw0g8xJ3Rc*!Ve~MA^4XJSCcQyo?6kclUkD85(;aM$nTK W{}jNFd_#bBg literal 0 HcmV?d00001 diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp index 6a7f76e..74586ee 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp @@ -17,10 +17,12 @@ - - + + + - + + @@ -75,7 +77,7 @@

- @@ -701,7 +703,7 @@ - + @@ -710,9 +712,9 @@ - - - + + +
@@ -728,10 +730,10 @@ } InitPage(); - var errorCode = document.getElementById("page-error-code"); + var code = document.getElementById("page-error-code"); var errorMessage = document.getElementById("page-error-message"); - if (errorCode && errorMessage) { - CallMessage(errorCode.textContent + ":error:" + errorMessage.textContent, 3000, 200, 300); + if (code && errorMessage) { + CallMessage(code.textContent + ":error:" + errorMessage.textContent, 3000, 200, 300); } }()); diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/error.jsp b/cygnus-onprem-app/build/WebContent/WEB-INF/app/error.jsp index 5d6c6b0..620760d 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/error.jsp +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/error.jsp @@ -10,9 +10,9 @@ - Cygnus 1.0 | <c:out value="${empty errorDetails.title ? 'Page unavailable' : errorDetails.title}" /> + Cygnus 1.0 | <c:out value="${empty messageDetails.title ? 'Page unavailable' : messageDetails.title}" /> - + <%@ include file="/WEB-INF/app/fragments/app-shell-header.jspf" %> @@ -25,20 +25,20 @@