diff --git a/pom.xml b/pom.xml index 2194186..ae0b196 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ _11.asktpk ArtisanConnectBackend - 0.0.1-SNAPSHOT + 1.0.0 ArtisanConnectBackend ArtisanConnectBackend @@ -34,31 +34,16 @@ org.springframework.boot spring-boot-starter-data-jpa - - org.springframework.boot - spring-boot-starter-data-rest - - - - - org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-devtools runtime true - - - - - - org.postgresql postgresql @@ -73,15 +58,10 @@ org.springframework.boot spring-boot-starter-actuator - - - - - com.squareup.okhttp3 okhttp - 4.9.3 + 4.12.0 org.projectlombok @@ -93,11 +73,6 @@ jakarta.validation-api 3.1.0 - - - - - diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ImageController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ImageController.java index ce85ce2..fbb173b 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/ImageController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/ImageController.java @@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.controller; import _11.asktpk.artisanconnectbackend.dto.RequestResponseDTO; import _11.asktpk.artisanconnectbackend.service.ImageService; import _11.asktpk.artisanconnectbackend.service.NoticeService; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; @@ -63,18 +64,17 @@ public class ImageController { } @GetMapping("/list/{id}") - public ResponseEntity> getImagesNamesList(@PathVariable("id") Long noticeId) { - if(noticeId == null) { - return ResponseEntity.badRequest().body(Collections.singletonList("Notice ID is invalid or does not exist.")); - } - + public ResponseEntity getImagesNamesList(@PathVariable("id") Long noticeId) { List result; try { + noticeService.getNoticeById(noticeId); result = imageService.getImagesList(noticeId); + return ResponseEntity.ok(result); + } catch (EntityNotFoundException e) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new RequestResponseDTO(e.getMessage())); } catch (Exception e) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Collections.singletonList(e.getMessage())); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new RequestResponseDTO(e.getMessage())); } - return ResponseEntity.ok(result); } @DeleteMapping("/delete/{filename}") diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java index fcafd7c..63bea89 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/NoticeController.java @@ -1,6 +1,8 @@ package _11.asktpk.artisanconnectbackend.controller; import _11.asktpk.artisanconnectbackend.dto.NoticeAdditionDTO; +import _11.asktpk.artisanconnectbackend.dto.NoticeBoostDTO; +import _11.asktpk.artisanconnectbackend.dto.RequestResponseDTO; import _11.asktpk.artisanconnectbackend.service.ClientService; import _11.asktpk.artisanconnectbackend.service.NoticeService; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; @@ -29,7 +31,7 @@ public class NoticeController { } @GetMapping("/get/{id}") - public ResponseEntity getNoticeById(@PathVariable long id) { + public ResponseEntity getNoticeById(@PathVariable long id) { if (noticeService.noticeExists(id)) { return ResponseEntity.ok(noticeService.getNoticeById(id)); } else { @@ -98,23 +100,22 @@ public class NoticeController { } @DeleteMapping("/delete/{id}") - public ResponseEntity deleteNotice(@PathVariable("id") long id) { + public ResponseEntity deleteNotice(@PathVariable("id") long id) { if (noticeService.noticeExists(id)) { noticeService.deleteNotice(id); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.status(HttpStatus.OK).body(new RequestResponseDTO("Pomyślnie usunięto ogłoszenie o ID: " + id)); } else { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new RequestResponseDTO("Nie znaleziono ogłoszenia o ID: " + id)); } } @PostMapping("/boost/{id}") - public ResponseEntity boostNotice(@PathVariable("id") long id) { - long clientId = 1L; - if (!noticeService.isNoticeOwnedByClient(id, clientId)) { - throw new EntityNotFoundException("Ogłoszenie nie istnieje lub nie należy do zalogowanego klienta."); + public ResponseEntity boostNotice(@PathVariable("id") long clientId, @RequestBody NoticeBoostDTO dto) { + if (!noticeService.isNoticeOwnedByClient(dto.getNoticeId(), clientId)) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new RequestResponseDTO("Ogłoszenie nie istnieje lub nie należy do zalogowanego klienta.")); } - noticeService.boostNotice(id); + noticeService.boostNotice(dto.getNoticeId()); - return ResponseEntity.ok("Ogłoszenie zostało pomyślnie wypromowane."); + return ResponseEntity.status(HttpStatus.OK).body(new RequestResponseDTO("Ogłoszenie zostało pomyślnie wypromowane.")); } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeBoostDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeBoostDTO.java new file mode 100644 index 0000000..d008dcc --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeBoostDTO.java @@ -0,0 +1,9 @@ +package _11.asktpk.artisanconnectbackend.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter +public class NoticeBoostDTO { + private Long noticeId; +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java index 493245c..c5fd8be 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java @@ -5,8 +5,10 @@ import _11.asktpk.artisanconnectbackend.entities.Notice; import _11.asktpk.artisanconnectbackend.repository.ClientRepository; import _11.asktpk.artisanconnectbackend.repository.NoticeRepository; import _11.asktpk.artisanconnectbackend.dto.NoticeDTO; -//import _11.asktpk.artisanconnectbackend.service.WishlistService; import jakarta.persistence.EntityNotFoundException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -16,15 +18,21 @@ import java.util.Optional; @Service public class NoticeService { + private static final Logger logger = LogManager.getLogger(NoticeService.class); + + @Value("${file.upload-dir}") + private String uploadDir; private final NoticeRepository noticeRepository; private final ClientRepository clientRepository; private final WishlistService wishlistService; + private final ImageService imageService; - public NoticeService(NoticeRepository noticeRepository, ClientRepository clientRepository, WishlistService wishlistService) { + public NoticeService(NoticeRepository noticeRepository, ClientRepository clientRepository, WishlistService wishlistService, ImageService imageService) { this.noticeRepository = noticeRepository; this.clientRepository = clientRepository; this.wishlistService = wishlistService; + this.imageService = imageService; } public Notice fromDTO(NoticeDTO dto) { @@ -116,6 +124,22 @@ public class NoticeService { public void deleteNotice(Long id) { if (noticeExists(id)) { noticeRepository.deleteById(id); + + List imagesList = new ArrayList<>(); + + try { + imagesList = imageService.getImagesList(id); + } catch (Exception e) { + logger.info("There weren't any images for notice with ID: " + id + ". Skipping deletion of images. Message: " + e.getMessage()); + } + + try { + for (String imageName : imagesList) { + imageService.deleteImage(uploadDir, imageName); + } + } catch (Exception e) { + logger.info("There were some issues while deleting images for notice with ID: " + id + ". Message: " + e.getMessage()); + } } else { throw new EntityNotFoundException("Nie znaleziono ogłoszenia o ID: " + id); }