diff --git a/.gitignore b/.gitignore
index 9154f4c..2dbf672 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@
*.zip
*.tar.gz
*.rar
+../target
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
diff --git a/ServiceCenter/pom.xml b/ServiceCenter/pom.xml
new file mode 100644
index 0000000..cd3bbfd
--- /dev/null
+++ b/ServiceCenter/pom.xml
@@ -0,0 +1,92 @@
+
+ 4.0.0
+
+ org.example
+ ServiceCenter
+ 1.0-SNAPSHOT
+ jar
+
+ ServiceCenter
+ http://maven.apache.org
+
+
+ UTF-8
+ 42.7.3
+ 10.18.0
+ 1.18.34
+ 1.6.3
+ 0.2.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.3.2
+
+
+
+
+ org.flywaydb
+ flyway-database-postgresql
+ ${org.flywaydb.version}
+
+
+
+ org.flywaydb
+ flyway-core
+ ${org.flywaydb.version}
+
+
+
+ org.postgresql
+ postgresql
+ ${org.postgesql.version}
+
+
+
+ org.mapstruct
+ mapstruct
+ ${org.mapstruct.version}
+
+
+
+ org.projectlombok
+ lombok
+ ${org.lombok.version}
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${org.mapstruct.version}
+
+
+ org.projectlombok
+ lombok
+ ${org.lombok.version}
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ ${lombok-mapstruct-binding.version}
+
+
+
+
+
+
+
diff --git a/ServiceCenter/src/main/java/org/example/App.java b/ServiceCenter/src/main/java/org/example/App.java
new file mode 100644
index 0000000..bcf010e
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/App.java
@@ -0,0 +1,13 @@
+package org.example;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class App
+{
+ public static void main( String[] args )
+ {
+ SpringApplication.run(App.class, args);
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/Car.java b/ServiceCenter/src/main/java/org/example/domain/entity/Car.java
new file mode 100644
index 0000000..7fef2d5
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/Car.java
@@ -0,0 +1,29 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.util.List;
+import java.util.UUID;
+
+@Data
+@Entity
+public class Car {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String brand;
+
+ @Column(nullable = false)
+ private String model;
+
+ @Column(nullable = false)
+ private Integer year;
+
+ @ManyToMany(fetch = FetchType.EAGER)
+ private List configurations;
+
+ @OneToMany(mappedBy = "car")
+ private List features;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/Configuration.java b/ServiceCenter/src/main/java/org/example/domain/entity/Configuration.java
new file mode 100644
index 0000000..39bc959
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/Configuration.java
@@ -0,0 +1,26 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.util.List;
+import java.util.UUID;
+
+@Data
+@Entity
+public class Configuration {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String name;
+
+ @Column(nullable = false)
+ private String description;
+
+ @OneToOne(fetch = FetchType.EAGER)
+ private User user;
+
+ @ManyToMany(fetch = FetchType.LAZY, mappedBy = "configurations")
+ private List cars;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/Feature.java b/ServiceCenter/src/main/java/org/example/domain/entity/Feature.java
new file mode 100644
index 0000000..e8b40df
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/Feature.java
@@ -0,0 +1,22 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import lombok.Data;
+
+import java.util.UUID;
+
+@Entity
+@Data
+public class Feature {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String description;
+
+ @OneToOne
+ private Car car;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/PreparationWork.java b/ServiceCenter/src/main/java/org/example/domain/entity/PreparationWork.java
new file mode 100644
index 0000000..6829969
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/PreparationWork.java
@@ -0,0 +1,32 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+import java.util.List;
+import java.util.UUID;
+
+@Entity
+@Data
+public class PreparationWork {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String name;
+
+ @Column(nullable = false)
+ private String description;
+
+ @OneToOne(fetch = FetchType.EAGER)
+ private User user;
+
+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "preparationWorks")
+ private List requests;
+
+ @OneToMany(fetch = FetchType.EAGER, mappedBy = "preparationWork")
+ private List wishes;
+
+ @ManyToMany(fetch = FetchType.LAZY)
+ private List configurations;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/Request.java b/ServiceCenter/src/main/java/org/example/domain/entity/Request.java
new file mode 100644
index 0000000..c12d705
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/Request.java
@@ -0,0 +1,30 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.*;
+import jdk.jfr.Timestamp;
+import lombok.Data;
+import org.hibernate.annotations.Fetch;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.UUID;
+
+@Entity
+@Data
+public class Request {
+ @Id
+ private Long id;
+
+ @Timestamp
+ @Column(nullable = false)
+ private LocalDateTime createdAt;
+
+ @OneToOne(fetch = FetchType.EAGER)
+ private User user;
+
+ @ManyToMany
+ private List cars;
+
+ @ManyToMany(fetch = FetchType.EAGER)
+ private List preparationWorks;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/User.java b/ServiceCenter/src/main/java/org/example/domain/entity/User.java
new file mode 100644
index 0000000..adac011
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/User.java
@@ -0,0 +1,29 @@
+package org.example.domain.entity;
+
+
+import jakarta.persistence.*;
+import lombok.Data;
+import org.example.domain.enums.Role;
+
+import java.util.UUID;
+
+@Entity
+@Data
+@Table(name = "users")
+public class User {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String name;
+
+ @Column(nullable = false)
+ private String email;
+
+ @Column(nullable = false)
+ private String password;
+
+ @Column(nullable = false)
+ @Enumerated(EnumType.STRING)
+ private Role role;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/entity/Wish.java b/ServiceCenter/src/main/java/org/example/domain/entity/Wish.java
new file mode 100644
index 0000000..b3aa8e6
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/entity/Wish.java
@@ -0,0 +1,24 @@
+package org.example.domain.entity;
+
+import jakarta.persistence.*;
+import jdk.jfr.Timestamp;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+@Entity
+@Data
+public class Wish {
+ @Id
+ private Long id;
+
+ @Column(nullable = false)
+ private String name;
+
+ @Timestamp
+ private LocalDateTime createdAt;
+
+ @OneToOne
+ private PreparationWork preparationWork;
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/enums/Role.java b/ServiceCenter/src/main/java/org/example/domain/enums/Role.java
new file mode 100644
index 0000000..54263d6
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/enums/Role.java
@@ -0,0 +1,8 @@
+package org.example.domain.enums;
+
+public enum Role {
+ CLADDING("CLADDING"),
+ WORKER("WORKER");
+ Role(String value){
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/repositories/PreparationWorkRepository.java b/ServiceCenter/src/main/java/org/example/domain/repositories/PreparationWorkRepository.java
new file mode 100644
index 0000000..5bc1c51
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/repositories/PreparationWorkRepository.java
@@ -0,0 +1,7 @@
+package org.example.domain.repositories;
+
+import org.example.domain.entity.PreparationWork;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface PreparationWorkRepository extends JpaRepository {
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/repositories/RequestRepository.java b/ServiceCenter/src/main/java/org/example/domain/repositories/RequestRepository.java
new file mode 100644
index 0000000..16bc232
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/repositories/RequestRepository.java
@@ -0,0 +1,13 @@
+package org.example.domain.repositories;
+
+import org.example.domain.entity.Request;
+import org.example.domain.entity.Wish;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.UUID;
+
+public interface RequestRepository extends JpaRepository {
+ List findByCreatedAtBetween(LocalDate dateFrom, LocalDate dateTo);
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/repositories/UserRepository.java b/ServiceCenter/src/main/java/org/example/domain/repositories/UserRepository.java
new file mode 100644
index 0000000..ca04d80
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/repositories/UserRepository.java
@@ -0,0 +1,9 @@
+package org.example.domain.repositories;
+
+import org.example.domain.entity.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.UUID;
+
+public interface UserRepository extends JpaRepository {
+}
diff --git a/ServiceCenter/src/main/java/org/example/domain/repositories/WishRepository.java b/ServiceCenter/src/main/java/org/example/domain/repositories/WishRepository.java
new file mode 100644
index 0000000..53011b5
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/domain/repositories/WishRepository.java
@@ -0,0 +1,14 @@
+package org.example.domain.repositories;
+
+import org.example.domain.entity.Wish;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.UUID;
+
+public interface WishRepository extends JpaRepository{
+
+ List findByCreatedAtBetween(LocalDate dateFrom, LocalDate dateTo);
+}
diff --git a/ServiceCenter/src/main/java/org/example/exceptions/ObjectExistsException.java b/ServiceCenter/src/main/java/org/example/exceptions/ObjectExistsException.java
new file mode 100644
index 0000000..4ce65b9
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/exceptions/ObjectExistsException.java
@@ -0,0 +1,8 @@
+package org.example.exceptions;
+
+public class ObjectExistsException extends RuntimeException {
+ public ObjectExistsException(Class> type,String value)
+ {
+ super("Object " + type.getName() + " exists by: " + value);
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/exceptions/ObjectNotExistsException.java b/ServiceCenter/src/main/java/org/example/exceptions/ObjectNotExistsException.java
new file mode 100644
index 0000000..626c2d7
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/exceptions/ObjectNotExistsException.java
@@ -0,0 +1,7 @@
+package org.example.exceptions;
+
+public class ObjectNotExistsException extends RuntimeException {
+ public ObjectNotExistsException(Class> type,String value) {
+ super("Object " + type.getName() + " not found by: " + value );
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/managers/PreparationWorkManager.java b/ServiceCenter/src/main/java/org/example/managers/PreparationWorkManager.java
new file mode 100644
index 0000000..d797c7a
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/managers/PreparationWorkManager.java
@@ -0,0 +1,35 @@
+package org.example.managers;
+
+
+import lombok.RequiredArgsConstructor;
+import org.example.domain.entity.PreparationWork;
+import org.example.domain.entity.Request;
+import org.example.domain.repositories.PreparationWorkRepository;
+import org.example.exceptions.ObjectNotExistsException;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class PreparationWorkManager {
+ private final PreparationWorkRepository preparationWorkRepository;
+
+ public void save(PreparationWork preparationWork){
+ preparationWorkRepository.save(preparationWork);
+ }
+
+ public void existsById(Long id){
+ preparationWorkRepository.existsById(id);
+ }
+
+ public PreparationWork getById(Long id){
+ return preparationWorkRepository.findById(id)
+ .orElseThrow(() -> new ObjectNotExistsException(PreparationWork.class, id.toString()));
+ }
+
+ public List getAll(){
+ return preparationWorkRepository.findAll();
+ }
+
+}
diff --git a/ServiceCenter/src/main/java/org/example/managers/RequestManager.java b/ServiceCenter/src/main/java/org/example/managers/RequestManager.java
new file mode 100644
index 0000000..ee34a3b
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/managers/RequestManager.java
@@ -0,0 +1,38 @@
+package org.example.managers;
+
+import lombok.RequiredArgsConstructor;
+import org.example.domain.entity.Request;
+import org.example.domain.repositories.RequestRepository;
+import org.example.exceptions.ObjectExistsException;
+import org.example.exceptions.ObjectNotExistsException;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class RequestManager {
+ private RequestRepository requestRepository;
+
+ public void save(Request request){
+ requestRepository.save(request);
+ }
+
+ public void existsById(Long id){
+ requestRepository.existsById(id);
+ }
+
+ public Request getById(Long id){
+ return requestRepository.findById(id)
+ .orElseThrow(() -> new ObjectNotExistsException(Request.class, id.toString()));
+ }
+
+ public List getAll(){
+ return requestRepository.findAll();
+ }
+
+ public List getAll(LocalDate dateFrom, LocalDate dateTo){
+ return requestRepository.findByCreatedAtBetween(dateFrom, dateTo);
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/managers/UserManager.java b/ServiceCenter/src/main/java/org/example/managers/UserManager.java
new file mode 100644
index 0000000..8eb2ecf
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/managers/UserManager.java
@@ -0,0 +1,43 @@
+package org.example.managers;
+
+import lombok.RequiredArgsConstructor;
+import org.example.domain.entity.User;
+import org.example.domain.entity.Wish;
+import org.example.domain.enums.Role;
+import org.example.domain.repositories.UserRepository;
+import org.example.exceptions.ObjectExistsException;
+import org.example.exceptions.ObjectNotExistsException;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class UserManager {
+ private final UserRepository userRepository;
+
+ public void save(User user){
+ userRepository.save(user);
+ }
+
+ public boolean existsById(Long id){
+ return userRepository.existsById(id);
+ }
+
+ public User getById(Long id){
+ return userRepository.findById(id)
+ .orElseThrow(() -> new ObjectNotExistsException(User.class, id.toString()));
+ }
+
+ public List getAll(){
+ return userRepository.findAll();
+ }
+
+ public List getAll(Role role){
+ var user = new User();
+ user.setRole(role);
+ var example = Example.of(user);
+ return userRepository.findAll(example);
+ }
+}
diff --git a/ServiceCenter/src/main/java/org/example/managers/WishManager.java b/ServiceCenter/src/main/java/org/example/managers/WishManager.java
new file mode 100644
index 0000000..5c9f44a
--- /dev/null
+++ b/ServiceCenter/src/main/java/org/example/managers/WishManager.java
@@ -0,0 +1,40 @@
+package org.example.managers;
+
+import lombok.RequiredArgsConstructor;
+import org.example.domain.entity.User;
+import org.example.domain.entity.Wish;
+import org.example.domain.repositories.WishRepository;
+import org.example.exceptions.ObjectExistsException;
+import org.example.exceptions.ObjectNotExistsException;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class WishManager {
+ private final WishRepository wishRepository;
+
+ public void save(Wish wish){
+ wishRepository.save(wish);
+ }
+
+ public boolean existsById(Long id){
+ return wishRepository.existsById(id);
+ }
+
+ public Wish getById(Long id){
+ return wishRepository.findById(id)
+ .orElseThrow(() -> new ObjectNotExistsException(Wish.class, id.toString()));
+ }
+
+ public List getAll(){
+ return wishRepository.findAll();
+ }
+
+ public List getAll(LocalDate dateFrom, LocalDate dateTo){
+ return wishRepository.findByCreatedAtBetween(dateFrom, dateTo);
+ }
+}
diff --git a/ServiceCenter/src/main/resources/application.yml b/ServiceCenter/src/main/resources/application.yml
new file mode 100644
index 0000000..3d6f4b5
--- /dev/null
+++ b/ServiceCenter/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+spring:
+ datasource:
+ url: jdbc:postgresql://localhost:5432/
+ username: postgres
+ password: postgres
+ jpa:
+ show-sql: true
+ hibernate:
+ ddl-auto: create
+ properties:
+ hibernate:
+ format_sql: true
\ No newline at end of file