diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java index 4751d7a..0cfedb3 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ClientController.java @@ -15,7 +15,7 @@ import java.util.List; public class ClientController { private final ClientService clientService; - public ClientController(ClientService clientService, ClientRepository clientRepository) { + public ClientController(ClientService clientService) { this.clientService = clientService; } @@ -28,7 +28,7 @@ public class ClientController { @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); + return new ResponseEntity<>(clientService.updateClient(id, clientDTO),HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java index 674cbae..261da1c 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java @@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.controller; import _11.asktpk.artisanconnectbackend.service.ClientService; import _11.asktpk.artisanconnectbackend.service.NoticeService; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -33,7 +34,7 @@ public class NoticeController { .body("Nie znaleziono klienta o ID: " + dto.getClientId()); } - noticeService.addNotice(noticeService.createFromDTO(dto)); + noticeService.addNotice(noticeService.fromDTO(dto)); return ResponseEntity.status(HttpStatus.CREATED).body("Dodano ogłoszenie."); } @@ -56,7 +57,7 @@ public class NoticeController { errors.add(dto.getClientId().toString()); } else { if(!isError){ - noticeService.addNotice(noticeService.createFromDTO(dto)); + noticeService.addNotice(noticeService.fromDTO(dto)); } } } @@ -68,14 +69,18 @@ public class NoticeController { return response; } - @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); +@PutMapping("/edit/{id}") +public ResponseEntity editNotice(@PathVariable("id") long id, @RequestBody NoticeDTO dto) { + if (noticeService.noticeExists(id)) { + try { + return new ResponseEntity<>(noticeService.updateNotice(id, dto), HttpStatus.OK); + } catch (EntityNotFoundException e) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage()); } + } 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) { diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java index 59bef40..0a015c3 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/ClientService.java @@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.service; import _11.asktpk.artisanconnectbackend.dto.ClientDTO; import _11.asktpk.artisanconnectbackend.entities.Client; import _11.asktpk.artisanconnectbackend.repository.ClientRepository; +import jakarta.persistence.EntityNotFoundException; import org.springframework.stereotype.Service; import java.util.List; @@ -54,9 +55,17 @@ public class ClientService { return clientRepository.existsById(id); } - public ClientDTO updateClient(ClientDTO clientDTO) { - Client client = fromDto(clientDTO); - return toDto(clientRepository.save(client)); + public ClientDTO updateClient(long id, ClientDTO clientDTO) { + Client existingClient = clientRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id)); + + existingClient.setEmail(clientDTO.getEmail()); + existingClient.setFirstName(clientDTO.getFirstName()); + existingClient.setLastName(clientDTO.getLastName()); + existingClient.setImage(clientDTO.getImage()); + existingClient.setRole(clientDTO.getRole()); + + return toDto(clientRepository.save(existingClient)); } public void deleteClient(Long id) { diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java index 794e64a..07d8dff 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java @@ -6,8 +6,6 @@ import _11.asktpk.artisanconnectbackend.repository.ClientRepository; import _11.asktpk.artisanconnectbackend.repository.NoticeRepository; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; import jakarta.persistence.EntityNotFoundException; -import lombok.Builder; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -24,7 +22,7 @@ public class NoticeService { this.clientRepository = clientRepository; } - public Notice createFromDTO(NoticeDTO dto) { + public Notice fromDTO(NoticeDTO dto) { Notice notice = new Notice(); notice.setTitle(dto.getTitle()); notice.setDescription(dto.getDescription()); @@ -75,8 +73,24 @@ public class NoticeService { return noticeRepository.existsById(id); } - public NoticeDTO updateNotice(NoticeDTO dto) { - Notice notice = createFromDTO(dto); - return toDTO(noticeRepository.save(notice)); +public NoticeDTO updateNotice(Long id, NoticeDTO dto) { + Notice existingNotice = noticeRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id)); + + existingNotice.setTitle(dto.getTitle()); + existingNotice.setDescription(dto.getDescription()); + existingNotice.setPrice(dto.getPrice()); + existingNotice.setCategory(dto.getCategory()); + existingNotice.setImages(dto.getImages()); + existingNotice.setStatus(dto.getStatus()); + existingNotice.setAttributesNotices(dto.getAttributesNotices()); + + if (dto.getClientId() != null && !dto.getClientId().equals(existingNotice.getClient().getId())) { + Client client = clientRepository.findById(dto.getClientId()) + .orElseThrow(() -> new EntityNotFoundException("Nie znaleziono klienta o ID: " + dto.getClientId())); + existingNotice.setClient(client); } + + return toDTO(noticeRepository.save(existingNotice)); +} }