Rename and update project to java 21 and newer spring versions

This commit is contained in:
2025-04-28 14:43:54 +02:00
parent a3e8bbfcff
commit f40eef9082
24 changed files with 92 additions and 150 deletions

View File

@@ -1,59 +0,0 @@
Zadatak: Aplikaciju za Auto servise.
- Tehnologije: Springboot, Thymeleaf, PostgresSQl baza (tocno te tehnologije, bez javascripta)
U aplikaciji treba moći:
1. Dodavati/brisati/editirati klijente.
- Osim forme za editiranje podataka klijenta, treba napraviti i prikaz detalja klijenta, koji nije u obliku forme, vec samo tekstualno prikazani podaci (moze kao tablica da bi sve bilo lijepo poravnato)
:
- OIB
- Ime i Prezime
- Adresa (Ulica i broj, poštanski broj , Grad, Država)
(hint: pokušajte to napraviti kao Embedable, )
https://en.wikibooks.org/wiki/Java_Persistence/Embeddables#Example_of_an_embedded_relationship_annotations
- Lista automobila
- Nakon sto se unese novi klijent ili editira postojeci, treba prikazati stranicu sa detaljima klijenta.
Naslov iznad forme neka bude "Uređivanje klijenta"
- Napraviti stranicu sa izlistom klijenata
- U listi su prezimena i imena klijenata, abecedno po prezimenu
- klik na ime vodi na stranicu s detaljima klijenta
- pored imena klijenta su buttoni "Uredi" (vodi na formu za editiranje klijenta) i "Obriši" (briše klijenta i sve njegove automobile)
- ispod liste button za dodavanje novog klijenta
pored pojedinog klijenta, buttoni za )
2. Dodavanje automobila
- Na prikazu detalja klijenta (definirano u tocki 1) treba prikazati i listu automobila koje klijent posjeduje i servisira. Ispod liste (koja ce inicijalno biti prazna) treba biti button "Dodaj automobil", a klik na taj biuton otvara novu stranicu (formu ) za unos podataka automobla.
- Automobil mora imati sljedeće podatke
- Klijent kojem pripada (dropdown lista, inicijalno odabran onaj klijent s cijih detalja je klinuto na "Dodaj automobi", ali moze se promjeniti)
- Tip automobila (tipove automobila ne morate spremati u bazu, dovoljno je imati enum sa listom tipova (dodajte 10-ak komada))
enum vrijednosti za tip automobila neka budu skraceni nazivi, npr: TOYOTA_AURIS, s time da ima property-e manufacturer i model koji imaju gettere/settere a u ovom slucaju bi vrijednosti bile za manufacturer "Toyota" a za model "Auris"
- Godina proizvodnje
- Registracijska oznaka
- Boja
- Naslov iznad forme neka bude "Uređivanje automobila"
- Kada se doda automobil (submita se forma), neka se vraća na stranicu detalja klijenta za kojeg smo dodali taj automobil.
Tada se na toj stranici, u listi automobila klijenta treba vidjeti unešeni automobil.
- Na toj listi automobila ispisivati proizvođača i model (iz onog enuma za tip automobila), to neka ujedno bude i link na stranicu sa detaljima automobila. Pokraj tog linka dodati dva buttona: "Uredi" i "Obriši". Uredi otvara formu za editiranje podataka automobila, a Briši ga briše.
- RELACIJU AUTOMOBIL-KLIJENT NAPRAVITE BIDIRECTIONAL (DA KLIJENT ENTITY IMA LISTU AUTOMOBILA A AUTOMOBIL IMA REFERENCU NA KLIJENTA KOJEM PRIPADA)
3. Dodavanje servisa
- Na stranici detalja automobila (definiranoj u točki 2) uz podatke o automobilu treba dodati i listu napravljenih servisa. Ispod liste (koja je inicijalno prazna) imamo button "Dodaj servis info"
- Klik na taj button otvara formu za dodavanje Servisa koji treba imati sljedeće podatke:
- Datum i vrijeme servisa
- Ime i prezime radnika koji je napravio servis
- Opis radova
- Cijena
- Informacija da li je plaćeno ili ne (checkbox)
- Naslov iznad forme neka bude "Servis za automobil XXXXX , YYYYY". XXXXX neka bude tip automobila (proizvođać i model), a YYYYY ime i prezime klijenta
- Nakon submita forme treba se vratiti na stranicu detalja automobila.
- Dodani servis se treba prikazati na toj stranici u listi servisa. Za svaki servis u listi ispisati Datum i vrijeme kad je napravljen i ime radika koji je obavio servis. Svaki taj item u listi ujedno je i link na stranicu detalja servisa gdje se ispisutu svi podaci o servisu (tablica s tekstom)
- Pokraj linka treba dodati buttone "Uredi" (vodi na edit formu za servis) i "Obriši" (briše servis iz baze)
- RELACIJU SERVIS-AUTOMOBIL NAPRAVITE BIDIRECTIONAL (DA AUTOMOBIL ENTITY IMA LISTU SERVVISA A SERVIS IMA REFERENCU NA AUTOMOBIL ZA KOJI JE NAPRAVLJEN)
4. Napravity Homepage na kojem će se prikazati zadnjih 10 napravljeni servisa (po vremenu, najnoviji na vrhu)
5. (OPCIONALNO) Na svim stranicama includati na vrhu header sa glavnom navigacijom (potrazite kako se to radi sa thymeleafom, hint --> th:include)

