Environment variables
The following environment variables must be set in each environment/stage:
SPRING_DATASOURCE_USERNAME
SPRING_DATASOURCE_PASSWORD
SPRING_DATASOURCE_URL
The following is an example for local testing with the included docker-compose file:
SPRING_DATASOURCE_USERNAME=salattest
SPRING_DATASOURCE_PASSWORD=salattest
SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/salat?useUnicode=true&useJDBCCompliantTimezoneShift=true&serverTimezone=Europe/Berlin&useLegacyDatetimeCode=false&autoReconnect=true
Run locally
Steps to start Salat locally:
- Build the .war-file:
./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=docker.io/hbt/salat:latest
- Run docker-compose:
docker-compose up
- Open in browser:
http://localhost:8080?employee-sign=<sign>
- Valid signs in the test-dataset are: admin, bm, tt
Shutdown:
- Stop docker-compose: CTRL+C
- Remove built containers:
docker-compose down
Login / Logout
Einfach den SALAT mit der URL http://localhost:8080?employee-sign=<sign>
aufrufen.
Einfach den SALAT mit der URL http://localhost:8080?logout
aufrufen.
Debugging
Start local database only, without Salat:
docker-compose -f docker-compose-infra.yml up
! Be sure to remove existing docker containers before by running docker-compose down
if you had the application running before.
Troubleshooting
BuildProperties
Falls die Meldung
Consider defining a bean of type 'org.springframework.boot.info.BuildProperties' in your configuration.
kommt. Einfach einmal
mvn package
ausführen. Hintergrund: Maven erzeugt eine Datei build-info.properties. Diese fehlt ggf. weil die
IDE (auch mit Maven Integration) diese Datei nicht erzeugt. Bei IntelliJ IDEA bei Klaus wird diese
Datei nicht erzeugt.
(by Klaus)
Samlung DB-Änderungen
Datenbankänderungen werden via Liquibase in nachfolgender Datei gepflegt.
src/main/resources/db/changelog/db.changelog-master.yaml
Business-Logiken, die refactored werden sollten, z.B. move to service
- AfterLogin#createWarnings - erzeugt Warnungen, die dem User angezeigt werden sollen. Diese weisen
auf Fehler bzw. offenen TODOs hin. Könnte man in einen Service packen und dann via
scheduled Job regelmässig erzeugen lassen und in der DB speichern.
- AfterLogin#handleOvertime - berechnet Überstunden zur Anzeige beim User. Sollte in den OvertimeService
überführt werden. Dieser existiert bereits und ist auch in der Lage, Überstunden zu
berechnen. Könnte man entsprechend zusammenführen.
- SimpleMailService - brachen wir einen Email-Versand noch?
- StoreCustomerAction#executeAuthenticated - bei task=save wird ein Customer angelegt. Sollte im
CustomerService sein.
- DeleteCustomerAction#executeAuthenticated - auch dies sollte weitestgehend im CustomerService sein.
- DeleteTimereportFromDailyDisplayAction#executeAuthenticated - sollte TimereportService nutzen
- TimereportHelper#determineBeginTimeToDisplay - move to WorkingdayService
- TimereportHelper#determineTimesToDisplay - move to WorkingdayService and introduce a better value class
to carry the result
- TimereportHelper#calculateLaborTime - more or less just a sum up time on Timereports,
maybe this can be done without any service, just use Java streaming API and Duration.plus
- TimereportHelper#checkLaborTimeMaximum - move to WorkingdayService? Or maybe a business rule in
TimereportService that creates a warning? Or when it's a warning, maybe add to the WarningService.
- TimereportHelper#calculateQuittingTime - nach WorkingdayService
- TimereportHelper#calculateOvertime - nach OvertimeService, ggf. mit vorhander Funktion mergen
- TrainingHelper#fromDBtimeToString - nach DurationUtils als neue Methode
formatWithWorkingsdays(Duration duration, Duration dailyWorkingTime
- TrainingHelper#hoursMinToString - better use Duration and then DurationUtils#format
- StoreEmployeeAction#executeAuthenticated - move storing of Employee to EmployeeService
- DeleteEmployeeAction#executeAuthenticated - move deletion to EmployeeService
- StoreEmployeecontractAction#executeAuthenticated - move storing of Employeecontract to EmployeecontractService
- DeleteEmployeecontractAction#executeAuthenticated - move deletion to EmployeecontractService
- StoreCustomerorderAction#executeAuthenticated - move storing to CustomerorderService
- DeleteCustomerorderAction#executeAuthenticated - move deletion to CustomerorderService
- StoreEmployeeorderAction#executeAuthenticated - move storing to EmployeeorderService
- DeleteEmployeeorderAction#executeAuthenticated - move deletion to EmployeeorderService
- StoreSuborderAction#executeAuthenticated - move storing to SuborderService
- StoreSuborderAction#executeAuthenticated - move copy to SuborderService
- DeleteSuborderAction#executeAuthenticated - move deletion to SuborderService
- GenerateMultipleEmployeeordersAction - move storing to EmployeeorderService