diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeRequestDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeRequestDTO.java index bc70e84..f81e423 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeRequestDTO.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/NoticeRequestDTO.java @@ -3,6 +3,7 @@ package _11.asktpk.artisanconnectbackend.dto; import _11.asktpk.artisanconnectbackend.utils.Enums; import lombok.Getter; import lombok.Setter; +import java.util.List; @Getter @Setter public class NoticeRequestDTO { @@ -18,6 +19,8 @@ public class NoticeRequestDTO { private Enums.Status status; + private List attributes; + public NoticeRequestDTO() { } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributeValuesRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributeValuesRepository.java new file mode 100644 index 0000000..8e7f330 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributeValuesRepository.java @@ -0,0 +1,14 @@ +package _11.asktpk.artisanconnectbackend.repository; + +import _11.asktpk.artisanconnectbackend.entities.AttributeValues; +import _11.asktpk.artisanconnectbackend.entities.Attributes; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface AttributeValuesRepository extends JpaRepository { + + Optional findByAttributeAndValue(Attributes attribute, String value); +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesNoticeRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesNoticeRepository.java new file mode 100644 index 0000000..2c9a93d --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesNoticeRepository.java @@ -0,0 +1,9 @@ +package _11.asktpk.artisanconnectbackend.repository; + +import _11.asktpk.artisanconnectbackend.entities.AttributesNotice; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AttributesNoticeRepository extends JpaRepository { +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesRepository.java new file mode 100644 index 0000000..2a8bd0e --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/AttributesRepository.java @@ -0,0 +1,12 @@ +package _11.asktpk.artisanconnectbackend.repository; + +import _11.asktpk.artisanconnectbackend.entities.Attributes; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface AttributesRepository extends JpaRepository { + Optional findByName(String name); +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java index 7101724..28c3639 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/NoticeService.java @@ -2,11 +2,8 @@ package _11.asktpk.artisanconnectbackend.service; import _11.asktpk.artisanconnectbackend.dto.AttributeDto; import _11.asktpk.artisanconnectbackend.dto.NoticeRequestDTO; -import _11.asktpk.artisanconnectbackend.entities.AttributesNotice; -import _11.asktpk.artisanconnectbackend.entities.Client; -import _11.asktpk.artisanconnectbackend.entities.Notice; -import _11.asktpk.artisanconnectbackend.repository.ClientRepository; -import _11.asktpk.artisanconnectbackend.repository.NoticeRepository; +import _11.asktpk.artisanconnectbackend.entities.*; +import _11.asktpk.artisanconnectbackend.repository.*; import _11.asktpk.artisanconnectbackend.dto.NoticeResponseDTO; import jakarta.persistence.EntityNotFoundException; import org.apache.logging.log4j.LogManager; @@ -28,11 +25,22 @@ public class NoticeService { private final NoticeRepository noticeRepository; private final ClientRepository clientRepository; private final ImageService imageService; + private final AttributesRepository attributesRepository; + private final AttributeValuesRepository attributeValuesRepository; + private final AttributesNoticeRepository attributesNoticeRepository; - public NoticeService(NoticeRepository noticeRepository, ClientRepository clientRepository, ImageService imageService) { + public NoticeService(NoticeRepository noticeRepository, + ClientRepository clientRepository, + ImageService imageService, + AttributesRepository attributesRepository, + AttributeValuesRepository attributeValuesRepository, + AttributesNoticeRepository attributesNoticeRepository) { this.noticeRepository = noticeRepository; this.clientRepository = clientRepository; this.imageService = imageService; + this.attributesRepository = attributesRepository; + this.attributeValuesRepository = attributeValuesRepository; + this.attributesNoticeRepository = attributesNoticeRepository; } public Notice fromDTO(NoticeRequestDTO dto) { @@ -97,7 +105,38 @@ public class NoticeService { public Long addNotice(NoticeRequestDTO dto) { Notice notice = fromDTO(dto); notice.setPublishDate(LocalDateTime.now()); - return noticeRepository.save(notice).getIdNotice(); + Notice savedNotice = noticeRepository.save(notice); + + if (dto.getAttributes() != null && !dto.getAttributes().isEmpty()) { + saveAttributes(savedNotice.getIdNotice(), dto.getAttributes()); + } + + return savedNotice.getIdNotice(); + } + + private void saveAttributes(Long noticeId, List attributeDtos) { + for (AttributeDto attributeDto : attributeDtos) { + Attributes attribute = attributesRepository.findByName(attributeDto.getName()) + .orElseGet(() -> { + Attributes newAttribute = new Attributes(); + newAttribute.setName(attributeDto.getName()); + return attributesRepository.save(newAttribute); + }); + + AttributeValues attributeValue = attributeValuesRepository + .findByAttributeAndValue(attribute, attributeDto.getValue()) + .orElseGet(() -> { + AttributeValues newValue = new AttributeValues(); + newValue.setAttribute(attribute); + newValue.setValue(attributeDto.getValue()); + return attributeValuesRepository.save(newValue); + }); + + AttributesNotice attributesNotice = new AttributesNotice(); + attributesNotice.setNotice_id(noticeId); + attributesNotice.setAttributeValue(attributeValue); + attributesNoticeRepository.save(attributesNotice); + } } public boolean noticeExists(Long id) {