28
pom.xml
View File

@@ -1,20 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version> <version>3.4.5</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/>
<!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.carService</groupId> <groupId>com.carInsurance</groupId>
<artifactId>demo</artifactId> <artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>1.0.0</version>
<name>demo</name> <name>carInsurance</name>
<description>Demo project for Spring Boot</description> <description>Car insurance interest calculator</description>
<properties> <properties>
<java.version>11</java.version> <java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
@@ -31,8 +34,8 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.postgresql</groupId> <groupId>org.mariadb.jdbc</groupId>
<artifactId>postgresql</artifactId> <artifactId>mariadb-java-client</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
@@ -63,5 +66,4 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>

View File

@@ -0,0 +1,11 @@
package com.carInsurance.main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}

View File

@@ -1,10 +1,10 @@
package com.carService.demo.controller; package com.carInsurance.main.controller;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.enums.CarManufacturerModel; import com.carInsurance.main.domain.enums.CarManufacturerModel;
import com.carService.demo.manager.CarManager; import com.carInsurance.main.manager.CarManager;
import com.carService.demo.manager.CarServiceManager; import com.carInsurance.main.manager.CarServiceManager;
import com.carService.demo.manager.UserManager; import com.carInsurance.main.manager.UserManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

View File

@@ -1,8 +1,8 @@
package com.carService.demo.controller; package com.carInsurance.main.controller;
import com.carService.demo.domain.CarService; import com.carInsurance.main.domain.CarService;
import com.carService.demo.manager.CarManager; import com.carInsurance.main.manager.CarManager;
import com.carService.demo.manager.CarServiceManager; import com.carInsurance.main.manager.CarServiceManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@@ -65,4 +65,4 @@ public class CarServiceController {
} }
return "redirect:/user/list"; return "redirect:/user/list";
} }
} }

View File

@@ -1,6 +1,6 @@
package com.carService.demo.controller; package com.carInsurance.main.controller;
import com.carService.demo.manager.CarServiceManager; import com.carInsurance.main.manager.CarServiceManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

View File

@@ -1,8 +1,8 @@
package com.carService.demo.controller; package com.carInsurance.main.controller;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import com.carService.demo.manager.CarManager; import com.carInsurance.main.manager.CarManager;
import com.carService.demo.manager.UserManager; import com.carInsurance.main.manager.UserManager;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;

View File

@@ -1,8 +1,9 @@
package com.carService.demo.domain; package com.carInsurance.main.domain;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import lombok.*; import lombok.*;
import javax.persistence.*;
@Data @Data
@Embeddable @Embeddable

View File

@@ -1,9 +1,9 @@
package com.carService.demo.domain; package com.carInsurance.main.domain;
import com.carService.demo.domain.enums.CarManufacturerModel; import com.carInsurance.main.domain.enums.CarManufacturerModel;
import jakarta.persistence.*;
import lombok.*; import lombok.*;
import javax.persistence.*;
import java.util.List; import java.util.List;
@Entity @Entity
@@ -13,7 +13,7 @@ import java.util.List;
@Table(name="cars") @Table(name="cars")
public class Car { public class Car {
@Id @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="car_sequence") @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="car_sequence")
@SequenceGenerator(name="car_sequence", allocationSize=10) @SequenceGenerator(name="car_sequence", allocationSize=10)
@Setter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE)
private Long id; private Long id;

