diff --git a/pom.xml b/pom.xml
index 380bec9..e1c3f1f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,18 +47,6 @@
vaadin-spring-boot-starter
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
-
- com.h2database
- h2
- runtime
-
-
org.springframework.boot
@@ -74,17 +62,16 @@
true
-
org.springframework.boot
- spring-boot-starter-test
- test
+ spring-boot-starter-data-mongodb
+
- com.tngtech.archunit
- archunit-junit5
- ${archunit.version}
- test
+ org.projectlombok
+ lombok
+ 1.18.30
+ provided
diff --git a/src/main/java/de/assecutor/votianlt/base/domain/AbstractEntity.java b/src/main/java/de/assecutor/votianlt/base/domain/AbstractEntity.java
deleted file mode 100644
index b0a453b..0000000
--- a/src/main/java/de/assecutor/votianlt/base/domain/AbstractEntity.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package de.assecutor.votianlt.base.domain;
-
-import jakarta.persistence.MappedSuperclass;
-import org.jspecify.annotations.Nullable;
-import org.springframework.data.util.ProxyUtils;
-
-@MappedSuperclass
-public abstract class AbstractEntity {
-
- public abstract @Nullable ID getId();
-
- @Override
- public String toString() {
- return "%s{id=%s}".formatted(getClass().getSimpleName(), getId());
- }
-
- @Override
- public int hashCode() {
- // Hashcode should never change during the lifetime of an object. Because of
- // this we can't use getId() to calculate the hashcode. Unless you have sets
- // with lots of entities in them, returning the same hashcode should not be a
- // problem.
- return ProxyUtils.getUserClass(getClass()).hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- } else if (obj == this) {
- return true;
- }
-
- var thisUserClass = ProxyUtils.getUserClass(getClass());
- var otherUserClass = ProxyUtils.getUserClass(obj);
- if (thisUserClass != otherUserClass) {
- return false;
- }
-
- var id = getId();
- return id != null && id.equals(((AbstractEntity>) obj).getId());
- }
-
-}
diff --git a/src/main/java/de/assecutor/votianlt/base/domain/package-info.java b/src/main/java/de/assecutor/votianlt/base/domain/package-info.java
deleted file mode 100644
index 8379d70..0000000
--- a/src/main/java/de/assecutor/votianlt/base/domain/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.base.domain;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/base/ui/component/package-info.java b/src/main/java/de/assecutor/votianlt/base/ui/component/package-info.java
deleted file mode 100644
index 177dab5..0000000
--- a/src/main/java/de/assecutor/votianlt/base/ui/component/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.base.ui.component;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/base/ui/view/package-info.java b/src/main/java/de/assecutor/votianlt/base/ui/view/package-info.java
deleted file mode 100644
index 99dd59b..0000000
--- a/src/main/java/de/assecutor/votianlt/base/ui/view/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.base.ui.view;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/model/address.java b/src/main/java/de/assecutor/votianlt/model/address.java
new file mode 100644
index 0000000..ed0e8d2
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/address.java
@@ -0,0 +1,12 @@
+package de.assecutor.votianlt.model;
+
+public class address {
+ public int ad_id;
+ public String ad_street;
+ public String ad_add;
+ public String ad_zipcode;
+ public String ad_city;
+ public String ad_country;
+ public String ad_lat;
+ public String ad_lng;
+}
diff --git a/src/main/java/de/assecutor/votianlt/model/address_book.java b/src/main/java/de/assecutor/votianlt/model/address_book.java
new file mode 100644
index 0000000..5b26958
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/address_book.java
@@ -0,0 +1,13 @@
+package de.assecutor.votianlt.model;
+
+public class address_book {
+ public int adb_id;
+ public int usr_id;
+ public int ad_b_ad_id;
+ public String deliverHsno;
+ public String deliverCompany;
+ public String deliverTitle;
+ public String deliverFirstname;
+ public String deliverLastname;
+ public String deliverPhone;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/address_book_addresses.java b/src/main/java/de/assecutor/votianlt/model/address_book_addresses.java
new file mode 100644
index 0000000..528136a
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/address_book_addresses.java
@@ -0,0 +1,9 @@
+package de.assecutor.votianlt.model;
+
+public class address_book_addresses
+{
+ public int ad_b_ad_id;
+ public String deliverStreet;
+ public String deliverPlz;
+ public String deliverCity;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/company.java b/src/main/java/de/assecutor/votianlt/model/company.java
new file mode 100644
index 0000000..c17099d
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/company.java
@@ -0,0 +1,17 @@
+package de.assecutor.votianlt.model;
+
+public class company
+{
+ public int cmp_id;
+ public String cmp_comp;
+ public String cmp_comp2;
+ public String cmp_hsno;
+ public String cmp_Ustid;
+ public String cmp_Taxid;
+ public String cmp_Iban;
+ public String cmp_homepage;
+ public String votian_cmp_id;
+ public String votian_ad_id;
+ public String votian_tx_id;
+ public String votian_br_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/contractor.java b/src/main/java/de/assecutor/votianlt/model/contractor.java
new file mode 100644
index 0000000..a62dde5
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/contractor.java
@@ -0,0 +1,11 @@
+package de.assecutor.votianlt.model;
+
+public class contractor
+{
+ public int cr_id;
+ public int cmp_id;
+ public int usr_id;
+ public String votian_cr_id;
+ public String votian_cr_eid;
+ public String votian_hq_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/contractor_relation.java b/src/main/java/de/assecutor/votianlt/model/contractor_relation.java
new file mode 100644
index 0000000..c389a27
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/contractor_relation.java
@@ -0,0 +1,9 @@
+package de.assecutor.votianlt.model;
+
+public class contractor_relation
+{
+ public int cr_r_id;
+ public int usr_id;
+ public int cr_id;
+ public String cr_filter_json;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/costcenter.java b/src/main/java/de/assecutor/votianlt/model/costcenter.java
new file mode 100644
index 0000000..c9044d6
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/costcenter.java
@@ -0,0 +1,12 @@
+package de.assecutor.votianlt.model;
+
+public class costcenter
+{
+ public int cs_id;
+ public int csc_id;
+ public String csc_comp;
+ public String csc_comp2;
+ public String csc_hsno;
+ public String csc_usr_name;
+ public String csc_usr_firstname;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/costcenter_address.java b/src/main/java/de/assecutor/votianlt/model/costcenter_address.java
new file mode 100644
index 0000000..cd94abd
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/costcenter_address.java
@@ -0,0 +1,8 @@
+package de.assecutor.votianlt.model;
+
+public class costcenter_address
+{
+ public int csc_id;
+ public int ad_id;
+ public int adt_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/country.java b/src/main/java/de/assecutor/votianlt/model/country.java
new file mode 100644
index 0000000..c8b0e6f
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/country.java
@@ -0,0 +1,11 @@
+package de.assecutor.votianlt.model;
+
+public class country
+{
+ public String cou_iso_3;
+ public String cou_iso_no;
+ public String cou_mnemonic;
+ public String cou_name;
+ public String cou_iso_2;
+ public byte cou_continent;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/customer.java b/src/main/java/de/assecutor/votianlt/model/customer.java
new file mode 100644
index 0000000..74822ca
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/customer.java
@@ -0,0 +1,15 @@
+package de.assecutor.votianlt.model;
+
+public class customer
+{
+ public int cs_id;
+ public int cmp_id;
+ public int csc_id;
+ public int emp_id;
+ public String votian_cs_id;
+ public String votian_cs_eid;
+ public String votian_cs_admin;
+ public String votian_hq_id;
+ public String votian_cs_id_parent;
+ public String votian_cs_id_related;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/customer_relation.java b/src/main/java/de/assecutor/votianlt/model/customer_relation.java
new file mode 100644
index 0000000..fd4070f
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/customer_relation.java
@@ -0,0 +1,8 @@
+package de.assecutor.votianlt.model;
+
+public class customer_relation
+{
+ public int cs_r_id;
+ public int usr_id;
+ public int cr_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/device.java b/src/main/java/de/assecutor/votianlt/model/device.java
new file mode 100644
index 0000000..f2634c0
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/device.java
@@ -0,0 +1,15 @@
+package de.assecutor.votianlt.model;
+
+public class device
+{
+ public int d_id;
+ public int usr_id;
+ public int d_details;
+ public String d_name;
+ public int votian_dv_id;
+ public String device_name;
+ public String uuid;
+ public String code;
+ public int cust_id;
+ public int cust_acc_group;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/devices_invoice.java b/src/main/java/de/assecutor/votianlt/model/devices_invoice.java
new file mode 100644
index 0000000..c20b94a
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/devices_invoice.java
@@ -0,0 +1,11 @@
+package de.assecutor.votianlt.model;
+
+public class devices_invoice
+{
+ public int d_i_id;
+ public String d_i_create;
+ public String d_i_delete;
+ public int d_id;
+ public int vlt_i_id;
+ public int usr_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/employee.java b/src/main/java/de/assecutor/votianlt/model/employee.java
new file mode 100644
index 0000000..297f762
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/employee.java
@@ -0,0 +1,7 @@
+package de.assecutor.votianlt.model;
+
+public class employee
+{
+ public int emp_id;
+ public int usr_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/filter.java b/src/main/java/de/assecutor/votianlt/model/filter.java
new file mode 100644
index 0000000..33124fb
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/filter.java
@@ -0,0 +1,9 @@
+package de.assecutor.votianlt.model;
+
+public class filter
+{
+ public int f_id;
+ public int f_type;
+ public String f_short;
+ public String f_status;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/help.java b/src/main/java/de/assecutor/votianlt/model/help.java
new file mode 100644
index 0000000..0da9e4c
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/help.java
@@ -0,0 +1,7 @@
+package de.assecutor.votianlt.model;
+
+public class help
+{
+ public int h_id;
+ public String h_language;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/invoice.java b/src/main/java/de/assecutor/votianlt/model/invoice.java
new file mode 100644
index 0000000..6626976
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/invoice.java
@@ -0,0 +1,12 @@
+package de.assecutor.votianlt.model;
+
+public class invoice
+{
+ public int i_id;
+ public int usr_id;
+ public int cr_id;
+ public String i_export_time;
+ public int i_create_date;
+ public String invoiceNumber;
+ public String fileName;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/invoice_credit.java b/src/main/java/de/assecutor/votianlt/model/invoice_credit.java
new file mode 100644
index 0000000..87e6190
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/invoice_credit.java
@@ -0,0 +1,13 @@
+package de.assecutor.votianlt.model;
+
+public class invoice_credit
+{
+ public int i_c_id;
+ public String i_c_date;
+ public int usr_id;
+ public double i_c_amount;
+ public String purpose;
+ public String iban;
+ public String currency;
+ public double diff;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/job.java b/src/main/java/de/assecutor/votianlt/model/job.java
new file mode 100644
index 0000000..0fbedf0
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/job.java
@@ -0,0 +1,27 @@
+package de.assecutor.votianlt.model;
+
+public class job
+{
+ public int jb_id;
+ public int cs_id;
+ public int cr_id;
+ public int jb_votian_id;
+ public java.sql.Date jb_ordertime;
+ public int jb_status;
+ public int jb_type;
+ public int jb_invoice_data;
+ public String useApp;
+ public String customerID;
+ public String datepickerPickup;
+ public String timepickerPickup;
+ public String datepickerDel;
+ public String timepickerDel;
+ public String remark;
+ public String price;
+ public String submit;
+ public String appUserID;
+ public String cargo_type;
+ public String cargo_weight;
+ public String cargo_volume;
+ public String jobdetail_instruction;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/log.java b/src/main/java/de/assecutor/votianlt/model/log.java
new file mode 100644
index 0000000..860d1c4
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/log.java
@@ -0,0 +1,16 @@
+package de.assecutor.votianlt.model;
+
+public class log
+{
+ public int logo_id;
+ public String log_createtime;
+ public int hq_id;
+ public int jb_id;
+ public int usr_id;
+ public int cr_id;
+ public int cr_sid;
+ public int cs_id;
+ public int at_id;
+ public int pt_id;
+ public int emp_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/log_invoice.java b/src/main/java/de/assecutor/votianlt/model/log_invoice.java
new file mode 100644
index 0000000..2ad0ef6
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/log_invoice.java
@@ -0,0 +1,10 @@
+package de.assecutor.votianlt.model;
+
+public class log_invoice
+{
+ public int l_i_id;
+ public int i_id;
+ public String i_date;
+ public int i_export_time_1;
+ public String i_export_time_2;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/notification.java b/src/main/java/de/assecutor/votianlt/model/notification.java
new file mode 100644
index 0000000..1301f9a
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/notification.java
@@ -0,0 +1,10 @@
+package de.assecutor.votianlt.model;
+
+public class notification
+{
+ public int n_id;
+ public String n_date;
+ public int n_info_id;
+ public int usr_id;
+ public byte n_new;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/notification_info.java b/src/main/java/de/assecutor/votianlt/model/notification_info.java
new file mode 100644
index 0000000..ddbb33c
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/notification_info.java
@@ -0,0 +1,6 @@
+package de.assecutor.votianlt.model;
+
+public class notification_info
+{
+ public int n_i_id;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/offer.java b/src/main/java/de/assecutor/votianlt/model/offer.java
new file mode 100644
index 0000000..45daa2b
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/offer.java
@@ -0,0 +1,12 @@
+package de.assecutor.votianlt.model;
+
+public class offer
+{
+ public int o_id;
+ public int jb_id;
+ public int usr_id;
+ public int cr_id;
+ public java.sql.Date offer_time;
+ public String price;
+ public String remark;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/parameter.java b/src/main/java/de/assecutor/votianlt/model/parameter.java
new file mode 100644
index 0000000..88c5ec2
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/parameter.java
@@ -0,0 +1,11 @@
+package de.assecutor.votianlt.model;
+
+public class parameter
+{
+ public int par_id;
+ public String par_key;
+ public int md_id;
+ public int hq_id;
+ public int emp_id;
+ public String par_value;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/price_table.java b/src/main/java/de/assecutor/votianlt/model/price_table.java
new file mode 100644
index 0000000..44d8278
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/price_table.java
@@ -0,0 +1,7 @@
+package de.assecutor.votianlt.model;
+
+public class price_table
+{
+ public int pt_id;
+ public double pt_price;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/station.java b/src/main/java/de/assecutor/votianlt/model/station.java
new file mode 100644
index 0000000..abef876
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/station.java
@@ -0,0 +1,16 @@
+package de.assecutor.votianlt.model;
+
+public class station
+{
+ public int station_id;
+ public int jb_id;
+ public String station_type;
+ public int ad_id;
+ public int station_order;
+ public String station_name;
+ public String station_contact;
+ public String station_phone;
+ public java.sql.Date station_arrival_est;
+ public java.sql.Date station_departure_est;
+ public String instructions;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/transportorder.java b/src/main/java/de/assecutor/votianlt/model/transportorder.java
new file mode 100644
index 0000000..7878e05
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/transportorder.java
@@ -0,0 +1,16 @@
+package de.assecutor.votianlt.model;
+
+public class transportorder
+{
+ public int tr_id;
+ public int jb_id;
+ public int usr_id;
+ public String tr_comment;
+ public String tr_state;
+ public String tr_driver_lat;
+ public String tr_driver_lng;
+ public String tr_driver_accuracy;
+ public String tr_driver_last_update;
+ public String tr_created;
+ public String tr_updated;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/two_way.java b/src/main/java/de/assecutor/votianlt/model/two_way.java
new file mode 100644
index 0000000..30d8c7a
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/two_way.java
@@ -0,0 +1,8 @@
+package de.assecutor.votianlt.model;
+
+public class two_way
+{
+ public int t_w_id;
+ public int usr_id;
+ public String t_w_secret;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/user.java b/src/main/java/de/assecutor/votianlt/model/user.java
new file mode 100644
index 0000000..a8695b3
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/user.java
@@ -0,0 +1,38 @@
+package de.assecutor.votianlt.model;
+
+public class user
+{
+ public int usr_id;
+ public int hq_id;
+ public short usr_type;
+ public String usr_title;
+ public String usr_name;
+ public String usr_firstname;
+ public java.sql.Date usr_birthdate;
+ public int ad_id;
+ public String usr_hsno;
+ public String usr_email;
+ public String usr_inv_email;
+ public String usr_phone;
+ public String usr_phone2;
+ public String usr_fax;
+ public String usr_account;
+ public String usr_password;
+ public String usr_modify;
+ public byte usr_is_activated;
+ public String usr_activation_code;
+ public byte usr_is_email_confirmed;
+ public String usr_code;
+ public int usr_code_timestamp;
+ public byte usr_is_password_lost;
+ public String usr_password_code;
+ public int usr_password_timestamp;
+ public byte usr_app;
+ public String votian_usr_id;
+ public String auth_customer;
+ public String auth_account;
+ public String auth_password;
+ public String auth_session_id;
+ public long activationDate;
+ public double balance;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/vehicle.java b/src/main/java/de/assecutor/votianlt/model/vehicle.java
new file mode 100644
index 0000000..1e0cc0d
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/vehicle.java
@@ -0,0 +1,18 @@
+package de.assecutor.votianlt.model;
+
+public class vehicle
+{
+ public int vh_id;
+ public int usr_parent_id;
+ public int cr_id;
+ public int vh_details;
+ public int d_id;
+ public String title;
+ public String code;
+ public String votian_vht_id;
+ public String votian_vht_id_inv;
+ public String votian_cr_ar_jb_id;
+ public String votian_crvh_id;
+ public String votian_cr_id;
+ public String votian_crvh_sid;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/model/vlt_invoice.java b/src/main/java/de/assecutor/votianlt/model/vlt_invoice.java
new file mode 100644
index 0000000..3029c0e
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/model/vlt_invoice.java
@@ -0,0 +1,21 @@
+package de.assecutor.votianlt.model;
+
+public class vlt_invoice
+{
+ public int vlt_i_id;
+ public int usr_id;
+ public String vlt_i_price;
+ public String vlt_i_date;
+ public int vlt_i_status;
+ public String vlt_i_html;
+ public String totalPriceNet;
+ public String totalPrice;
+ public String payedDays;
+ public String daysInMonth;
+ public String devicePrice;
+ public String basePrice;
+ public String systemVat;
+ public String basePricePayed;
+ public String vatPrice;
+ public String invoiceNumber;
+}
\ No newline at end of file
diff --git a/src/main/java/de/assecutor/votianlt/base/ui/component/ViewToolbar.java b/src/main/java/de/assecutor/votianlt/pages/base/ui/component/ViewToolbar.java
similarity index 96%
rename from src/main/java/de/assecutor/votianlt/base/ui/component/ViewToolbar.java
rename to src/main/java/de/assecutor/votianlt/pages/base/ui/component/ViewToolbar.java
index aaeeee1..b703bc0 100644
--- a/src/main/java/de/assecutor/votianlt/base/ui/component/ViewToolbar.java
+++ b/src/main/java/de/assecutor/votianlt/pages/base/ui/component/ViewToolbar.java
@@ -1,4 +1,4 @@
-package de.assecutor.votianlt.base.ui.component;
+package de.assecutor.votianlt.pages.base.ui.component;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.Composite;
diff --git a/src/main/java/de/assecutor/votianlt/base/ui/view/MainErrorHandler.java b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainErrorHandler.java
similarity index 96%
rename from src/main/java/de/assecutor/votianlt/base/ui/view/MainErrorHandler.java
rename to src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainErrorHandler.java
index 26e59e0..b9fc356 100644
--- a/src/main/java/de/assecutor/votianlt/base/ui/view/MainErrorHandler.java
+++ b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainErrorHandler.java
@@ -1,4 +1,4 @@
-package de.assecutor.votianlt.base.ui.view;
+package de.assecutor.votianlt.pages.base.ui.view;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.notification.Notification;
diff --git a/src/main/java/de/assecutor/votianlt/base/ui/view/MainLayout.java b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java
similarity index 95%
rename from src/main/java/de/assecutor/votianlt/base/ui/view/MainLayout.java
rename to src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java
index dbde6cf..01331af 100644
--- a/src/main/java/de/assecutor/votianlt/base/ui/view/MainLayout.java
+++ b/src/main/java/de/assecutor/votianlt/pages/base/ui/view/MainLayout.java
@@ -1,4 +1,4 @@
-package de.assecutor.votianlt.base.ui.view;
+package de.assecutor.votianlt.pages.base.ui.view;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.applayout.AppLayout;
@@ -25,6 +25,8 @@ public final class MainLayout extends AppLayout {
public MainLayout() {
setPrimarySection(Section.DRAWER);
addToDrawer(createHeader(), new Scroller(createSideNav()), createUserMenu());
+
+ //setDrawerOpened(false);
}
private Div createHeader() {
@@ -32,7 +34,7 @@ public final class MainLayout extends AppLayout {
var appLogo = VaadinIcon.CUBES.create();
appLogo.addClassNames(TextColor.PRIMARY, IconSize.LARGE);
- var appName = new Span("Votianlt");
+ var appName = new Span("VotianLT");
appName.addClassNames(FontWeight.SEMIBOLD, FontSize.LARGE);
var header = new Div(appLogo, appName);
diff --git a/src/main/java/de/assecutor/votianlt/pages/customers/domain/Customer.java b/src/main/java/de/assecutor/votianlt/pages/customers/domain/Customer.java
new file mode 100644
index 0000000..beb8a5d
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/customers/domain/Customer.java
@@ -0,0 +1,19 @@
+package de.assecutor.votianlt.pages.customers.domain;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.Instant;
+import java.time.LocalDate;
+
+@Document(collection = "customer")
+@Data
+public class Customer {
+ private Long id;
+
+ private String description;
+
+ private Instant creationDate;
+
+ private LocalDate dueDate;
+}
diff --git a/src/main/java/de/assecutor/votianlt/pages/customers/domain/CustomerRepository.java b/src/main/java/de/assecutor/votianlt/pages/customers/domain/CustomerRepository.java
new file mode 100644
index 0000000..cb8b8da
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/customers/domain/CustomerRepository.java
@@ -0,0 +1,11 @@
+package de.assecutor.votianlt.pages.customers.domain;
+
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface CustomerRepository extends MongoRepository {
+
+ // If you don't need a total row count, Slice is better than Page.
+ Slice findAllBy(Pageable pageable);
+}
diff --git a/src/main/java/de/assecutor/votianlt/todo/service/TodoService.java b/src/main/java/de/assecutor/votianlt/pages/customers/service/CustomerService.java
similarity index 66%
rename from src/main/java/de/assecutor/votianlt/todo/service/TodoService.java
rename to src/main/java/de/assecutor/votianlt/pages/customers/service/CustomerService.java
index 374177d..1d95802 100644
--- a/src/main/java/de/assecutor/votianlt/todo/service/TodoService.java
+++ b/src/main/java/de/assecutor/votianlt/pages/customers/service/CustomerService.java
@@ -1,7 +1,7 @@
-package de.assecutor.votianlt.todo.service;
+package de.assecutor.votianlt.pages.customers.service;
-import de.assecutor.votianlt.todo.domain.Todo;
-import de.assecutor.votianlt.todo.domain.TodoRepository;
+import de.assecutor.votianlt.pages.customers.domain.Customer;
+import de.assecutor.votianlt.pages.customers.domain.CustomerRepository;
import org.jspecify.annotations.Nullable;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@@ -14,13 +14,13 @@ import java.util.List;
@Service
@Transactional(propagation = Propagation.REQUIRES_NEW)
-public class TodoService {
+public class CustomerService {
- private final TodoRepository todoRepository;
+ private final CustomerRepository todoRepository;
private final Clock clock;
- TodoService(TodoRepository todoRepository, Clock clock) {
+ CustomerService(CustomerRepository todoRepository, Clock clock) {
this.todoRepository = todoRepository;
this.clock = clock;
}
@@ -29,14 +29,14 @@ public class TodoService {
if ("fail".equals(description)) {
throw new RuntimeException("This is for testing the error handler");
}
- var todo = new Todo();
+ var todo = new Customer();
todo.setDescription(description);
todo.setCreationDate(clock.instant());
todo.setDueDate(dueDate);
- todoRepository.saveAndFlush(todo);
+ todoRepository.save(todo);
}
- public List list(Pageable pageable) {
+ public List list(Pageable pageable) {
return todoRepository.findAllBy(pageable).toList();
}
diff --git a/src/main/java/de/assecutor/votianlt/todo/ui/view/TodoView.java b/src/main/java/de/assecutor/votianlt/pages/customers/ui/view/CustomersView.java
similarity index 80%
rename from src/main/java/de/assecutor/votianlt/todo/ui/view/TodoView.java
rename to src/main/java/de/assecutor/votianlt/pages/customers/ui/view/CustomersView.java
index 55856ce..e38baf1 100644
--- a/src/main/java/de/assecutor/votianlt/todo/ui/view/TodoView.java
+++ b/src/main/java/de/assecutor/votianlt/pages/customers/ui/view/CustomersView.java
@@ -1,8 +1,5 @@
-package de.assecutor.votianlt.todo.ui.view;
+package de.assecutor.votianlt.pages.customers.ui.view;
-import de.assecutor.votianlt.base.ui.component.ViewToolbar;
-import de.assecutor.votianlt.todo.domain.Todo;
-import de.assecutor.votianlt.todo.service.TodoService;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.datepicker.DatePicker;
@@ -15,6 +12,9 @@ import com.vaadin.flow.router.Menu;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.theme.lumo.LumoUtility;
+import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
+import de.assecutor.votianlt.pages.customers.domain.Customer;
+import de.assecutor.votianlt.pages.customers.service.CustomerService;
import java.time.Clock;
import java.time.format.DateTimeFormatter;
@@ -23,25 +23,25 @@ import java.util.Optional;
import static com.vaadin.flow.spring.data.VaadinSpringDataHelpers.toSpringPageRequest;
-@Route("")
-@PageTitle("Task List")
-@Menu(order = 0, icon = "vaadin:clipboard-check", title = "Task List")
-public class TodoView extends Main {
+@Route("customer")
+@PageTitle("Kunden")
+@Menu(order = 0, icon = "vaadin:clipboard-check", title = "Kunden")
+public class CustomersView extends Main {
- private final TodoService todoService;
+ private final CustomerService todoService;
final TextField description;
final DatePicker dueDate;
final Button createBtn;
- final Grid todoGrid;
+ final Grid todoGrid;
- public TodoView(TodoService todoService, Clock clock) {
+ public CustomersView(CustomerService todoService, Clock clock) {
this.todoService = todoService;
description = new TextField();
description.setPlaceholder("What do you want to do?");
description.setAriaLabel("Task description");
- description.setMaxLength(Todo.DESCRIPTION_MAX_LENGTH);
+ description.setMaxLength(255);
description.setMinWidth("20em");
dueDate = new DatePicker();
@@ -57,7 +57,7 @@ public class TodoView extends Main {
todoGrid = new Grid<>();
todoGrid.setItems(query -> todoService.list(toSpringPageRequest(query)).stream());
- todoGrid.addColumn(Todo::getDescription).setHeader("Description");
+ todoGrid.addColumn(Customer::getDescription).setHeader("Description");
todoGrid.addColumn(todo -> Optional.ofNullable(todo.getDueDate()).map(dateFormatter::format).orElse("Never"))
.setHeader("Due Date");
todoGrid.addColumn(todo -> dateTimeFormatter.format(todo.getCreationDate())).setHeader("Creation Date");
diff --git a/src/main/java/de/assecutor/votianlt/pages/register/domain/Order.java b/src/main/java/de/assecutor/votianlt/pages/register/domain/Order.java
new file mode 100644
index 0000000..69f35fb
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/register/domain/Order.java
@@ -0,0 +1,21 @@
+package de.assecutor.votianlt.pages.register.domain;
+
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.jspecify.annotations.Nullable;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.Instant;
+import java.time.LocalDate;
+
+@Document(collection = "colors")
+@Data
+public class Order {
+ private Long id;
+
+ private String description;
+
+ private Instant creationDate;
+
+ private LocalDate dueDate;
+}
diff --git a/src/main/java/de/assecutor/votianlt/pages/register/domain/RegisterRepository.java b/src/main/java/de/assecutor/votianlt/pages/register/domain/RegisterRepository.java
new file mode 100644
index 0000000..24c7e92
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/register/domain/RegisterRepository.java
@@ -0,0 +1,12 @@
+package de.assecutor.votianlt.pages.register.domain;
+
+import de.assecutor.votianlt.pages.customers.domain.Customer;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+public interface RegisterRepository extends MongoRepository {
+
+ // If you don't need a total row count, Slice is better than Page.
+ Slice findAllBy(Pageable pageable);
+}
diff --git a/src/main/java/de/assecutor/votianlt/pages/register/service/RegisterService.java b/src/main/java/de/assecutor/votianlt/pages/register/service/RegisterService.java
new file mode 100644
index 0000000..816d35f
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/register/service/RegisterService.java
@@ -0,0 +1,37 @@
+package de.assecutor.votianlt.pages.register.service;
+
+import de.assecutor.votianlt.pages.register.domain.RegisterRepository;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.Clock;
+import java.util.List;
+
+@Service
+@Transactional(propagation = Propagation.REQUIRES_NEW)
+public class RegisterService {
+
+ private final RegisterRepository registerRepository;
+
+ private final Clock clock;
+
+ RegisterService(RegisterRepository registerRepository, Clock clock) {
+ this.registerRepository = registerRepository;
+ this.clock = clock;
+ }
+
+ public void registerUser(String mail, String password) {
+ /*if ("fail".equals(description)) {
+ throw new RuntimeException("This is for testing the error handler");
+ }
+ var todo = new Todo();
+ todo.setDescription(description);
+ todo.setCreationDate(clock.instant());
+ todo.setDueDate(dueDate);
+ todoRepository.saveAndFlush(todo);*/
+ }
+
+ //public List list(Pageable pageable) { return todoRepository.findAllBy(pageable).toList();
+}
diff --git a/src/main/java/de/assecutor/votianlt/pages/register/ui/view/RegisterView.java b/src/main/java/de/assecutor/votianlt/pages/register/ui/view/RegisterView.java
new file mode 100644
index 0000000..45f27df
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/register/ui/view/RegisterView.java
@@ -0,0 +1,66 @@
+package de.assecutor.votianlt.pages.register.ui.view;
+
+import com.vaadin.flow.component.UI;
+import com.vaadin.flow.component.applayout.AppLayout;
+import com.vaadin.flow.component.button.Button;
+import com.vaadin.flow.component.button.ButtonVariant;
+import com.vaadin.flow.component.html.Main;
+import com.vaadin.flow.component.notification.Notification;
+import com.vaadin.flow.component.notification.NotificationVariant;
+import com.vaadin.flow.component.orderedlayout.FlexComponent;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import com.vaadin.flow.component.textfield.TextField;
+import com.vaadin.flow.router.Menu;
+import com.vaadin.flow.router.PageTitle;
+import com.vaadin.flow.router.Route;
+import com.vaadin.flow.theme.lumo.LumoUtility;
+import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
+import de.assecutor.votianlt.pages.register.service.RegisterService;
+import de.assecutor.votianlt.util.Util;
+
+import java.time.Clock;
+
+@Route("register")
+@PageTitle("Bei VotianLT registrieren")
+//@Menu(order = 0, icon = "vaadin:clipboard-check", title = "Bei VotianLT registrieren")
+public class RegisterView extends Main {
+
+ private final RegisterService registerService;
+
+ TextField usernameField = new TextField("E-Mail-Adresse");
+ TextField password1Field = new TextField("Passwort");
+ TextField password2Field = new TextField("Passwort wiederholen");
+ Button submitButton = new Button("Registrieren");
+
+ public RegisterView(RegisterService registerService, Clock clock) {
+ this.registerService = registerService;
+
+ // Setze den Button als primär
+ submitButton = new Button("Create", event -> submit());
+ submitButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+
+ // Erstelle ein Div als Container (oder direkt ein Layout)
+ VerticalLayout formLayout = new VerticalLayout();
+ formLayout.add(usernameField, password1Field, password2Field, submitButton);
+
+ // Zentriere die Inhalte vertikal und horizontal
+ formLayout.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
+ formLayout.setSpacing(true);
+ formLayout.setSizeUndefined(); // Inhalt eng setzen
+
+ setSizeFull();
+ addClassNames(LumoUtility.BoxSizing.BORDER, LumoUtility.Display.FLEX, LumoUtility.FlexDirection.COLUMN,
+ LumoUtility.Padding.MEDIUM, LumoUtility.Gap.SMALL);
+
+ add(formLayout);
+ }
+
+ private void submit() {
+ Util.changeDrawerState(true);
+ }
+
+ private void createTodo() {
+ registerService.registerUser(usernameField.getValue(), password1Field.getValue());
+ Notification.show("Benutzer registriert", 3000, Notification.Position.BOTTOM_END).addThemeVariants(NotificationVariant.LUMO_SUCCESS);
+ }
+}
diff --git a/src/main/java/de/assecutor/votianlt/pages/start/ui/view/OrdersView.java b/src/main/java/de/assecutor/votianlt/pages/start/ui/view/OrdersView.java
new file mode 100644
index 0000000..a8fe267
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/pages/start/ui/view/OrdersView.java
@@ -0,0 +1,42 @@
+package de.assecutor.votianlt.pages.start.ui.view;
+
+import com.vaadin.flow.component.UI;
+import com.vaadin.flow.component.button.Button;
+import com.vaadin.flow.component.button.ButtonVariant;
+import com.vaadin.flow.component.html.Main;
+import com.vaadin.flow.router.Menu;
+import com.vaadin.flow.router.PageTitle;
+import com.vaadin.flow.router.Route;
+import com.vaadin.flow.theme.lumo.LumoUtility;
+
+@Route("")
+@PageTitle("Start")
+@Menu(order = 0, icon = "vaadin:clipboard-check", title = "Start")
+public class OrdersView extends Main {
+
+ final Button registerBtn;
+ final Button loginBtn;
+
+ public OrdersView() {
+ registerBtn = new Button("Registrieren", event -> register());
+ registerBtn.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+ add(registerBtn);
+
+ loginBtn = new Button("Anmelden", event -> login());
+ loginBtn.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+ add(loginBtn);
+
+ setSizeFull();
+ addClassNames(LumoUtility.BoxSizing.BORDER, LumoUtility.Display.FLEX, LumoUtility.FlexDirection.COLUMN,
+ LumoUtility.Padding.MEDIUM, LumoUtility.Gap.SMALL);
+
+ }
+
+ private void register() {
+ UI.getCurrent().navigate("register");
+ }
+
+ private void login() {
+ }
+
+}
diff --git a/src/main/java/de/assecutor/votianlt/todo/domain/Todo.java b/src/main/java/de/assecutor/votianlt/todo/domain/Todo.java
deleted file mode 100644
index 584bdaa..0000000
--- a/src/main/java/de/assecutor/votianlt/todo/domain/Todo.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package de.assecutor.votianlt.todo.domain;
-
-import de.assecutor.votianlt.base.domain.AbstractEntity;
-import jakarta.persistence.*;
-import jakarta.validation.constraints.Size;
-import org.jspecify.annotations.Nullable;
-
-import java.time.Instant;
-import java.time.LocalDate;
-
-@Entity
-@Table(name = "todo")
-public class Todo extends AbstractEntity {
-
- public static final int DESCRIPTION_MAX_LENGTH = 255;
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- @Column(name = "todo_id")
- private Long id;
-
- @Column(name = "description", nullable = false, length = DESCRIPTION_MAX_LENGTH)
- @Size(max = DESCRIPTION_MAX_LENGTH)
- private String description;
-
- @Column(name = "creation_date", nullable = false)
- private Instant creationDate;
-
- @Column(name = "due_date")
- @Nullable
- private LocalDate dueDate;
-
- @Override
- public @Nullable Long getId() {
- return id;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Instant getCreationDate() {
- return creationDate;
- }
-
- public void setCreationDate(Instant creationDate) {
- this.creationDate = creationDate;
- }
-
- public @Nullable LocalDate getDueDate() {
- return dueDate;
- }
-
- public void setDueDate(@Nullable LocalDate dueDate) {
- this.dueDate = dueDate;
- }
-}
diff --git a/src/main/java/de/assecutor/votianlt/todo/domain/TodoRepository.java b/src/main/java/de/assecutor/votianlt/todo/domain/TodoRepository.java
deleted file mode 100644
index ceb6068..0000000
--- a/src/main/java/de/assecutor/votianlt/todo/domain/TodoRepository.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package de.assecutor.votianlt.todo.domain;
-
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Slice;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-public interface TodoRepository extends JpaRepository, JpaSpecificationExecutor {
-
- // If you don't need a total row count, Slice is better than Page.
- Slice findAllBy(Pageable pageable);
-}
diff --git a/src/main/java/de/assecutor/votianlt/todo/domain/package-info.java b/src/main/java/de/assecutor/votianlt/todo/domain/package-info.java
deleted file mode 100644
index c6e9428..0000000
--- a/src/main/java/de/assecutor/votianlt/todo/domain/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.todo.domain;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/todo/service/package-info.java b/src/main/java/de/assecutor/votianlt/todo/service/package-info.java
deleted file mode 100644
index b369f9e..0000000
--- a/src/main/java/de/assecutor/votianlt/todo/service/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.todo.service;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/todo/ui/view/package-info.java b/src/main/java/de/assecutor/votianlt/todo/ui/view/package-info.java
deleted file mode 100644
index c803fa2..0000000
--- a/src/main/java/de/assecutor/votianlt/todo/ui/view/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@NullMarked
-package de.assecutor.votianlt.todo.ui.view;
-
-import org.jspecify.annotations.NullMarked;
diff --git a/src/main/java/de/assecutor/votianlt/util/Util.java b/src/main/java/de/assecutor/votianlt/util/Util.java
new file mode 100644
index 0000000..661e4c4
--- /dev/null
+++ b/src/main/java/de/assecutor/votianlt/util/Util.java
@@ -0,0 +1,16 @@
+package de.assecutor.votianlt.util;
+
+import com.vaadin.flow.component.UI;
+import com.vaadin.flow.component.applayout.AppLayout;
+
+public class Util {
+ public static void changeDrawerState(boolean drawerState) {
+ AppLayout appLayout = (AppLayout) UI.getCurrent().getChildren()
+ .filter(AppLayout.class::isInstance)
+ .findFirst().orElse(null);
+
+ if (appLayout != null) {
+ appLayout.setDrawerOpened(drawerState);
+ }
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index a54f082..f06ab0a 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -10,3 +10,6 @@ vaadin.allowed-packages=com.vaadin,org.vaadin,de.assecutor.votianlt
# Open-in-view is only needed if you use lazy-loaded entities in your Flow views.
spring.jpa.open-in-view=false
+
+# MongoDB
+spring.data.mongodb.uri=mongodb://192.168.180.28:27017/votianlt
\ No newline at end of file
diff --git a/src/test/java/de/assecutor/votianlt/ArchitectureTest.java b/src/test/java/de/assecutor/votianlt/ArchitectureTest.java
deleted file mode 100644
index 420f8dd..0000000
--- a/src/test/java/de/assecutor/votianlt/ArchitectureTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package de.assecutor.votianlt;
-
-import com.tngtech.archunit.junit.AnalyzeClasses;
-import com.tngtech.archunit.junit.ArchTest;
-import com.tngtech.archunit.lang.ArchRule;
-import org.springframework.data.repository.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
-import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
-import static com.tngtech.archunit.library.dependencies.SlicesRuleDefinition.slices;
-
-@AnalyzeClasses(packages = ArchitectureTest.BASE_PACKAGE)
-class ArchitectureTest {
-
- static final String BASE_PACKAGE = "de.assecutor.votianlt";
-
- // TODO Add your own rules and remove those that don't apply to your project
-
- @ArchTest
- public static final ArchRule domain_model_should_not_depend_on_application_services = noClasses().that()
- .resideInAPackage(BASE_PACKAGE + "..domain..").should().dependOnClassesThat()
- .resideInAPackage(BASE_PACKAGE + "..service..");
-
- @ArchTest
- public static final ArchRule domain_model_should_not_depend_on_the_user_interface = noClasses().that()
- .resideInAPackage(BASE_PACKAGE + "..domain..").should().dependOnClassesThat()
- .resideInAnyPackage(BASE_PACKAGE + "..ui..");
-
- @ArchTest
- public static final ArchRule repositories_should_only_be_used_by_application_services_and_other_domain_classes = classes()
- .that().areAssignableTo(Repository.class).should().onlyHaveDependentClassesThat()
- .resideInAnyPackage(BASE_PACKAGE + "..domain..", BASE_PACKAGE + "..service..");
-
- @ArchTest
- public static final ArchRule repositories_should_only_be_accessed_by_transactional_classes = classes().that()
- .areAssignableTo(Repository.class).should().onlyBeAccessed().byClassesThat()
- .areAnnotatedWith(Transactional.class);
-
- @ArchTest
- public static final ArchRule application_services_should_not_depend_on_the_user_interface = noClasses().that()
- .resideInAPackage(BASE_PACKAGE + "..service..").should().dependOnClassesThat()
- .resideInAnyPackage(BASE_PACKAGE + "..ui..");
-
- @ArchTest
- public static final ArchRule there_should_not_be_circular_dependencies_between_feature_packages = slices()
- .matching(BASE_PACKAGE + ".(*)..").should().beFreeOfCycles();
-}
diff --git a/src/test/java/de/assecutor/votianlt/todo/service/TodoServiceIT.java b/src/test/java/de/assecutor/votianlt/todo/service/TodoServiceIT.java
deleted file mode 100644
index fee5836..0000000
--- a/src/test/java/de/assecutor/votianlt/todo/service/TodoServiceIT.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package de.assecutor.votianlt.todo.service;
-
-import de.assecutor.votianlt.todo.domain.Todo;
-import de.assecutor.votianlt.todo.domain.TodoRepository;
-import jakarta.validation.ValidationException;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.Clock;
-import java.time.LocalDate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
-@Transactional(propagation = Propagation.NOT_SUPPORTED)
-class TodoServiceIT {
-
- @Autowired
- TodoService todoService;
-
- @Autowired
- TodoRepository todoRepository;
-
- @Autowired
- Clock clock;
-
- @AfterEach
- void cleanUp() {
- todoRepository.deleteAll();
- }
-
- @Test
- public void todos_are_stored_in_the_database_with_the_current_timestamp() {
- var now = clock.instant();
- var due = LocalDate.of(2025, 2, 7);
- todoService.createTodo("Do this", due);
- assertThat(todoService.list(PageRequest.ofSize(1))).singleElement()
- .matches(todo -> todo.getDescription().equals("Do this") && due.equals(todo.getDueDate())
- && todo.getCreationDate().isAfter(now));
- }
-
- @Test
- public void todos_are_validated_before_they_are_stored() {
- assertThatThrownBy(() -> todoService.createTodo("X".repeat(Todo.DESCRIPTION_MAX_LENGTH + 1), null))
- .isInstanceOf(ValidationException.class);
- assertThat(todoRepository.count()).isEqualTo(0);
- }
-}