Better implementation of updates for notice and client

This commit is contained in:
2025-04-14 09:39:14 +02:00
parent 4fa138203d
commit b0f47b475a
4 changed files with 47 additions and 19 deletions

View File

@@ -15,7 +15,7 @@ import java.util.List;
public class ClientController { public class ClientController {
private final ClientService clientService; private final ClientService clientService;
public ClientController(ClientService clientService, ClientRepository clientRepository) { public ClientController(ClientService clientService) {
this.clientService = clientService; this.clientService = clientService;
} }
@@ -28,7 +28,7 @@ public class ClientController {
@PutMapping("/edit/{id}") @PutMapping("/edit/{id}")
public ResponseEntity updateClient(@PathVariable("id") long id, @RequestBody ClientDTO clientDTO) { public ResponseEntity updateClient(@PathVariable("id") long id, @RequestBody ClientDTO clientDTO) {
if(clientService.clientExists(id)) { if(clientService.clientExists(id)) {
return new ResponseEntity<>(clientService.updateClient(clientDTO),HttpStatus.OK); return new ResponseEntity<>(clientService.updateClient(id, clientDTO),HttpStatus.OK);
} else { } else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND); return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} }

View File

@@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.controller;
import _11.asktpk.artisanconnectbackend.service.ClientService; import _11.asktpk.artisanconnectbackend.service.ClientService;
import _11.asktpk.artisanconnectbackend.service.NoticeService; import _11.asktpk.artisanconnectbackend.service.NoticeService;
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
import jakarta.persistence.EntityNotFoundException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@@ -33,7 +34,7 @@ public class NoticeController {
.body("Nie znaleziono klienta o ID: " + dto.getClientId()); .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."); return ResponseEntity.status(HttpStatus.CREATED).body("Dodano ogłoszenie.");
} }
@@ -56,7 +57,7 @@ public class NoticeController {
errors.add(dto.getClientId().toString()); errors.add(dto.getClientId().toString());
} else { } else {
if(!isError){ if(!isError){
noticeService.addNotice(noticeService.createFromDTO(dto)); noticeService.addNotice(noticeService.fromDTO(dto));
} }
} }
} }
@@ -68,14 +69,18 @@ public class NoticeController {
return response; return response;
} }
@PutMapping("/edit/{id}") @PutMapping("/edit/{id}")
public ResponseEntity editNotice(@PathVariable("id") long id, @RequestBody NoticeDTO dto) { public ResponseEntity<Object> editNotice(@PathVariable("id") long id, @RequestBody NoticeDTO dto) {
if (noticeService.noticeExists(id)) { if (noticeService.noticeExists(id)) {
return new ResponseEntity<>(noticeService.updateNotice(dto), HttpStatus.OK); try {
} else { return new ResponseEntity<>(noticeService.updateNotice(id, dto), HttpStatus.OK);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Nie znaleziono ogłoszenia o ID: " + id); } 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}") // @GetMapping("/check/{id}")
// public ResponseEntity<String> checkNotice(@PathVariable("id") long id) { // public ResponseEntity<String> checkNotice(@PathVariable("id") long id) {

View File

@@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.service;
import _11.asktpk.artisanconnectbackend.dto.ClientDTO; import _11.asktpk.artisanconnectbackend.dto.ClientDTO;
import _11.asktpk.artisanconnectbackend.entities.Client; import _11.asktpk.artisanconnectbackend.entities.Client;
import _11.asktpk.artisanconnectbackend.repository.ClientRepository; import _11.asktpk.artisanconnectbackend.repository.ClientRepository;
import jakarta.persistence.EntityNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@@ -54,9 +55,17 @@ public class ClientService {
return clientRepository.existsById(id); return clientRepository.existsById(id);
} }
public ClientDTO updateClient(ClientDTO clientDTO) { public ClientDTO updateClient(long id, ClientDTO clientDTO) {
Client client = fromDto(clientDTO); Client existingClient = clientRepository.findById(id)
return toDto(clientRepository.save(client)); .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) { public void deleteClient(Long id) {

View File

@@ -6,8 +6,6 @@ import _11.asktpk.artisanconnectbackend.repository.ClientRepository;
import _11.asktpk.artisanconnectbackend.repository.NoticeRepository; import _11.asktpk.artisanconnectbackend.repository.NoticeRepository;
import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO;
import jakarta.persistence.EntityNotFoundException; import jakarta.persistence.EntityNotFoundException;
import lombok.Builder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
@@ -24,7 +22,7 @@ public class NoticeService {
this.clientRepository = clientRepository; this.clientRepository = clientRepository;
} }
public Notice createFromDTO(NoticeDTO dto) { public Notice fromDTO(NoticeDTO dto) {
Notice notice = new Notice(); Notice notice = new Notice();
notice.setTitle(dto.getTitle()); notice.setTitle(dto.getTitle());
notice.setDescription(dto.getDescription()); notice.setDescription(dto.getDescription());
@@ -75,8 +73,24 @@ public class NoticeService {
return noticeRepository.existsById(id); return noticeRepository.existsById(id);
} }
public NoticeDTO updateNotice(NoticeDTO dto) { public NoticeDTO updateNotice(Long id, NoticeDTO dto) {
Notice notice = createFromDTO(dto); Notice existingNotice = noticeRepository.findById(id)
return toDTO(noticeRepository.save(notice)); .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));
}
} }