From e01afb9a105a9140bcab2aeb05e37d1a90d5b420 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Fri, 13 Mar 2026 19:20:54 +0100 Subject: [PATCH] Add report templates and unify template storage --- .../muh/domain/ReportTemplate.java | 16 + .../svencarstensen/muh/domain/Template.java | 20 + .../muh/domain/TemplateType.java | 6 + .../repository/ReportTemplateRepository.java | 7 + .../muh/repository/TemplateRepository.java | 12 + .../muh/service/InvoiceTemplateService.java | 45 +- .../muh/service/ReportTemplateService.java | 189 +++++++ .../muh/web/SessionController.java | 23 +- frontend/src/App.tsx | 2 + frontend/src/layout/AppShell.tsx | 17 +- frontend/src/pages/InvoiceTemplatePage.tsx | 515 ++++++++++++++++-- frontend/src/pages/ReportTemplatePage.tsx | 21 + frontend/src/styles/global.css | 17 + 13 files changed, 833 insertions(+), 57 deletions(-) create mode 100644 backend/src/main/java/de/svencarstensen/muh/domain/ReportTemplate.java create mode 100644 backend/src/main/java/de/svencarstensen/muh/domain/Template.java create mode 100644 backend/src/main/java/de/svencarstensen/muh/domain/TemplateType.java create mode 100644 backend/src/main/java/de/svencarstensen/muh/repository/ReportTemplateRepository.java create mode 100644 backend/src/main/java/de/svencarstensen/muh/repository/TemplateRepository.java create mode 100644 backend/src/main/java/de/svencarstensen/muh/service/ReportTemplateService.java create mode 100644 frontend/src/pages/ReportTemplatePage.tsx diff --git a/backend/src/main/java/de/svencarstensen/muh/domain/ReportTemplate.java b/backend/src/main/java/de/svencarstensen/muh/domain/ReportTemplate.java new file mode 100644 index 0000000..2d9743b --- /dev/null +++ b/backend/src/main/java/de/svencarstensen/muh/domain/ReportTemplate.java @@ -0,0 +1,16 @@ +package de.svencarstensen.muh.domain; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDateTime; +import java.util.List; + +@Document("reportTemplates") +public record ReportTemplate( + @Id String userId, + List elements, + LocalDateTime createdAt, + LocalDateTime updatedAt +) { +} diff --git a/backend/src/main/java/de/svencarstensen/muh/domain/Template.java b/backend/src/main/java/de/svencarstensen/muh/domain/Template.java new file mode 100644 index 0000000..e28b0ca --- /dev/null +++ b/backend/src/main/java/de/svencarstensen/muh/domain/Template.java @@ -0,0 +1,20 @@ +package de.svencarstensen.muh.domain; + +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.index.CompoundIndex; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDateTime; +import java.util.List; + +@Document("templates") +@CompoundIndex(name = "user_template_type_unique", def = "{'userId': 1, 'type': 1}", unique = true) +public record Template( + @Id String id, + String userId, + TemplateType type, + List elements, + LocalDateTime createdAt, + LocalDateTime updatedAt +) { +} diff --git a/backend/src/main/java/de/svencarstensen/muh/domain/TemplateType.java b/backend/src/main/java/de/svencarstensen/muh/domain/TemplateType.java new file mode 100644 index 0000000..afe989f --- /dev/null +++ b/backend/src/main/java/de/svencarstensen/muh/domain/TemplateType.java @@ -0,0 +1,6 @@ +package de.svencarstensen.muh.domain; + +public enum TemplateType { + INVOICE, + REPORT +} diff --git a/backend/src/main/java/de/svencarstensen/muh/repository/ReportTemplateRepository.java b/backend/src/main/java/de/svencarstensen/muh/repository/ReportTemplateRepository.java new file mode 100644 index 0000000..4e1b5f5 --- /dev/null +++ b/backend/src/main/java/de/svencarstensen/muh/repository/ReportTemplateRepository.java @@ -0,0 +1,7 @@ +package de.svencarstensen.muh.repository; + +import de.svencarstensen.muh.domain.ReportTemplate; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface ReportTemplateRepository extends MongoRepository { +} diff --git a/backend/src/main/java/de/svencarstensen/muh/repository/TemplateRepository.java b/backend/src/main/java/de/svencarstensen/muh/repository/TemplateRepository.java new file mode 100644 index 0000000..c6f28c9 --- /dev/null +++ b/backend/src/main/java/de/svencarstensen/muh/repository/TemplateRepository.java @@ -0,0 +1,12 @@ +package de.svencarstensen.muh.repository; + +import de.svencarstensen.muh.domain.Template; +import de.svencarstensen.muh.domain.TemplateType; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.Optional; + +public interface TemplateRepository extends MongoRepository { + + Optional