View File

@@ -1,9 +1,9 @@
package com.carService.demo.domain; package com.carInsurance.main.domain;
import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.util.Date; import java.util.Date;
@Entity @Entity
@@ -14,7 +14,7 @@ import java.util.Date;
@Table(name="services") @Table(name="services")
public class CarService { public class CarService {
@Id @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="car_service_sequence") @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="car_service_sequence")
@SequenceGenerator(name="car_service_sequence", allocationSize=10) @SequenceGenerator(name="car_service_sequence", allocationSize=10)
@Setter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE)
private Long id; private Long id;

View File

@@ -1,8 +1,8 @@
package com.carService.demo.domain; package com.carInsurance.main.domain;
import jakarta.persistence.*;
import lombok.*; import lombok.*;
import javax.persistence.*;
import java.util.List; import java.util.List;
@Entity @Entity
@@ -13,7 +13,7 @@ import java.util.List;
@Setter @Setter
public class User { public class User {
@Id @Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="user_sequence") @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="user_sequence")
@SequenceGenerator(name="user_sequence", allocationSize=10) @SequenceGenerator(name="user_sequence", allocationSize=10)
@Setter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE)
private Long id; private Long id;

View File

@@ -1,4 +1,4 @@
package com.carService.demo.domain.enums; package com.carInsurance.main.domain.enums;
import lombok.Getter; import lombok.Getter;
@@ -24,4 +24,4 @@ public enum CarManufacturerModel {
String getDisplayValue() { String getDisplayValue() {
return this.manufacturer + " " + this.model; return this.manufacturer + " " + this.model;
} }
} }

View File

@@ -1,7 +1,7 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,8 +1,8 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import com.carService.demo.repository.CarRepository; import com.carInsurance.main.repository.CarRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.CarService; import com.carInsurance.main.domain.CarService;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,8 +1,8 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.CarService; import com.carInsurance.main.domain.CarService;
import com.carService.demo.repository.CarServiceRepository; import com.carInsurance.main.repository.CarServiceRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,7 +1,7 @@
package com.carService.demo.manager; package com.carInsurance.main.manager;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import com.carService.demo.repository.UserRepository; import com.carInsurance.main.repository.UserRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,7 +1,7 @@
package com.carService.demo.repository; package com.carInsurance.main.repository;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.carService.demo.repository; package com.carInsurance.main.repository;
import com.carService.demo.domain.Car; import com.carInsurance.main.domain.Car;
import com.carService.demo.domain.CarService; import com.carInsurance.main.domain.CarService;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.carService.demo.repository; package com.carInsurance.main.repository;
import com.carService.demo.domain.User; import com.carInsurance.main.domain.User;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> { public interface UserRepository extends JpaRepository<User, Long> {
} }

View File

@@ -1,13 +0,0 @@
package com.carService.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

View File

@@ -4,13 +4,13 @@ spring.jackson.serialization.INDENT_OUTPUT=true
#JPA properties #JPA properties
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:postgresql://127.0.0.1:2345/phatphuckdave spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/phatphuckdave
spring.datasource.username=phatphuckdave spring.datasource.username=phatphuckdave
spring.datasource.password=phatphuckdave765 spring.datasource.password=phatphuckdave765
spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.database=POSTGRESQL spring.jpa.database=MARIADB
spring.jpa.database-platform = org.hibernate.dialect.PostgreSQL92Dialect spring.jpa.database-platform = org.hibernate.dialect.MariaDB103Dialect
spring.jpa.open-in-view=true spring.jpa.open-in-view=true
spring.jpa.show_sql=false spring.jpa.show_sql=false
spring.jpa.generate-ddl=false spring.jpa.generate-ddl=false

View File

@@ -1,10 +1,10 @@
package com.carService.demo; package com.carInsurance.main;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest @SpringBootTest
class DemoApplicationTests { class MainTests {
@Test @Test
void contextLoads() { void contextLoads() {