From b3de3eec8c5ac3cfe1ae800d6e8a2d9b1bc710ad Mon Sep 17 00:00:00 2001
From: verboomp
Date: Wed, 21 Jan 2026 16:08:09 +0100
Subject: [PATCH] added frontend
---
.gitignore | 30 +-
Jenkinsfile | 4 +-
.../core/service/CustomerPictureService.java | 2 +-
.../core/utils/JwtTokenUtil.java | 4 +-
.../core/utils/LoginUtils.java | 4 +-
.../fotodocumentation/rest/LoginResource.java | 3 +-
...-foto-documentation-web-1.0.0-SNAPSHOT.war | Bin 26668304 -> 26668182 bytes
.../docker/standalone-fotodocumentation.xml | 2 +-
.../rest/CustomerResourceTest.java | 2 -
.../.claude/settings.local.json | 12 +
.../.gitignore | 45 +
.../.metadata | 30 +
.../.vscode/launch.json | 25 +
.../README.md | 16 +
.../analysis_options.yaml | 28 +
.../assets/theme/appainter_theme.json | 1113 +++++++++++++++++
.../devtools_options.yaml | 3 +
.../l10n.yaml | 3 +
.../lib/controller/base_controller.dart | 174 +++
.../lib/controller/login_controller.dart | 102 ++
.../lib/dto/base_dto.dart | 15 +
.../lib/dto/jwt_token_pair_dto.dart | 50 +
.../lib/l10n/app_de.arb | 75 ++
.../lib/l10n/app_localizations.dart | 217 ++++
.../lib/l10n/app_localizations_de.dart | 60 +
.../lib/main.dart | 49 +
.../lib/pages/customer/customer_widget.dart | 15 +
.../lib/pages/landing_page_widget.dart | 23 +
.../lib/pages/login/login_widget.dart | 154 +++
.../component/general_error_widget.dart | 55 +
.../component/general_submit_widget.dart | 32 +
.../component/page_header_widget.dart | 66 +
.../component/search_bar_card_widget.dart | 81 ++
.../ui_utils/component/text_input_widget.dart | 60 +
.../ui_utils/component/waiting_widget.dart | 26 +
.../pages/ui_utils/dialog/delete_dialog.dart | 173 +++
.../pages/ui_utils/dialog/dialog_result.dart | 11 +
.../pages/ui_utils/dialog/snackbar_utils.dart | 85 ++
.../lib/pages/ui_utils/general_style.dart | 36 +
.../pages/ui_utils/header_button_wrapper.dart | 89 ++
.../lib/pages/ui_utils/header_utils.dart | 75 ++
.../lib/pages/ui_utils/modern_app_bar.dart | 99 ++
.../lib/utils/date_time_utils.dart | 17 +
.../lib/utils/di_container.dart | 38 +
.../lib/utils/extensions.dart | 29 +
.../lib/utils/global_router.dart | 51 +
.../lib/utils/global_stack.dart | 16 +
.../lib/utils/http_client_factory_app.dart | 11 +
.../lib/utils/http_client_factory_stub.dart | 21 +
.../lib/utils/http_client_factory_web.dart | 14 +
.../lib/utils/http_client_interceptor.dart | 37 +
.../lib/utils/http_client_utils.dart | 20 +
.../lib/utils/jwt_token_storage.dart | 69 +
.../lib/utils/login_credentials.dart | 29 +
.../lib/utils/main_utils.dart | 33 +
.../lib/utils/password_utils.dart | 12 +
.../lib/utils/url_utils.dart | 15 +
hartmann-foto-documentation-frontend/pom.xml | 28 +
.../pubspec.yaml | 122 ++
.../test/testing/test_http_client_utils.dart | 12 +
.../test/testing/test_utils.dart | 67 +
.../test/testing/test_utils.mocks.dart | 542 ++++++++
.../test/utils/date_time_utils_test.dart | 101 ++
.../utils/http_client_interceptor_test.dart | 133 ++
.../test/utils/jwt_token_storage_test.dart | 182 +++
.../test/utils/url_utils_test.dart | 12 +
.../test_runner.dart | 132 ++
.../web/favicon.png | Bin 0 -> 917 bytes
.../web/icons/Icon-192.png | Bin 0 -> 5292 bytes
.../web/icons/Icon-512.png | Bin 0 -> 8252 bytes
.../web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes
.../web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes
.../web/index.html | 38 +
.../web/manifest.json | 35 +
74 files changed, 4938 insertions(+), 26 deletions(-)
create mode 100644 hartmann-foto-documentation-frontend/.claude/settings.local.json
create mode 100644 hartmann-foto-documentation-frontend/.gitignore
create mode 100644 hartmann-foto-documentation-frontend/.metadata
create mode 100644 hartmann-foto-documentation-frontend/.vscode/launch.json
create mode 100644 hartmann-foto-documentation-frontend/README.md
create mode 100644 hartmann-foto-documentation-frontend/analysis_options.yaml
create mode 100644 hartmann-foto-documentation-frontend/assets/theme/appainter_theme.json
create mode 100644 hartmann-foto-documentation-frontend/devtools_options.yaml
create mode 100644 hartmann-foto-documentation-frontend/l10n.yaml
create mode 100644 hartmann-foto-documentation-frontend/lib/controller/base_controller.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/controller/login_controller.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/dto/base_dto.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/dto/jwt_token_pair_dto.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/l10n/app_de.arb
create mode 100644 hartmann-foto-documentation-frontend/lib/l10n/app_localizations.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/l10n/app_localizations_de.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/main.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/customer/customer_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/landing_page_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/login/login_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_error_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/general_submit_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/page_header_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/search_bar_card_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/text_input_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/component/waiting_widget.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/delete_dialog.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/dialog_result.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/dialog/snackbar_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/general_style.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_button_wrapper.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/header_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/pages/ui_utils/modern_app_bar.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/date_time_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/di_container.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/extensions.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/global_router.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/global_stack.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/http_client_factory_app.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/http_client_factory_stub.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/http_client_factory_web.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/http_client_interceptor.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/http_client_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/jwt_token_storage.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/login_credentials.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/main_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/password_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/lib/utils/url_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/pom.xml
create mode 100644 hartmann-foto-documentation-frontend/pubspec.yaml
create mode 100644 hartmann-foto-documentation-frontend/test/testing/test_http_client_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/test/testing/test_utils.dart
create mode 100644 hartmann-foto-documentation-frontend/test/testing/test_utils.mocks.dart
create mode 100644 hartmann-foto-documentation-frontend/test/utils/date_time_utils_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/utils/http_client_interceptor_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/utils/jwt_token_storage_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test/utils/url_utils_test.dart
create mode 100644 hartmann-foto-documentation-frontend/test_runner.dart
create mode 100644 hartmann-foto-documentation-frontend/web/favicon.png
create mode 100644 hartmann-foto-documentation-frontend/web/icons/Icon-192.png
create mode 100644 hartmann-foto-documentation-frontend/web/icons/Icon-512.png
create mode 100644 hartmann-foto-documentation-frontend/web/icons/Icon-maskable-192.png
create mode 100644 hartmann-foto-documentation-frontend/web/icons/Icon-maskable-512.png
create mode 100644 hartmann-foto-documentation-frontend/web/index.html
create mode 100644 hartmann-foto-documentation-frontend/web/manifest.json
diff --git a/.gitignore b/.gitignore
index 4191783..38d1c78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,9 +42,9 @@ target/
*/.dart_tool
*/build
-skillmatrix-frontend/build
-skillmatrix-frontend/coverage/
-skillmatrix-frontend/pubspec.lock
+hartmann-foto-documentation-frontend/build
+hartmann-foto-documentation-frontend/coverage/
+hartmann-foto-documentation-frontend/pubspec.lock
# Avoid committing generated Javascript files:
*.dart.js
@@ -60,16 +60,16 @@ skillmatrix-frontend/pubspec.lock
-skillmatrix-docker/src/main/docker/skillmatrix-web-*.war
-skillmatrix-web/src/main/webapp/.last_build_id
-skillmatrix-web/src/main/webapp/assets/
-skillmatrix-web/src/main/webapp/canvaskit/
-skillmatrix-web/src/main/webapp/favicon.png
-skillmatrix-web/src/main/webapp/flutter.js
-skillmatrix-web/src/main/webapp/flutter_bootstrap.js
-skillmatrix-web/src/main/webapp/flutter_service_worker.js
-skillmatrix-web/src/main/webapp/icons/
-skillmatrix-web/src/main/webapp/index.html
-skillmatrix-web/src/main/webapp/manifest.json
-skillmatrix-web/src/main/webapp/version.json
+hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-*.war
+hartmann-foto-documentation-web/src/main/webapp/.last_build_id
+hartmann-foto-documentation-web/src/main/webapp/assets/
+hartmann-foto-documentation-web/src/main/webapp/canvaskit/
+hartmann-foto-documentation-web/src/main/webapp/favicon.png
+hartmann-foto-documentation-web/src/main/webapp/flutter.js
+hartmann-foto-documentation-web/src/main/webapp/flutter_bootstrap.js
+hartmann-foto-documentation-web/src/main/webapp/flutter_service_worker.js
+hartmann-foto-documentation-web/src/main/webapp/icons/
+hartmann-foto-documentation-web/src/main/webapp/index.html
+hartmann-foto-documentation-web/src/main/webapp/manifest.json
+hartmann-foto-documentation-web/src/main/webapp/version.json
diff --git a/Jenkinsfile b/Jenkinsfile
index b7f963a..66019c1 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -58,7 +58,7 @@ pipeline {
'''
}
}
-/*
+
stage ('Build Frontend') {
steps {
echo "running Frontend build for branch ${env.BRANCH_NAME}"
@@ -112,7 +112,7 @@ pipeline {
}
}
}
-*/
+
stage ('Build') {
steps {
echo "running build for branch ${env.BRANCH_NAME}"
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
index 5b19906..e1140bc 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/service/CustomerPictureService.java
@@ -43,6 +43,6 @@ public class CustomerPictureService extends AbstractService {
// FIXME: do query
List customers = queryService.callNamedQueryList(Customer.FIND_ALL);
customers.forEach(c -> c.getPictures().size());
- return customers.parallelStream().map(c -> CustomerListValue.builder(c)).toList();
+ return customers.parallelStream().map(CustomerListValue::builder).toList();
}
}
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/JwtTokenUtil.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/JwtTokenUtil.java
index 9256f87..bbc5c22 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/JwtTokenUtil.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/JwtTokenUtil.java
@@ -38,8 +38,8 @@ public class JwtTokenUtil {
private static final long REFRESH_TOKEN_VALIDITY = 30 * 24 * 60 * 60 * 1000L; // 30 days
private static final long TEMP_2FA_TOKEN_VALIDITY = 5 * 60 * 1000L; // 5 minutes
- private static final String ISSUER = "skillmatrix-jwt-issuer";
- private static final String AUDIENCE = "skillmatrix-api";
+ private static final String ISSUER = "foto-jwt-issuer";
+ private static final String AUDIENCE = "foto-api";
private PrivateKey privateKey;
private PublicKey publicKey;
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java
index bf73385..34efbef 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java
@@ -43,13 +43,13 @@ public class LoginUtils {
private Optional authenticate(String username, String password) {
try {
- LOG.error("Login with username: " + username + " password: " + password);
+ LOG.debug("Login with username & password " + username);
Principal principal = new NamePrincipal(username);
PasswordGuessEvidence evidence = new PasswordGuessEvidence(password.toCharArray());
SecurityDomain sd = SecurityDomain.getCurrent();
SecurityIdentity identity = sd.authenticate(principal, evidence);
- LOG.error("Login identity: " + identity);
+ LOG.debug("Login identity: " + identity);
return Optional.ofNullable(identity);
} catch (RealmUnavailableException | SecurityException e) {
LOG.warn("Failed to authenticate user " + e.getMessage(), e);
diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
index e456f28..ac8b009 100644
--- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
+++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/LoginResource.java
@@ -22,6 +22,7 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
import marketing.heyday.hartmann.fotodocumentation.core.service.LoginService;
import marketing.heyday.hartmann.fotodocumentation.core.utils.LoginUtils;
import marketing.heyday.hartmann.fotodocumentation.rest.vo.TokenPairValue;
@@ -58,7 +59,7 @@ public class LoginResource {
Optional identity = loginUtils.authenticate(httpServletRequest);
if (identity.isEmpty()) {
LOG.debug("identity empty login invalid");
- return Response.status(401).build();
+ return Response.status(Status.UNAUTHORIZED).build();
}
String username = identity.get().getPrincipal().getName();
diff --git a/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war b/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war
index 267279ba237ba3001c62a9d108b67ef04e7361e1..9f17fc9d705d7566f312507301b19e2847ccae30 100644
GIT binary patch
delta 53873
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