From 4fa138203de0367c3b4ca72cbef39cc045d2fb34 Mon Sep 17 00:00:00 2001 From: Andrii Solianyk Date: Fri, 11 Apr 2025 15:53:50 +0200 Subject: [PATCH] Client controller, and WIP with edits and deletion of notice --- pom.xml | 5 ++ .../controller/ClientController.java | 46 +++++++++++++++++++ ...tController.java => NoticeController.java} | 36 +++++++++------ .../artisanconnectbackend/dto/ClientDTO.java | 6 +++ .../service/ClientService.java | 14 +++++- .../service/IDatabase.java | 10 ---- .../service/NoticeService.java | 9 ++++ src/main/resources/application.properties | 2 +- src/main/resources/sql/data.sql | 7 ++- 9 files changed, 109 insertions(+), 26 deletions(-) create mode 100644 src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java rename src/main/java/_11/asktpk/artisanconnectbackend/controller/{ArtisanConnectController.java => NoticeController.java} (66%) delete mode 100644 src/main/java/_11/asktpk/artisanconnectbackend/service/IDatabase.java diff --git a/pom.xml b/pom.xml index 378c16c..23b7b0b 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,11 @@ lombok provided + + jakarta.validation + jakarta.validation-api + 3.1.0 + diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java new file mode 100644 index 0000000..4751d7a --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java @@ -0,0 +1,46 @@ +package _11.asktpk.artisanconnectbackend.controller; + + +import _11.asktpk.artisanconnectbackend.dto.ClientDTO; +import _11.asktpk.artisanconnectbackend.repository.ClientRepository; +import _11.asktpk.artisanconnectbackend.service.ClientService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/clients") +public class ClientController { + private final ClientService clientService; + + public ClientController(ClientService clientService, ClientRepository clientRepository) { + this.clientService = clientService; + } + + @GetMapping("/all") + public List getAllClients() { + return clientService.getAllClients(); + } + + // TODO: do zrobienia walidacja danych + @PutMapping("/edit/{id}") + public ResponseEntity updateClient(@PathVariable("id") long id, @RequestBody ClientDTO clientDTO) { + if(clientService.clientExists(id)) { + return new ResponseEntity<>(clientService.updateClient(clientDTO),HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity deleteClient(@PathVariable("id") long id) { + if(clientService.clientExists(id)) { + clientService.deleteClient(id); + return new ResponseEntity<>(HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ArtisanConnectController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java similarity index 66% rename from src/main/java/_11/asktpk/artisanconnectbackend/controller/ArtisanConnectController.java rename to src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java index c4e31d2..674cbae 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ArtisanConnectController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java @@ -1,6 +1,5 @@ package _11.asktpk.artisanconnectbackend.controller; -import _11.asktpk.artisanconnectbackend.dto.ClientDTO; import _11.asktpk.artisanconnectbackend.service.ClientService; import _11.asktpk.artisanconnectbackend.service.NoticeService; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; @@ -12,25 +11,23 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; -import static org.springframework.web.servlet.function.ServerResponse.status; - -@RequestMapping("/api/v1") +@RequestMapping("/api/v1/notices") @RestController -public class ArtisanConnectController { +public class NoticeController { @Autowired private NoticeService noticeService; @Autowired private ClientService clientService; - @GetMapping("/notices/all") + @GetMapping("/all") public List getAllNotices() { return noticeService.getAllNotices(); } - @PostMapping("/notices/add") + @PostMapping("/add") public ResponseEntity addNotice(@RequestBody NoticeDTO dto) { - if (!clientService.getByID(dto.getClientId())) { + if (!clientService.clientExists(dto.getClientId())) { return ResponseEntity .status(HttpStatus.BAD_REQUEST) .body("Nie znaleziono klienta o ID: " + dto.getClientId()); @@ -43,7 +40,7 @@ public class ArtisanConnectController { // TODO: zamiast dodawać tutaj pętlą, musi to robić NoticeService, trzeba zaimplementować odpowienią metodę - @PostMapping("/notices/bulk_add") + @PostMapping("/bulk_add") public ResponseEntity addNotices(@RequestBody List notices_list) { ResponseEntity response = new ResponseEntity<>(HttpStatus.CREATED); List errors = new ArrayList<>(); @@ -54,7 +51,7 @@ public class ArtisanConnectController { } for (NoticeDTO dto : notices_list) { - if (!clientService.getByID(dto.getClientId())) { + if (!clientService.clientExists(dto.getClientId())) { isError = true; errors.add(dto.getClientId().toString()); } else { @@ -71,8 +68,21 @@ public class ArtisanConnectController { return response; } - @GetMapping("/clients/all") - public List getAllClients() { - return clientService.getAllClients(); + @PutMapping("/edit/{id}") + public ResponseEntity editNotice(@PathVariable("id") long id, @RequestBody NoticeDTO dto) { + if (noticeService.noticeExists(id)) { + return new ResponseEntity<>(noticeService.updateNotice(dto), HttpStatus.OK); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Nie znaleziono ogłoszenia o ID: " + id); + } } + +// @GetMapping("/check/{id}") +// public ResponseEntity checkNotice(@PathVariable("id") long id) { +// if (noticeService.noticeExists(id)) { +// return ResponseEntity.ok("Ogłoszenie o ID " + id + " istnieje."); +// } else { +// return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Nie znaleziono ogłoszenia o ID: " + id); +// } +// } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/ClientDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/ClientDTO.java index 62eadb9..09fde80 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/dto/ClientDTO.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/ClientDTO.java @@ -1,13 +1,19 @@ package _11.asktpk.artisanconnectbackend.dto; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; +import jakarta.validation.constraints.Email; + import _11.asktpk.artisanconnectbackend.utils.Enums.Role; @Getter @Setter public class ClientDTO { private Long id; + + @Email + @NotBlank private String email; private String firstName; private String lastName; diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java index 65aa593..59bef40 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java @@ -46,8 +46,20 @@ public class ClientService { return clients.stream().map(this::toDto).toList(); } - public boolean getByID(Long id) { + public Client getClientById(Long id) { + return clientRepository.findById(id).orElse(null); + } + + public boolean clientExists(Long id) { return clientRepository.existsById(id); } + public ClientDTO updateClient(ClientDTO clientDTO) { + Client client = fromDto(clientDTO); + return toDto(clientRepository.save(client)); + } + + public void deleteClient(Long id) { + clientRepository.deleteById(id); + } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/IDatabase.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/IDatabase.java deleted file mode 100644 index 444fc1b..0000000 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/IDatabase.java +++ /dev/null @@ -1,10 +0,0 @@ -package _11.asktpk.artisanconnectbackend.service; - -import _11.asktpk.artisanconnectbackend.entities.Notice; - -import java.util.List; - -public interface IDatabase { - void add(Notice newNotice); - List get(); -} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java index 06409c7..794e64a 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java @@ -70,4 +70,13 @@ public class NoticeService { public void addNotice(Notice notice) { noticeRepository.save(notice); } + + public boolean noticeExists(Long id) { + return noticeRepository.existsById(id); + } + + public NoticeDTO updateNotice(NoticeDTO dto) { + Notice notice = createFromDTO(dto); + return toDTO(noticeRepository.save(notice)); + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3e18cc0..5e9151c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.application.name=ArtisanConnectBackend ## PostgreSQL -spring.datasource.url=jdbc:postgresql://localhost:5432/default_db +spring.datasource.url=jdbc:postgresql://192.168.56.103:5432/default_db spring.datasource.username=postgres spring.datasource.password=postgres diff --git a/src/main/resources/sql/data.sql b/src/main/resources/sql/data.sql index eaed99a..2ab1ead 100644 --- a/src/main/resources/sql/data.sql +++ b/src/main/resources/sql/data.sql @@ -1,2 +1,7 @@ INSERT INTO clients (email, first_name, image, last_name, password, role) -VALUES ('dignissim.tempor.arcu@aol.ca', 'Diana', 'null', 'Harrison', 'password', 'USER'); \ No newline at end of file +VALUES + ('dignissim.tempor.arcu@aol.ca', 'Diana', 'null', 'Harrison', 'password', 'USER'), + ('john.doe@example.com', 'John', 'null', 'Doe', 'password123', 'ADMIN'), + ('jane.smith@example.com', 'Jane', 'null', 'Smith', 'securepass', 'USER'), + ('michael.brown@example.com', 'Michael', 'null', 'Brown', 'mypassword', 'USER'), + ('emily.jones@example.com', 'Emily', 'null', 'Jones', 'passw0rd', 'USER');