From 5f372b414585292c6d83fbcfcbae98781e98cc26 Mon Sep 17 00:00:00 2001 From: 88dldl Date: Wed, 21 May 2025 06:16:42 +0900 Subject: [PATCH 1/6] =?UTF-8?q?:bug:=20[Fix]=20=ED=94=8C=EB=A1=9C=EC=9A=B0?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20request=EC=97=90=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=EC=9E=90=20=EC=88=98=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=EA=B0=92=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java b/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java index 78fa78db..7171de9b 100644 --- a/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java +++ b/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java @@ -24,7 +24,7 @@ public static class PostFlowDTO { String title; List recreationSpecList; Integer totalPlayTime; - Integer participants; + Integer participants = 0; List ageList; List purposeList; List keywordList; From ed65950d3fca05a8c3abab6cb15e3b9c914d6946 Mon Sep 17 00:00:00 2001 From: 88dldl Date: Wed, 21 May 2025 07:15:42 +0900 Subject: [PATCH 2/6] =?UTF-8?q?:recycle:=20[Refactor]=20Flow=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20=EC=88=98=EC=A0=95=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EA=B3=B5=ED=86=B5=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=AA=A8=EB=93=88=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avab/service/impl/FlowServiceImpl.java | 249 +++++++++--------- 1 file changed, 118 insertions(+), 131 deletions(-) diff --git a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java index 798fa0a0..d4ff20fd 100644 --- a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java +++ b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java @@ -7,6 +7,7 @@ import java.util.Optional; import java.util.Random; +import org.jetbrains.annotations.Nullable; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -143,10 +144,7 @@ public void incrementViewCountById(Long flowId, Long viewCount) { @Override @Transactional public Boolean toggleScrapeFlow(User user, Long flowId) { - Flow flow = - flowRepository - .findById(flowId) - .orElseThrow(() -> new FlowException(ErrorStatus.FLOW_NOT_FOUND)); + Flow flow = getFlow(flowId); Optional flowFavorite = flowScrapRepository.findByFlowAndUser(flow, user); if (flowFavorite.isPresent()) { @@ -165,77 +163,27 @@ public Boolean toggleScrapeFlow(User user, Long flowId) { @Transactional public Flow postFlow(PostFlowDTO request, User user) { - Map recreationMap = new HashMap<>(); - Map customRecreationMap = new HashMap<>(); - - request.getRecreationSpecList() - .forEach( - spec -> { - if (spec.getRecreationId() != null) { - Recreation recreation = - recreationRepository - .findById(spec.getRecreationId()) - .orElseThrow( - () -> - new RecreationException( - ErrorStatus - .RECREATION_NOT_FOUND)); - recreationMap.put(spec.getSeq(), recreation); - } else { - List customRecreationKeywordList = - new ArrayList<>(); - if (spec.getCustomKeywordList() != null) { - customRecreationKeywordList = - spec.getCustomKeywordList().stream() - .map( - keyword -> - recreationKeywordRepository - .findByKeyword(keyword) - .get()) - .toList(); - } - - CustomRecreation customRecreation = - FlowConverter.toCustomRecreation( - spec, customRecreationKeywordList); - - customRecreationRepository.save(customRecreation); - customRecreationMap.put(spec.getSeq(), customRecreation); - } - }); + Map recreationMap = extractRecreationMap(request); + Map customRecreationMap = extractCustomRecreationMap(request); List recreationKeywordList = - request.getKeywordList().stream() - .map(keyword -> recreationKeywordRepository.findByKeyword(keyword).get()) - .toList(); - + getRecreationKeywords(request.getKeywordList()); List recreationPurposeList = - request.getPurposeList().stream() - .map(purpose -> recreationPurposeRepository.findByPurpose(purpose).get()) - .toList(); - - int num = flowNumber.nextInt(4); - Flow flow = - FlowConverter.toFlow( - request, - user, - flowImageUrl[num], - recreationMap, - customRecreationMap, - recreationKeywordList, - recreationPurposeList); - - flowRepository.save(flow); - - return flow; + getRecreationPurposes(request.getPurposeList()); + + return createOrUpdateFlow( + request, + user, + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList, + null); } @Transactional public void deleteFlow(Long flowId, User user) { - Flow flow = - flowRepository - .findById(flowId) - .orElseThrow(() -> new FlowException(ErrorStatus.FLOW_NOT_FOUND)); + Flow flow = getFlow(flowId); if (!flow.isAuthoredBy(user)) { throw new FlowException(ErrorStatus.FLOW_DELETE_UNAUTHORIZED); } @@ -259,10 +207,7 @@ public List recommendFlows( @Override @Transactional public Flow updateFlow(PostFlowDTO request, User user, Long flowId) { - Flow flow = - flowRepository - .findById(flowId) - .orElseThrow(() -> new FlowException(ErrorStatus.FLOW_NOT_FOUND)); + Flow flow = getFlow(flowId); // custom, ageList, purposeList, genderList, keywordList는 시작하자마자 삭제 (일단 모두 삭제로 구현) flowRecreationKeywordRepository.deleteAllByFlow(flow); @@ -271,68 +216,22 @@ public Flow updateFlow(PostFlowDTO request, User user, Long flowId) { flowAgeRepository.deleteAllByFlow(flow); flowRecreationRepository.deleteAllByFlow(flow); - Map recreationMap = new HashMap<>(); - Map customRecreationMap = new HashMap<>(); - - request.getRecreationSpecList() - .forEach( - spec -> { - if (spec.getRecreationId() != null) { - Recreation recreation = - recreationRepository - .findById(spec.getRecreationId()) - .orElseThrow( - () -> - new RecreationException( - ErrorStatus - .RECREATION_NOT_FOUND)); - recreationMap.put(spec.getSeq(), recreation); - } else { - List customRecreationKeywordList = - new ArrayList<>(); - if (spec.getCustomKeywordList() != null) { - customRecreationKeywordList = - spec.getCustomKeywordList().stream() - .map( - keyword -> - recreationKeywordRepository - .findByKeyword(keyword) - .get()) - .toList(); - } - - CustomRecreation customRecreation = - FlowConverter.toCustomRecreation( - spec, customRecreationKeywordList); - - customRecreationRepository.save(customRecreation); - customRecreationMap.put(spec.getSeq(), customRecreation); - } - }); + Map recreationMap = extractRecreationMap(request); + Map customRecreationMap = extractCustomRecreationMap(request); List recreationKeywordList = - request.getKeywordList().stream() - .map(keyword -> recreationKeywordRepository.findByKeyword(keyword).get()) - .toList(); - + getRecreationKeywords(request.getKeywordList()); List recreationPurposeList = - request.getPurposeList().stream() - .map(purpose -> recreationPurposeRepository.findByPurpose(purpose).get()) - .toList(); - - int num = flowNumber.nextInt(4); - Flow updateFlow = - FlowConverter.toUpdateFlow( - flowId, - request, - user, - flowImageUrl[num], - recreationMap, - customRecreationMap, - recreationKeywordList, - recreationPurposeList); - - return flowRepository.save(updateFlow); + getRecreationPurposes(request.getPurposeList()); + + return createOrUpdateFlow( + request, + user, + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList, + flowId); } @Override @@ -340,4 +239,92 @@ public Flow updateFlow(PostFlowDTO request, User user, Long flowId) { public void incrementViewCountLast7Days(Long flowId, Long viewCount) { flowRepository.updateViewCountLast7DaysById(flowId, viewCount); } + + private Map extractRecreationMap(PostFlowDTO request) { + Map recreationMap = new HashMap<>(); + + for (var spec : request.getRecreationSpecList()) { + if (spec.getRecreationId() != null) { + Recreation recreation = getRecreation(spec.getRecreationId()); + recreationMap.put(spec.getSeq(), recreation); + } + } + + return recreationMap; + } + + private Map extractCustomRecreationMap(PostFlowDTO request) { + Map customRecreationMap = new HashMap<>(); + + for (var spec : request.getRecreationSpecList()) { + if (spec.getRecreationId() == null) { + List keywords = new ArrayList<>(); + if (spec.getCustomKeywordList() != null) { + keywords = getRecreationKeywords(spec.getCustomKeywordList()); + } + CustomRecreation customRecreation = + FlowConverter.toCustomRecreation(spec, keywords); + customRecreationRepository.save(customRecreation); + customRecreationMap.put(spec.getSeq(), customRecreation); + } + } + return customRecreationMap; + } + + private Flow createOrUpdateFlow( + PostFlowDTO request, + User user, + Map recreationMap, + Map customRecreationMap, + List recreationKeywordList, + List recreationPurposeList, + @Nullable Long flowId) { + int num = flowNumber.nextInt(4); + + Flow flow = + (flowId == null) + ? FlowConverter.toFlow( + request, + user, + flowImageUrl[num], + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList) + : FlowConverter.toUpdateFlow( + flowId, + request, + user, + flowImageUrl[num], + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList); + + return flowRepository.save(flow); + } + + private Flow getFlow(Long flowId) { + return flowRepository + .findById(flowId) + .orElseThrow(() -> new FlowException(ErrorStatus.FLOW_NOT_FOUND)); + } + + private Recreation getRecreation(Long recreationId) { + return recreationRepository + .findById(recreationId) + .orElseThrow(() -> new RecreationException(ErrorStatus.RECREATION_NOT_FOUND)); + } + + private List getRecreationKeywords(List keywords) { + return keywords.stream() + .map(keyword -> recreationKeywordRepository.findByKeyword(keyword).get()) + .toList(); + } + + private List getRecreationPurposes(List purposes) { + return purposes.stream() + .map(purpose -> recreationPurposeRepository.findByPurpose(purpose).get()) + .toList(); + } } From ac610b2e99045cc60309127f7b1806f196df6457 Mon Sep 17 00:00:00 2001 From: 88dldl Date: Wed, 21 May 2025 07:34:18 +0900 Subject: [PATCH 3/6] =?UTF-8?q?:recycle:=20[Refactor]=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=9E=AC=EC=82=AC=EC=9A=A9=EC=84=B1=20=ED=96=A5=EC=83=81?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=B4=20Flow=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=84=A4=EC=A0=95=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avab/avab/converter/FlowConverter.java | 241 +++++++++--------- 1 file changed, 117 insertions(+), 124 deletions(-) diff --git a/src/main/java/com/avab/avab/converter/FlowConverter.java b/src/main/java/com/avab/avab/converter/FlowConverter.java index 085ed2f8..01d2cf0d 100644 --- a/src/main/java/com/avab/avab/converter/FlowConverter.java +++ b/src/main/java/com/avab/avab/converter/FlowConverter.java @@ -9,6 +9,7 @@ import com.avab.avab.domain.CustomRecreation; import com.avab.avab.domain.Flow; +import com.avab.avab.domain.Flow.FlowBuilder; import com.avab.avab.domain.FlowAge; import com.avab.avab.domain.FlowGender; import com.avab.avab.domain.Recreation; @@ -86,74 +87,15 @@ public static Flow toFlow( List recreationKeywordList, List recreationPurposeList) { - Flow flow = - Flow.builder() - .participants(request.getParticipants()) - .totalPlayTime(request.getTotalPlayTime()) - .title(request.getTitle()) - .imageUrl(imageUrl) - .author(user) - .build(); + Flow flow = buildFlow(null, request, user, imageUrl); - List flowRecreationList = - request.getRecreationSpecList().stream() - .map( - spec -> { - // Recreation에 대한 FlowRecreation 생성 - if (recreationMap.containsKey(spec.getSeq())) { - return FlowRecreation.builder() - .flow(flow) - .recreation(recreationMap.get(spec.getSeq())) - .customPlayTime(spec.getCustomPlayTime()) - .seq(spec.getSeq()) - .build(); - } - // CustomRecreation에 대한 FlowRecreation 생성 - return FlowRecreation.builder() - .flow(flow) - .customRecreation( - customRecreationMap.get(spec.getSeq())) - .customPlayTime(spec.getCustomPlayTime()) - .seq(spec.getSeq()) - .build(); - }) - .toList(); - - List flowRecreationKeywordList = - recreationKeywordList.stream() - .map( - recreationKeyword -> - FlowRecreationKeyword.builder() - .flow(flow) - .keyword(recreationKeyword) - .build()) - .toList(); - - List flowRecreationPurposeList = - recreationPurposeList.stream() - .map( - recreationPurpose -> - FlowRecreationPurpose.builder() - .flow(flow) - .purpose(recreationPurpose) - .build()) - .toList(); - - List flowAgeList = - request.getAgeList().stream() - .map(age -> FlowAge.builder().age(age).flow(flow).build()) - .toList(); - - List flowGenderList = - request.getGenderList().stream() - .map(gender -> FlowGender.builder().flow(flow).gender(gender).build()) - .toList(); - - flow.getFlowRecreationList().addAll(flowRecreationList); - flow.getFlowRecreationKeywordList().addAll(flowRecreationKeywordList); - flow.getFlowRecreationPurposeList().addAll(flowRecreationPurposeList); - flow.getAgeList().addAll(flowAgeList); - flow.getGenderList().addAll(flowGenderList); + populateFlowDetails( + request, + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList, + flow); return flow; } @@ -284,76 +226,127 @@ public static Flow toUpdateFlow( Map customRecreationMap, List recreationKeywordList, List recreationPurposeList) { - Flow flow = + Flow flow = buildFlow(flowId, request, user, imageUrl); + + populateFlowDetails( + request, + recreationMap, + customRecreationMap, + recreationKeywordList, + recreationPurposeList, + flow); + + return flow; + } + + private static Flow buildFlow(Long flowId, PostFlowDTO request, User user, String imageUrl) { + FlowBuilder builder = Flow.builder() - .id(flowId) .participants(request.getParticipants()) .totalPlayTime(request.getTotalPlayTime()) - .imageUrl(imageUrl) .title(request.getTitle()) - .author(user) - .build(); - - List flowRecreationList = - request.getRecreationSpecList().stream() - .map( - spec -> { - // Recreation에 대한 FlowRecreation 생성 - if (recreationMap.containsKey(spec.getSeq())) { - return FlowRecreation.builder() - .flow(flow) - .recreation(recreationMap.get(spec.getSeq())) - .customPlayTime(spec.getCustomPlayTime()) - .seq(spec.getSeq()) - .build(); - } - // CustomRecreation에 대한 FlowRecreation 생성 - return FlowRecreation.builder() - .flow(flow) - .customRecreation( - customRecreationMap.get(spec.getSeq())) - .customPlayTime(spec.getCustomPlayTime()) - .seq(spec.getSeq()) - .build(); - }) - .toList(); - - List flowRecreationKeywordList = - recreationKeywordList.stream() - .map( - recreationKeyword -> - FlowRecreationKeyword.builder() - .flow(flow) - .keyword(recreationKeyword) - .build()) - .toList(); + .imageUrl(imageUrl) + .author(user); - List flowRecreationPurposeList = - recreationPurposeList.stream() - .map( - recreationPurpose -> - FlowRecreationPurpose.builder() - .flow(flow) - .purpose(recreationPurpose) - .build()) - .toList(); + if (flowId != null) { + builder.id(flowId); + } - List flowAgeList = - request.getAgeList().stream() - .map(age -> FlowAge.builder().age(age).flow(flow).build()) - .toList(); + return builder.build(); + } - List flowGenderList = - request.getGenderList().stream() - .map(gender -> FlowGender.builder().flow(flow).gender(gender).build()) - .toList(); + private static void populateFlowDetails( + PostFlowDTO request, + Map recreationMap, + Map customRecreationMap, + List recreationKeywordList, + List recreationPurposeList, + Flow flow) { + List recreations = + getFlowRecreations(request, recreationMap, customRecreationMap, flow); + List keywords = + getFlowRecreationKeywords(recreationKeywordList, flow); + List purposes = + getFlowRecreationPurposes(recreationPurposeList, flow); + List ages = getFlowAges(request.getAgeList(), flow); + List genders = getFlowGenders(request.getGenderList(), flow); + + attachFlowDetails(flow, recreations, keywords, purposes, ages, genders); + } + private static void attachFlowDetails( + Flow flow, + List flowRecreationList, + List flowRecreationKeywordList, + List flowRecreationPurposeList, + List flowAgeList, + List flowGenderList) { flow.getFlowRecreationList().addAll(flowRecreationList); flow.getFlowRecreationKeywordList().addAll(flowRecreationKeywordList); flow.getFlowRecreationPurposeList().addAll(flowRecreationPurposeList); flow.getAgeList().addAll(flowAgeList); flow.getGenderList().addAll(flowGenderList); + } - return flow; + private static List getFlowRecreations( + PostFlowDTO request, + Map recreationMap, + Map customRecreationMap, + Flow flow) { + return request.getRecreationSpecList().stream() + .map( + spec -> { + // Recreation에 대한 FlowRecreation 생성 + if (recreationMap.containsKey(spec.getSeq())) { + return FlowRecreation.builder() + .flow(flow) + .recreation(recreationMap.get(spec.getSeq())) + .customPlayTime(spec.getCustomPlayTime()) + .seq(spec.getSeq()) + .build(); + } + // CustomRecreation에 대한 FlowRecreation 생성 + return FlowRecreation.builder() + .flow(flow) + .customRecreation(customRecreationMap.get(spec.getSeq())) + .customPlayTime(spec.getCustomPlayTime()) + .seq(spec.getSeq()) + .build(); + }) + .toList(); + } + + private static List getFlowRecreationKeywords( + List recreationKeywordList, Flow flow) { + return recreationKeywordList.stream() + .map( + recreationKeyword -> + FlowRecreationKeyword.builder() + .flow(flow) + .keyword(recreationKeyword) + .build()) + .toList(); + } + + private static List getFlowRecreationPurposes( + List recreationPurposeList, Flow flow) { + return recreationPurposeList.stream() + .map( + recreationPurpose -> + FlowRecreationPurpose.builder() + .flow(flow) + .purpose(recreationPurpose) + .build()) + .toList(); + } + + private static List getFlowAges(List ages, Flow flow) { + return ages.stream().map(age -> FlowAge.builder().age(age).flow(flow).build()).toList(); + } + + private static List getFlowGenders(List genders, Flow flow) { + return genders.stream() + .map(gender -> FlowGender.builder().flow(flow).gender(gender).build()) + .toList(); } } From f41224dd57dd1f87e24cbfa5c1c5789c45c76de7 Mon Sep 17 00:00:00 2001 From: 88dldl Date: Fri, 23 May 2025 15:30:33 +0900 Subject: [PATCH 4/6] =?UTF-8?q?:recycle:=20[Refactor]=20Participants=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EA=B3=84=EC=B8=B5=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/avab/avab/dto/reqeust/FlowRequestDTO.java | 2 +- .../com/avab/avab/service/impl/FlowServiceImpl.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java b/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java index 7171de9b..78fa78db 100644 --- a/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java +++ b/src/main/java/com/avab/avab/dto/reqeust/FlowRequestDTO.java @@ -24,7 +24,7 @@ public static class PostFlowDTO { String title; List recreationSpecList; Integer totalPlayTime; - Integer participants = 0; + Integer participants; List ageList; List purposeList; List keywordList; diff --git a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java index d4ff20fd..e1e3764a 100644 --- a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java +++ b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java @@ -163,6 +163,8 @@ public Boolean toggleScrapeFlow(User user, Long flowId) { @Transactional public Flow postFlow(PostFlowDTO request, User user) { + normalizeRequest(request); + Map recreationMap = extractRecreationMap(request); Map customRecreationMap = extractCustomRecreationMap(request); @@ -181,6 +183,17 @@ public Flow postFlow(PostFlowDTO request, User user) { null); } + private PostFlowDTO normalizeRequest(PostFlowDTO request) { + int normalizedParticipants = normalizeParticipants(request.getParticipants()); + request.setParticipants(normalizedParticipants); + + return request; + } + + private int normalizeParticipants(Integer participants) { + return participants != null ? participants : 0; + } + @Transactional public void deleteFlow(Long flowId, User user) { Flow flow = getFlow(flowId); From dbea5bbc5abb7b79f8027708fc6d04c8701aebb2 Mon Sep 17 00:00:00 2001 From: 88dldl Date: Thu, 19 Jun 2025 22:55:08 +0900 Subject: [PATCH 5/6] =?UTF-8?q?:recycle:=20[Refactor]=20Participants=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=EB=8B=A8=20null=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/avab/avab/service/impl/FlowServiceImpl.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java index e1e3764a..d4ff20fd 100644 --- a/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java +++ b/src/main/java/com/avab/avab/service/impl/FlowServiceImpl.java @@ -163,8 +163,6 @@ public Boolean toggleScrapeFlow(User user, Long flowId) { @Transactional public Flow postFlow(PostFlowDTO request, User user) { - normalizeRequest(request); - Map recreationMap = extractRecreationMap(request); Map customRecreationMap = extractCustomRecreationMap(request); @@ -183,17 +181,6 @@ public Flow postFlow(PostFlowDTO request, User user) { null); } - private PostFlowDTO normalizeRequest(PostFlowDTO request) { - int normalizedParticipants = normalizeParticipants(request.getParticipants()); - request.setParticipants(normalizedParticipants); - - return request; - } - - private int normalizeParticipants(Integer participants) { - return participants != null ? participants : 0; - } - @Transactional public void deleteFlow(Long flowId, User user) { Flow flow = getFlow(flowId); From 004866953e6a29f88144c4bb84c40dc73aa87e1c Mon Sep 17 00:00:00 2001 From: 88dldl Date: Thu, 19 Jun 2025 23:06:05 +0900 Subject: [PATCH 6/6] =?UTF-8?q?:recycle:=20[Refactor]=20NPE=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EC=9C=84=ED=95=B4=20Participants,=20Total?= =?UTF-8?q?PlayTime=20=EB=B9=84=EA=B5=90=20=EB=A1=9C=EC=A7=81=EC=97=90=20n?= =?UTF-8?q?ull=20=EC=B2=B4=ED=81=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../avab/repository/FlowCustomRepositoryImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/avab/avab/repository/FlowCustomRepositoryImpl.java b/src/main/java/com/avab/avab/repository/FlowCustomRepositoryImpl.java index 34865886..644dea2e 100644 --- a/src/main/java/com/avab/avab/repository/FlowCustomRepositoryImpl.java +++ b/src/main/java/com/avab/avab/repository/FlowCustomRepositoryImpl.java @@ -65,9 +65,10 @@ public List recommendFlows( purposesForComparison.stream().filter(purpose::contains).count(); // 시간(필수) 비교 + Integer nowTotalPlayTime = nowFlow.getTotalPlayTime(); long loePlayTime = - nowFlow.getTotalPlayTime() <= totalPlayTime - ? -Math.abs(nowFlow.getTotalPlayTime() - totalPlayTime) + (nowTotalPlayTime != null && nowTotalPlayTime <= totalPlayTime) + ? -Math.abs(nowTotalPlayTime - totalPlayTime) : -10000; // 겹치는 키워드 체크 @@ -84,9 +85,12 @@ public List recommendFlows( : 0L; // 인원 + Integer nowParticipants = nowFlow.getParticipants(); int participantsMatch = - participant != null && participant > nowFlow.getParticipants() - ? participant - nowFlow.getParticipants() + (participant != null + && nowParticipants != null + && participant > nowParticipants) + ? participant - nowParticipants : 0; // 연령대 겹치는 개수 확인