From b169337ef45021515f84ee6d76dd2b3532887cb6 Mon Sep 17 00:00:00 2001 From: priverg163 Date: Thu, 17 Oct 2024 20:51:02 +0900 Subject: [PATCH] Refactor :: change damageResponse get value --- .../domain/damage/mapper/DamageMapper.java | 3 ++- .../damage/service/DamageServiceImpl.java | 24 +++++++++++++++---- .../global/util/NfcManageUtils.java | 11 +++++---- .../keepserver/global/util/NfcValidator.java | 13 ++++++++++ 4 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/keepgoing/keepserver/global/util/NfcValidator.java diff --git a/src/main/java/com/keepgoing/keepserver/domain/damage/mapper/DamageMapper.java b/src/main/java/com/keepgoing/keepserver/domain/damage/mapper/DamageMapper.java index 335a209..6b16123 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/damage/mapper/DamageMapper.java +++ b/src/main/java/com/keepgoing/keepserver/domain/damage/mapper/DamageMapper.java @@ -9,7 +9,8 @@ @Mapper(componentModel = "spring") public interface DamageMapper { - DamageResponseDto entityToDto(Damage damage); + @Mapping(source = "nfcCode", target = "code") + DamageResponseDto entityToDto(Damage damage, String nfcCode); @Mapping(target = "reportDate", expression = "java(java.time.LocalDateTime.now())") Damage dtoToEntity(DamageCreateRequest damageCreateRequest); diff --git a/src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageServiceImpl.java b/src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageServiceImpl.java index 5c8ad2c..958a1aa 100644 --- a/src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageServiceImpl.java +++ b/src/main/java/com/keepgoing/keepserver/domain/damage/service/DamageServiceImpl.java @@ -1,5 +1,6 @@ package com.keepgoing.keepserver.domain.damage.service; +import com.keepgoing.keepserver.domain.book.domain.repository.BookRepository; import com.keepgoing.keepserver.domain.damage.entity.Damage; import com.keepgoing.keepserver.domain.damage.enums.IssueType; import com.keepgoing.keepserver.domain.damage.mapper.DamageMapper; @@ -9,6 +10,7 @@ import com.keepgoing.keepserver.global.common.BaseResponse; import com.keepgoing.keepserver.global.exception.damage.DamageError; import com.keepgoing.keepserver.global.exception.damage.DamageException; +import com.keepgoing.keepserver.global.util.NfcValidator; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -22,6 +24,8 @@ public class DamageServiceImpl implements DamageService { private final DamageRepository damageRepository; private final DamageMapper damageMapper; + private final NfcValidator validator; + private final BookRepository bookRepository; @Override @Transactional @@ -35,9 +39,11 @@ public BaseResponse reportDamage(DamageCreateRequest request) { @Override @Transactional(readOnly = true) public BaseResponse getAllDamages() { - List damages = damageRepository.findAll().stream() - .map(damageMapper::entityToDto) - .toList(); + List damages = damageRepository.findAll().stream().map(damage -> { + String nfcCode = getBookTitleIfBookNfc(damage.getCode()); + return damageMapper.entityToDto(damage, nfcCode); + }).toList(); + if (damages.isEmpty()) { throw new DamageException(DamageError.INVALID_DAMAGE); } @@ -48,7 +54,8 @@ public BaseResponse getAllDamages() { @Transactional(readOnly = true) public BaseResponse getDamage(Long id) { Damage damage = damageRepository.findById(id).orElseThrow(DamageException::invalidDamage); - return new BaseResponse(HttpStatus.OK, "선택한 신고 내역 조회 성공", damageMapper.entityToDto(damage)); + String nfcCode = getBookTitleIfBookNfc(damage.getCode()); + return new BaseResponse(HttpStatus.OK, "선택한 신고 내역 조회 성공", damageMapper.entityToDto(damage, nfcCode)); } @Override @@ -59,6 +66,13 @@ public BaseResponse deleteDamage(Long id) { return new BaseResponse(HttpStatus.OK, "신고 내역 삭제 성공"); } + private String getBookTitleIfBookNfc(String nfcValue) { + if (validator.isBookNfc(nfcValue)) { + return bookRepository.findBookByNfcCode(nfcValue).getBookName(); + } + return nfcValue; + } + private void validateDuplicate(String code, IssueType issueType) { boolean isDuplicate = damageRepository.existsByCodeAndIssueType(code, issueType); if (isDuplicate) { @@ -68,6 +82,6 @@ private void validateDuplicate(String code, IssueType issueType) { private void findDamageById(Long id) { damageRepository.findById(id) - .orElseThrow(() -> new DamageException(DamageError.INVALID_DAMAGE)); + .orElseThrow(() -> new DamageException(DamageError.INVALID_DAMAGE)); } } diff --git a/src/main/java/com/keepgoing/keepserver/global/util/NfcManageUtils.java b/src/main/java/com/keepgoing/keepserver/global/util/NfcManageUtils.java index 9f4a5c9..134b09f 100644 --- a/src/main/java/com/keepgoing/keepserver/global/util/NfcManageUtils.java +++ b/src/main/java/com/keepgoing/keepserver/global/util/NfcManageUtils.java @@ -11,9 +11,10 @@ @Setter @Component public class NfcManageUtils { - private final String characterTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + private static final String CHARACTER_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + private static final String BOOK_NFC_PATTERN = "^[A-Z0-9]{8}$"; + private static final int CERT_CHAR_LENGTH = 8; // NFC 길이 - private int certCharLength = 8; private final SecureRandom random; public NfcManageUtils() { @@ -26,11 +27,11 @@ public NfcManageUtils() { } public String executeGenerate() { - int tableLength = characterTable.length(); + int tableLength = CHARACTER_TABLE.length(); StringBuilder sb = new StringBuilder(); - for (int i = 0; i < certCharLength; i++) { - sb.append(characterTable.charAt(random.nextInt(tableLength))); + for (int i = 0; i < CERT_CHAR_LENGTH; i++) { + sb.append(CHARACTER_TABLE.charAt(random.nextInt(tableLength))); } return sb.toString(); diff --git a/src/main/java/com/keepgoing/keepserver/global/util/NfcValidator.java b/src/main/java/com/keepgoing/keepserver/global/util/NfcValidator.java new file mode 100644 index 0000000..054c13f --- /dev/null +++ b/src/main/java/com/keepgoing/keepserver/global/util/NfcValidator.java @@ -0,0 +1,13 @@ +package com.keepgoing.keepserver.global.util; + +import org.springframework.stereotype.Component; + +@Component +public class NfcValidator { + private static final String BOOK_NFC_PATTERN = "^[A-Z0-9]{8}$"; + + public boolean isBookNfc(String nfcValue) { + return nfcValue.matches(BOOK_NFC_PATTERN); + } +} +