From 0a860052abbbea70ab70d8909bad5423cbe28083 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Wed, 1 Jan 2025 16:50:38 +0900 Subject: [PATCH 01/23] :sparkles: edit : edit get crew home and info page status code --- .../crew/controller/model/enums/CrewHttpResponseCode.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewHttpResponseCode.java b/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewHttpResponseCode.java index abed730b..9ed75ccb 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewHttpResponseCode.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewHttpResponseCode.java @@ -7,8 +7,8 @@ @RequiredArgsConstructor public enum CrewHttpResponseCode implements CustomResponseCode { CREW_CREATED("CSH2011", HttpStatus.CREATED, "크루 생성 성공", "크루 생성 성공"), - CREW_HOME_INFO_FETCHED("CSH2002", HttpStatus.OK, "크루 홈 데이터 조회 성공", "크루 홈 데이터 조회 성공"), - CREW_FETCHED("CSH2003", HttpStatus.OK, "크루 정보 조회 성공", "크루 정보 조회 성공"), + CREW_HOME_FETCHED("CSH2002", HttpStatus.OK, "크루 홈 조회 성공", "크루 홈 조회 성공"), + CREW_INFO_PAGE_FETCHED("CSH2003", HttpStatus.OK, "크루 정보 페이지 조회 성공", "크루 정보 페이지 조회 성공"), CREW_UPDATED("CSH2004", HttpStatus.OK, "크루 정보 수정 성공", "크루 정보 수정 성공"), CREW_JOIN_RULE_UPDATED("CSH2005", HttpStatus.OK, "크루 가입 방식 수정 성공", "크루 가입 방식 수정 성공"), CREW_SEARCH_SUCCESS("CSH2006", HttpStatus.OK, "크루 검색 성공", "크루 검색 성공"), From fd92bbe593f683bb9324c8db0c0b22854b1cc22a Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Wed, 1 Jan 2025 22:39:37 +0900 Subject: [PATCH 02/23] :recycle: refactor : rename CommandCrewService --- .../{CrewCommandService.java => CommandCrewService.java} | 2 +- .../domains/crew/service/usecase/CreateCrewUseCaseImpl.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/com/run_us/server/domains/crew/service/{CrewCommandService.java => CommandCrewService.java} (94%) diff --git a/src/main/java/com/run_us/server/domains/crew/service/CrewCommandService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java similarity index 94% rename from src/main/java/com/run_us/server/domains/crew/service/CrewCommandService.java rename to src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 46943739..7907bba9 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CrewCommandService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -9,7 +9,7 @@ @Service @RequiredArgsConstructor -public class CrewCommandService { +public class CommandCrewService { private final CrewRepository crewRepository; diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CreateCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CreateCrewUseCaseImpl.java index d35e2d20..686fbf06 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CreateCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CreateCrewUseCaseImpl.java @@ -4,7 +4,7 @@ import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; import com.run_us.server.domains.crew.controller.model.response.CreateCrewResponse; import com.run_us.server.domains.crew.domain.Crew; -import com.run_us.server.domains.crew.service.CrewCommandService; +import com.run_us.server.domains.crew.service.CommandCrewService; import com.run_us.server.domains.user.domain.User; import com.run_us.server.domains.user.service.UserService; import com.run_us.server.global.common.SuccessResponse; @@ -18,13 +18,13 @@ public class CreateCrewUseCaseImpl implements CreateCrewUseCase { private final UserService userService; - private final CrewCommandService crewCommandService; + private final CommandCrewService commandCrewService; @Override @Transactional public SuccessResponse createCrew(CreateCrewRequest requestDto, String creatorId) { User creator = userService.getUserByPublicId(creatorId); - Crew crew = crewCommandService.saveCrew(requestDto, creator); + Crew crew = commandCrewService.saveCrew(requestDto, creator); return SuccessResponse.of(CrewHttpResponseCode.CREW_CREATED, CreateCrewResponse.from(crew)); } From 65d0106b37f5c0afb2e186bfb825629a277af6f4 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 2 Jan 2025 02:24:58 +0900 Subject: [PATCH 03/23] :sparkles: feat : make dtos for UpdateCrewInfo api --- .../model/request/UpdateCrewInfoRequest.java | 28 +++++++++++++++++++ .../response/UpdateCrewInfoResponse.java | 23 +++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewInfoResponse.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java new file mode 100644 index 00000000..d25458c7 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java @@ -0,0 +1,28 @@ +package com.run_us.server.domains.crew.controller.model.request; + +import com.run_us.server.domains.crew.domain.CrewDescription; +import com.run_us.server.domains.crew.domain.enums.CrewThemeType; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UpdateCrewInfoRequest { + private String title; + private String intro; + private String location; + private String profileImageUrl; + private CrewThemeType crewType; + + public CrewDescription from(CrewDescription old) { + return CrewDescription.builder() + .title(this.title) + .intro(this.intro) + .location(this.location) + .profileImageUrl(this.profileImageUrl) + .themeType(this.crewType) + .joinQuestion(old.getJoinQuestion()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewInfoResponse.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewInfoResponse.java new file mode 100644 index 00000000..94e3b613 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewInfoResponse.java @@ -0,0 +1,23 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UpdateCrewInfoResponse { + private String crewPublicId; + + @Builder + public UpdateCrewInfoResponse(String crewPublicId) { + this.crewPublicId = crewPublicId; + } + + public static UpdateCrewInfoResponse from(String crewPublicId) { + return UpdateCrewInfoResponse.builder() + .crewPublicId(crewPublicId) + .build(); + } +} From 0138dc5086a66d2d951d6ba4850dc0fc224c0b76 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 2 Jan 2025 02:25:41 +0900 Subject: [PATCH 04/23] :sparkles: feat : make exception and error code for UpdateCrewInfo api --- .../controller/model/enums/CrewErrorCode.java | 3 ++- .../domains/crew/exception/CrewException.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/run_us/server/domains/crew/exception/CrewException.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewErrorCode.java b/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewErrorCode.java index b607a4a4..c85caade 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewErrorCode.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/enums/CrewErrorCode.java @@ -16,7 +16,8 @@ public enum CrewErrorCode implements CustomResponseCode { INVALID_JOIN_REQUEST_STATUS("CEH4005", "Invalid join request status", "Invalid join request status", HttpStatus.BAD_REQUEST), // 403 - RECENTLY_REJECTED_REQUEST("CEH4032","Recently rejected request","Recently rejected request",HttpStatus.FORBIDDEN) + RECENTLY_REJECTED_REQUEST("CEH4032","Recently rejected request","Recently rejected request",HttpStatus.FORBIDDEN), + FORBIDDEN_UPDATE_CREW("CEH4033","Forbidden update crew", "Forbidden update crew",HttpStatus.FORBIDDEN) ; private final String code; diff --git a/src/main/java/com/run_us/server/domains/crew/exception/CrewException.java b/src/main/java/com/run_us/server/domains/crew/exception/CrewException.java new file mode 100644 index 00000000..08b49c1a --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/exception/CrewException.java @@ -0,0 +1,19 @@ +package com.run_us.server.domains.crew.exception; + +import com.run_us.server.global.exception.BusinessException; +import com.run_us.server.global.exception.code.CustomResponseCode; + +public class CrewException extends BusinessException { + + protected CrewException(CustomResponseCode errorCode, String logMessage) { + super(errorCode, logMessage); + } + + public CrewException(CustomResponseCode errorCode) { + super(errorCode); + } + + public static CrewException of(CustomResponseCode errorCode) { + return new CrewException(errorCode); + } +} From 34fe05697f32ab10faec49379e15ed384fd22fbe Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 2 Jan 2025 02:26:10 +0900 Subject: [PATCH 05/23] :sparkles: feat : make use case and service logic for UpdateCrewInfo api --- .../server/domains/crew/domain/Crew.java | 8 +++++ .../crew/service/CommandCrewService.java | 7 ++++ .../service/usecase/CommandCrewUseCase.java | 9 +++++ .../usecase/CommandCrewUseCaseImpl.java | 34 +++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java create mode 100644 src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java diff --git a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java index 9d94a787..e5889b6f 100644 --- a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java +++ b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java @@ -66,6 +66,14 @@ public boolean isActive() { return this.status == CrewStatus.ACTIVE; } + public boolean isOwner(Integer userId) { + return this.owner.getId().equals(userId); + } + + public void updateCrewInfo(CrewDescription crewDescription) { + this.crewDescription = crewDescription; + } + public void addJoinRequest(CrewJoinRequest joinRequest) { this.joinRequests.add(joinRequest); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 7907bba9..16ec1dea 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -1,7 +1,9 @@ package com.run_us.server.domains.crew.service; import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.crew.domain.CrewDescription; import com.run_us.server.domains.crew.repository.CrewRepository; import com.run_us.server.domains.user.domain.User; import lombok.RequiredArgsConstructor; @@ -17,4 +19,9 @@ public Crew saveCrew(CreateCrewRequest requestDto, User creator) { Crew crew = requestDto.toEntity(creator); return crewRepository.save(crew); } + + public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew) { + CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); + crew.updateCrewInfo(newCrewDescription); + } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java new file mode 100644 index 00000000..679697fe --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java @@ -0,0 +1,9 @@ +package com.run_us.server.domains.crew.service.usecase; + +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; +import com.run_us.server.global.common.SuccessResponse; + +public interface CommandCrewUseCase { + SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, Integer internalId); +} diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java new file mode 100644 index 00000000..ac43ffa4 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -0,0 +1,34 @@ +package com.run_us.server.domains.crew.service.usecase; + +import com.run_us.server.domains.crew.controller.model.enums.CrewErrorCode; +import com.run_us.server.domains.crew.controller.model.enums.CrewException; +import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; +import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.crew.service.CommandCrewService; +import com.run_us.server.domains.crew.service.CrewService; +import com.run_us.server.global.common.SuccessResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class CommandCrewUseCaseImpl implements CommandCrewUseCase { + private final CrewService crewService; + private final CommandCrewService commandCrewService; + + @Override + @Transactional + public SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, Integer userId) { + Crew crew = crewService.getCrewByPublicId(crewPublicId); + if (!crew.isOwner(userId)) { + throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); + } + + commandCrewService.updateCrewInfo(requestDto, crew); + return SuccessResponse.of(CrewHttpResponseCode.CREW_UPDATED, UpdateCrewInfoResponse.from(crew.getPublicId())); + } +} From cda039de93a478464363e6224cc1192130bc38cd Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 2 Jan 2025 02:26:46 +0900 Subject: [PATCH 06/23] :sparkles: feat : make UpdateCrewInfo api --- .../domains/crew/controller/CrewController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java index 70abb5e9..dd3be1c6 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java @@ -3,8 +3,10 @@ import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; import com.run_us.server.domains.crew.controller.model.request.CreateJoinRequest; import com.run_us.server.domains.crew.controller.model.request.ReviewJoinRequest; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.controller.model.response.*; import com.run_us.server.domains.crew.domain.enums.CrewJoinRequestStatus; +import com.run_us.server.domains.crew.service.usecase.CommandCrewUseCase; import com.run_us.server.domains.crew.service.usecase.CrewJoinUseCase; import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; import com.run_us.server.domains.crew.controller.model.response.CreateCrewResponse; @@ -30,6 +32,7 @@ public class CrewController { private final CrewJoinUseCase crewJoinUseCase; private final CreateCrewUseCase createCrewUseCase; + private final CommandCrewUseCase commandCrewUseCase; @PostMapping @@ -43,6 +46,19 @@ public ResponseEntity> createCrew( return ResponseEntity.status(HttpStatus.CREATED).body(response); } + @PatchMapping("/{crewPublicId}") + public ResponseEntity> updateCrewInfo( + @PathVariable String crewPublicId, + @RequestBody UpdateCrewInfoRequest requestDto, + @CurrentUser UserPrincipal userPrincipal){ + log.info("action=update_crew_info userPublicId={}, crewPublicId={}", userPrincipal.getPublicId(), crewPublicId); + + SuccessResponse response = commandCrewUseCase.updateCrewInfo(crewPublicId, requestDto, userPrincipal.getInternalId()); + return ResponseEntity.ok().body(response); + } + + + @PostMapping("/{crewPublicId}/join-requests") public ResponseEntity> requestJoin( From 5204e5feed4941cba526d1e97ba48f813d0bdcca Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 2 Jan 2025 11:28:00 +0900 Subject: [PATCH 07/23] :recycle: refactor : move crew owner checking logic to CommandCrewService --- .../server/domains/crew/service/CommandCrewService.java | 9 ++++++++- .../crew/service/usecase/CommandCrewUseCaseImpl.java | 8 +------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 16ec1dea..73a93035 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -1,5 +1,7 @@ package com.run_us.server.domains.crew.service; +import com.run_us.server.domains.crew.controller.model.enums.CrewErrorCode; +import com.run_us.server.domains.crew.controller.model.enums.CrewException; import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.domain.Crew; @@ -20,7 +22,12 @@ public Crew saveCrew(CreateCrewRequest requestDto, User creator) { return crewRepository.save(crew); } - public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew) { + public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew, Integer userId) { + + if (!crew.isOwner(userId)) { + throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); + } + CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); crew.updateCrewInfo(newCrewDescription); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java index ac43ffa4..a1a9f4f9 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -1,7 +1,5 @@ package com.run_us.server.domains.crew.service.usecase; -import com.run_us.server.domains.crew.controller.model.enums.CrewErrorCode; -import com.run_us.server.domains.crew.controller.model.enums.CrewException; import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; @@ -24,11 +22,7 @@ public class CommandCrewUseCaseImpl implements CommandCrewUseCase { @Transactional public SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, Integer userId) { Crew crew = crewService.getCrewByPublicId(crewPublicId); - if (!crew.isOwner(userId)) { - throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); - } - - commandCrewService.updateCrewInfo(requestDto, crew); + commandCrewService.updateCrewInfo(requestDto, crew, userId); return SuccessResponse.of(CrewHttpResponseCode.CREW_UPDATED, UpdateCrewInfoResponse.from(crew.getPublicId())); } } From 6cf221f5527cf117ea65c1f57cf073c364b490f4 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Wed, 5 Feb 2025 20:53:30 +0900 Subject: [PATCH 08/23] :sparkles: make update crew join rule api --- .../crew/controller/CrewController.java | 15 ++++++--- .../request/UpdateCrewJoinTypeRequest.java | 15 +++++++++ .../response/UpdateCrewJoinRuleResponse.java | 31 +++++++++++++++++++ .../server/domains/crew/domain/Crew.java | 5 +++ .../domains/crew/domain/CrewDescription.java | 4 +++ .../crew/service/CommandCrewService.java | 16 ++++++++-- .../service/usecase/CommandCrewUseCase.java | 4 +++ .../usecase/CommandCrewUseCaseImpl.java | 12 +++++++ 8 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewJoinTypeRequest.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewJoinRuleResponse.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java index abc4649a..c170e1b1 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java @@ -1,13 +1,10 @@ package com.run_us.server.domains.crew.controller; -import com.run_us.server.domains.crew.controller.model.request.CreateJoinRequest; -import com.run_us.server.domains.crew.controller.model.request.ReviewJoinRequest; -import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.request.*; import com.run_us.server.domains.crew.controller.model.response.*; import com.run_us.server.domains.crew.domain.enums.CrewJoinRequestStatus; import com.run_us.server.domains.crew.service.usecase.CommandCrewUseCase; import com.run_us.server.domains.crew.service.usecase.CrewJoinUseCase; -import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; import com.run_us.server.domains.crew.controller.model.response.CreateCrewResponse; import com.run_us.server.domains.crew.service.usecase.CreateCrewUseCase; import com.run_us.server.domains.crew.service.usecase.CrewMemberUseCase; @@ -57,8 +54,16 @@ public ResponseEntity> updateCrewInfo( return ResponseEntity.ok().body(response); } + @PatchMapping("/{crewPublicId}/join-rule") + public ResponseEntity> updateCrewJoinRule( + @PathVariable String crewPublicId, + @RequestBody UpdateCrewJoinTypeRequest requestDto, + @CurrentUser String currentUserPublicId){ + log.info("action=update_crew_join_rule userPublicId={}, crewPublicId={}", currentUserPublicId, crewPublicId); - + SuccessResponse response = commandCrewUseCase.updateCrewJoinRule(crewPublicId, requestDto, currentUserPublicId); + return ResponseEntity.ok().body(response); + } @PostMapping("/{crewPublicId}/join-requests") public ResponseEntity> requestJoin( diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewJoinTypeRequest.java b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewJoinTypeRequest.java new file mode 100644 index 00000000..a0516e7e --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewJoinTypeRequest.java @@ -0,0 +1,15 @@ +package com.run_us.server.domains.crew.controller.model.request; + +import com.run_us.server.domains.crew.domain.CrewDescription; +import com.run_us.server.domains.crew.domain.enums.CrewJoinType; +import com.run_us.server.domains.crew.domain.enums.CrewThemeType; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UpdateCrewJoinTypeRequest { + private CrewJoinType joinType; + private String joinQuestion; +} diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewJoinRuleResponse.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewJoinRuleResponse.java new file mode 100644 index 00000000..16133201 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/UpdateCrewJoinRuleResponse.java @@ -0,0 +1,31 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.crew.domain.enums.CrewJoinType; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UpdateCrewJoinRuleResponse { + private String crewPublicId; + private CrewJoinType joinType; + private String joinQuestion; + + @Builder + public UpdateCrewJoinRuleResponse(String crewPublicId, CrewJoinType joinType, String joinQuestion) { + this.crewPublicId = crewPublicId; + this.joinType = joinType; + this.joinQuestion = joinQuestion; + } + + public static UpdateCrewJoinRuleResponse from(Crew crew) { + return UpdateCrewJoinRuleResponse.builder() + .crewPublicId(crew.getPublicId()) + .joinType(crew.getJoinType()) + .joinQuestion(crew.getCrewDescription().getJoinQuestion()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java index c461a82d..bff417b1 100644 --- a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java +++ b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java @@ -104,4 +104,9 @@ public Crew( this.status = CrewStatus.ACTIVE; this.crewMemberships = crewMemberships; } + + public void updateCrewJoinRule(CrewJoinType joinType, String joinQuestion) { + this.joinType = joinType; + this.getCrewDescription().updateJoinQuestion(joinQuestion); + } } diff --git a/src/main/java/com/run_us/server/domains/crew/domain/CrewDescription.java b/src/main/java/com/run_us/server/domains/crew/domain/CrewDescription.java index 2c0517f5..dc2f45c7 100644 --- a/src/main/java/com/run_us/server/domains/crew/domain/CrewDescription.java +++ b/src/main/java/com/run_us/server/domains/crew/domain/CrewDescription.java @@ -74,4 +74,8 @@ public boolean equals(Object obj) { public int hashCode() { return Objects.hash(this.title, this.profileImageUrl, this.location, this.intro, this.themeType, this.joinQuestion); } + + public void updateJoinQuestion(String joinQuestion) { + this.joinQuestion = joinQuestion; + } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 73a93035..3740af6d 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -4,6 +4,7 @@ import com.run_us.server.domains.crew.controller.model.enums.CrewException; import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; import com.run_us.server.domains.crew.domain.Crew; import com.run_us.server.domains.crew.domain.CrewDescription; import com.run_us.server.domains.crew.repository.CrewRepository; @@ -23,12 +24,21 @@ public Crew saveCrew(CreateCrewRequest requestDto, User creator) { } public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew, Integer userId) { + checkCrewOwner(crew, userId); + CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); + crew.updateCrewInfo(newCrewDescription); + } + + public void updateCrewJoinRule(UpdateCrewJoinTypeRequest requestDto, Crew crew, Integer userId) { + checkCrewOwner(crew, userId); + + crew.updateCrewJoinRule(requestDto.getJoinType(), requestDto.getJoinQuestion()); + } + + private static void checkCrewOwner(Crew crew, Integer userId) { if (!crew.isOwner(userId)) { throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); } - - CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); - crew.updateCrewInfo(newCrewDescription); } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java index 667ea275..e5a47124 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java @@ -1,9 +1,13 @@ package com.run_us.server.domains.crew.service.usecase; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; +import com.run_us.server.domains.crew.controller.model.response.UpdateCrewJoinRuleResponse; import com.run_us.server.global.common.SuccessResponse; public interface CommandCrewUseCase { SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, String internalId); + + SuccessResponse updateCrewJoinRule(String crewPublicId, UpdateCrewJoinTypeRequest requestDto, String currentUserPublicId); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java index e734100b..9c2bf943 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -2,7 +2,9 @@ import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; +import com.run_us.server.domains.crew.controller.model.response.UpdateCrewJoinRuleResponse; import com.run_us.server.domains.crew.domain.Crew; import com.run_us.server.domains.crew.service.CommandCrewService; import com.run_us.server.domains.crew.service.CrewService; @@ -30,4 +32,14 @@ public SuccessResponse updateCrewInfo(String crewPublicI commandCrewService.updateCrewInfo(requestDto, crew, userPrincipal.getInternalId()); return SuccessResponse.of(CrewHttpResponseCode.CREW_UPDATED, UpdateCrewInfoResponse.from(crew.getPublicId())); } + + @Override + @Transactional + public SuccessResponse updateCrewJoinRule(String crewPublicId, UpdateCrewJoinTypeRequest requestDto, String userPublicId) { + UserPrincipal userPrincipal = userIdResolver.resolve(userPublicId); + + Crew crew = crewService.getCrewByPublicId(crewPublicId); + commandCrewService.updateCrewJoinRule(requestDto, crew, userPrincipal.getInternalId()); + return SuccessResponse.of(CrewHttpResponseCode.CREW_JOIN_RULE_UPDATED, UpdateCrewJoinRuleResponse.from(crew)); + } } From 707bbce3259b0a8a00941f8466ea5a6ef84d64b4 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Wed, 5 Feb 2025 21:27:44 +0900 Subject: [PATCH 09/23] :sparkles: make close crew api --- .../crew/controller/CrewController.java | 10 ++++++++ .../model/response/CloseCrewResponse.java | 25 +++++++++++++++++++ .../server/domains/crew/domain/Crew.java | 7 ++++-- .../crew/service/CommandCrewService.java | 11 ++++++-- .../service/usecase/CommandCrewUseCase.java | 7 ++++-- .../usecase/CommandCrewUseCaseImpl.java | 12 +++++++++ 6 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/CloseCrewResponse.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java index c170e1b1..7716b050 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java @@ -65,6 +65,16 @@ public ResponseEntity> updateCrewJoi return ResponseEntity.ok().body(response); } + @DeleteMapping("/{crewPublicId}") + public ResponseEntity> closeCrew( + @PathVariable String crewPublicId, + @CurrentUser String currentUserPublicId){ + log.info("action=delete_crew userPublicId={}, crewPublicId={}", currentUserPublicId, crewPublicId); + + SuccessResponse response = commandCrewUseCase.closeCrew(crewPublicId, currentUserPublicId); + return ResponseEntity.ok().body(response); + } + @PostMapping("/{crewPublicId}/join-requests") public ResponseEntity> requestJoin( @PathVariable String crewPublicId, diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/CloseCrewResponse.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/CloseCrewResponse.java new file mode 100644 index 00000000..c76ae9d2 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/CloseCrewResponse.java @@ -0,0 +1,25 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.crew.domain.Crew; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class CloseCrewResponse { + private String crewPublicId; + + @Builder + private CloseCrewResponse(String crewPublicId) { + this.crewPublicId = crewPublicId; + } + + public static CloseCrewResponse from(Crew crew) { + return CloseCrewResponse.builder() + .crewPublicId(crew.getPublicId()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java index bff417b1..4911afd5 100644 --- a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java +++ b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java @@ -1,6 +1,5 @@ package com.run_us.server.domains.crew.domain; -import com.run_us.server.domains.crew.domain.enums.CrewJoinRequestStatus; import com.run_us.server.domains.crew.domain.enums.CrewJoinType; import com.run_us.server.domains.crew.domain.enums.CrewStatus; import com.run_us.server.domains.user.domain.User; @@ -105,8 +104,12 @@ public Crew( this.crewMemberships = crewMemberships; } - public void updateCrewJoinRule(CrewJoinType joinType, String joinQuestion) { + public void updateJoinRule(CrewJoinType joinType, String joinQuestion) { this.joinType = joinType; this.getCrewDescription().updateJoinQuestion(joinQuestion); } + + public void close() { + this.status = CrewStatus.SUSPENDED; + } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 3740af6d..2035b27f 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -33,10 +33,17 @@ public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew, Integer public void updateCrewJoinRule(UpdateCrewJoinTypeRequest requestDto, Crew crew, Integer userId) { checkCrewOwner(crew, userId); - crew.updateCrewJoinRule(requestDto.getJoinType(), requestDto.getJoinQuestion()); + crew.updateJoinRule(requestDto.getJoinType(), requestDto.getJoinQuestion()); } - private static void checkCrewOwner(Crew crew, Integer userId) { + public void closeCrew(Crew crew, Integer userId) { + checkCrewOwner(crew, userId); + + crew.close(); + } + + + private void checkCrewOwner(Crew crew, Integer userId) { if (!crew.isOwner(userId)) { throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java index e5a47124..8e927594 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCase.java @@ -2,12 +2,15 @@ import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; +import com.run_us.server.domains.crew.controller.model.response.CloseCrewResponse; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewJoinRuleResponse; import com.run_us.server.global.common.SuccessResponse; public interface CommandCrewUseCase { - SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, String internalId); + SuccessResponse updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, String userPublicId); - SuccessResponse updateCrewJoinRule(String crewPublicId, UpdateCrewJoinTypeRequest requestDto, String currentUserPublicId); + SuccessResponse updateCrewJoinRule(String crewPublicId, UpdateCrewJoinTypeRequest requestDto, String userPublicId); + + SuccessResponse closeCrew(String crewPublicId, String userPublicId); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java index 9c2bf943..b52f3b1d 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -3,6 +3,7 @@ import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; +import com.run_us.server.domains.crew.controller.model.response.CloseCrewResponse; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewInfoResponse; import com.run_us.server.domains.crew.controller.model.response.UpdateCrewJoinRuleResponse; import com.run_us.server.domains.crew.domain.Crew; @@ -42,4 +43,15 @@ public SuccessResponse updateCrewJoinRule(String cre commandCrewService.updateCrewJoinRule(requestDto, crew, userPrincipal.getInternalId()); return SuccessResponse.of(CrewHttpResponseCode.CREW_JOIN_RULE_UPDATED, UpdateCrewJoinRuleResponse.from(crew)); } + + @Override + @Transactional + public SuccessResponse closeCrew(String crewPublicId, String userPublicId) { + UserPrincipal userPrincipal = userIdResolver.resolve(userPublicId); + + Crew crew = crewService.getCrewByPublicId(crewPublicId); + commandCrewService.closeCrew(crew, userPrincipal.getInternalId()); + + return SuccessResponse.of(CrewHttpResponseCode.CREW_CLOSE_SUCCESS, CloseCrewResponse.from(crew)); + } } From 78948133e8b313247438e62d6854993bbff390ce Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:25:15 +0900 Subject: [PATCH 10/23] :sparkles: add : make monthlyRecord field --- .../server/domains/crew/domain/Crew.java | 7 +++++- .../crew/domain/CrewMonthlyRecord.java | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/run_us/server/domains/crew/domain/CrewMonthlyRecord.java diff --git a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java index 4911afd5..e8a82a01 100644 --- a/src/main/java/com/run_us/server/domains/crew/domain/Crew.java +++ b/src/main/java/com/run_us/server/domains/crew/domain/Crew.java @@ -45,6 +45,9 @@ public class Crew extends DateAudit { @Embedded private CrewDescription crewDescription; + @Embedded + private CrewMonthlyRecord monthlyRecord; + @ElementCollection @CollectionTable(name = "crew_memberships", joinColumns = @JoinColumn(name="crew_id")) private List crewMemberships = new ArrayList<>(); @@ -94,7 +97,8 @@ public Crew( User owner, CrewJoinType joinType, CrewDescription crewDescription, - List crewMemberships + List crewMemberships, + CrewMonthlyRecord monthlyRecord ){ this.owner = owner; this.joinType = joinType; @@ -102,6 +106,7 @@ public Crew( this.memberCount = 1; this.status = CrewStatus.ACTIVE; this.crewMemberships = crewMemberships; + this.monthlyRecord = monthlyRecord; } public void updateJoinRule(CrewJoinType joinType, String joinQuestion) { diff --git a/src/main/java/com/run_us/server/domains/crew/domain/CrewMonthlyRecord.java b/src/main/java/com/run_us/server/domains/crew/domain/CrewMonthlyRecord.java new file mode 100644 index 00000000..a3291702 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/domain/CrewMonthlyRecord.java @@ -0,0 +1,25 @@ +package com.run_us.server.domains.crew.domain; + +import lombok.*; + +@ToString +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class CrewMonthlyRecord { + private int totalRunningCount; + private int totalDistance; + private int totalTime; + + @Builder + CrewMonthlyRecord(int totalRunningCount, int totalDistance, int totalTime){ + this.totalRunningCount = totalRunningCount; + this.totalDistance = totalDistance; + this.totalTime = totalTime; + } + + public void addRecord(int addDistance, int addTime){ + this.totalRunningCount++; + this.totalDistance += addDistance; + this.totalTime += addTime; + } +} From 8e862b29f5eecb6986c2996f84ad81fdf4fe215f Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:27:03 +0900 Subject: [PATCH 11/23] :sparkles: add : make type field in RunningPreview --- .../run_us/server/domains/running/run/domain/RunType.java | 8 ++++++++ .../server/domains/running/run/domain/RunningPreview.java | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/running/run/domain/RunType.java diff --git a/src/main/java/com/run_us/server/domains/running/run/domain/RunType.java b/src/main/java/com/run_us/server/domains/running/run/domain/RunType.java new file mode 100644 index 00000000..9e3ce4a7 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/domain/RunType.java @@ -0,0 +1,8 @@ +package com.run_us.server.domains.running.run.domain; + +public enum RunType { + SINGLE, + GROUP_REGULAR, + GROUP_IRREGULAR, + CUSTOM +} diff --git a/src/main/java/com/run_us/server/domains/running/run/domain/RunningPreview.java b/src/main/java/com/run_us/server/domains/running/run/domain/RunningPreview.java index b63e58c3..cccff163 100644 --- a/src/main/java/com/run_us/server/domains/running/run/domain/RunningPreview.java +++ b/src/main/java/com/run_us/server/domains/running/run/domain/RunningPreview.java @@ -16,6 +16,7 @@ public class RunningPreview implements Serializable { private String title; private String description; + private RunType type; private String meetingPoint; private SessionAccessLevel accessLevel = SessionAccessLevel.ALLOW_ALL; private ZonedDateTime beginTime; @@ -24,16 +25,19 @@ public class RunningPreview implements Serializable { public RunningPreview( String title, String description, + RunType type, String meetingPoint, SessionAccessLevel accessLevel, ZonedDateTime beginTime) { this.title = title; this.description = description; + this.type = type; this.meetingPoint = meetingPoint; this.accessLevel = accessLevel; this.beginTime = beginTime; } + // TODO : run type 추가 public static RunningPreview from(RunCreateDto runCreateDto) { return RunningPreview.builder() .title(runCreateDto.getTitle()) From c2d5a507aadcb6a0d50738ddf89f4f3436d47549 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:28:48 +0900 Subject: [PATCH 12/23] :sparkles: add : make RunTopMessage logic by strategy pattern --- .../strategy/IrregularRunOnlyCrewMessage.java | 23 +++++++++++++++++++ .../strategy/RegularRunAllowAllMessage.java | 8 +++++++ .../strategy/RegularRunOnlyCrewMessage.java | 20 ++++++++++++++++ .../strategy/RunTopMessageContext.java | 8 +++++++ .../strategy/RunTopMessageStrategy.java | 5 ++++ .../service/strategy/TimePlaceMessage.java | 18 +++++++++++++++ 6 files changed, 82 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/IrregularRunOnlyCrewMessage.java create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunAllowAllMessage.java create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunOnlyCrewMessage.java create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageContext.java create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageStrategy.java create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/strategy/TimePlaceMessage.java diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/IrregularRunOnlyCrewMessage.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/IrregularRunOnlyCrewMessage.java new file mode 100644 index 00000000..520a1ec0 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/IrregularRunOnlyCrewMessage.java @@ -0,0 +1,23 @@ +package com.run_us.server.domains.running.run.service.strategy; + +import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.running.run.domain.Run; + +import java.time.format.DateTimeFormatter; + +public class IrregularRunOnlyCrewMessage implements RunTopMessageStrategy { + private final Crew crew; + + public IrregularRunOnlyCrewMessage(Crew crew) { + this.crew = crew; + } + + @Override + public String createMessage() { + String message = "\'" + + crew.getCrewDescription().getTitle() + + "\'번개런"; + + return message; + } +} diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunAllowAllMessage.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunAllowAllMessage.java new file mode 100644 index 00000000..496fa86d --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunAllowAllMessage.java @@ -0,0 +1,8 @@ +package com.run_us.server.domains.running.run.service.strategy; + +public class RegularRunAllowAllMessage implements RunTopMessageStrategy { + @Override + public String createMessage() { + return "게스트 모집"; + } +} diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunOnlyCrewMessage.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunOnlyCrewMessage.java new file mode 100644 index 00000000..7383b270 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RegularRunOnlyCrewMessage.java @@ -0,0 +1,20 @@ +package com.run_us.server.domains.running.run.service.strategy; + +import com.run_us.server.domains.crew.domain.Crew; + +public class RegularRunOnlyCrewMessage implements RunTopMessageStrategy { + private final Crew crew; + + public RegularRunOnlyCrewMessage(Crew crew) { + this.crew = crew; + } + + @Override + public String createMessage() { + String message = "\'" + + crew.getCrewDescription().getTitle() + + "\'정기런"; + + return message; + } +} diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageContext.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageContext.java new file mode 100644 index 00000000..e8994013 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageContext.java @@ -0,0 +1,8 @@ +package com.run_us.server.domains.running.run.service.strategy; + +public class RunTopMessageContext { + + public static String getMessage(RunTopMessageStrategy strategy) { + return strategy.createMessage(); + } +} diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageStrategy.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageStrategy.java new file mode 100644 index 00000000..76b84f13 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/RunTopMessageStrategy.java @@ -0,0 +1,5 @@ +package com.run_us.server.domains.running.run.service.strategy; + +public interface RunTopMessageStrategy { + String createMessage(); +} diff --git a/src/main/java/com/run_us/server/domains/running/run/service/strategy/TimePlaceMessage.java b/src/main/java/com/run_us/server/domains/running/run/service/strategy/TimePlaceMessage.java new file mode 100644 index 00000000..02d85331 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/strategy/TimePlaceMessage.java @@ -0,0 +1,18 @@ +package com.run_us.server.domains.running.run.service.strategy; + +import com.run_us.server.domains.running.run.domain.Run; + +import java.time.format.DateTimeFormatter; + +public class TimePlaceMessage implements RunTopMessageStrategy { + private final Run run; + + public TimePlaceMessage(Run run) { + this.run = run; + } + + @Override + public String createMessage() { + return run.getPreview().getBeginTime().format(DateTimeFormatter.ofPattern("M월 dd일 E요일 a h:mm")); + } +} From b8a83ac6b92fb925cf745bd5beecf09a6dc03210 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:31:20 +0900 Subject: [PATCH 13/23] :sparkles: add : make findFirstForCrewCard query method --- .../domains/running/run/repository/RunRepository.java | 11 +++++++++++ .../com/run_us/server/global/common/GlobalConst.java | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/com/run_us/server/domains/running/run/repository/RunRepository.java b/src/main/java/com/run_us/server/domains/running/run/repository/RunRepository.java index 7ce811ef..c03eae18 100644 --- a/src/main/java/com/run_us/server/domains/running/run/repository/RunRepository.java +++ b/src/main/java/com/run_us/server/domains/running/run/repository/RunRepository.java @@ -1,5 +1,7 @@ package com.run_us.server.domains.running.run.repository; +import com.run_us.server.domains.running.run.domain.RunStatus; +import com.run_us.server.domains.running.run.domain.RunType; import com.run_us.server.domains.running.run.domain.SessionAccessLevel; import com.run_us.server.domains.running.run.domain.Run; import com.run_us.server.domains.running.run.service.model.JoinedRunPreviewResponse; @@ -8,6 +10,7 @@ import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -52,4 +55,12 @@ public interface RunRepository extends JpaRepository { + "WHERE r.crewId = :crewId and r.preview.accessLevel = :accessLevel" ) Slice findAllByCrewIdAndAccessLevel(Integer crewId, SessionAccessLevel accessLevel, PageRequest pageRequest); + + @Query( + "SELECT r " + + "FROM Run r " + + "WHERE r.crewId = :crewId AND r.status = :status AND r.preview.type = :type " + + "ORDER BY r.preview.beginTime ASC" + ) + Optional findFirstForCrewCard(@Param("crewId") Integer crewId, @Param("type") RunType type, @Param("status") RunStatus status); } diff --git a/src/main/java/com/run_us/server/global/common/GlobalConst.java b/src/main/java/com/run_us/server/global/common/GlobalConst.java index 9ed44e44..a743a43d 100644 --- a/src/main/java/com/run_us/server/global/common/GlobalConst.java +++ b/src/main/java/com/run_us/server/global/common/GlobalConst.java @@ -12,6 +12,8 @@ public final class GlobalConst { public static final String TIME_ZONE_ID = "Asia/Seoul"; public static final ZoneId ZONE_ID = ZoneId.of(TIME_ZONE_ID); + public static final String TIME_FORMAT_PATTERN = "yyyy/MM/dd HH:mm:ss"; + public static final String DEFAULT_IMG_URL = "default_img_url"; public static final String WS_USER_AUTH_HEADER = "user-id"; From 3719ea54e579bd6e0d8f095b3001269b0a73f3cc Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:31:49 +0900 Subject: [PATCH 14/23] :sparkles: add : make existsByCrewIdAndStatus query method --- .../domains/crew/repository/CrewJoinRequestRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/run_us/server/domains/crew/repository/CrewJoinRequestRepository.java b/src/main/java/com/run_us/server/domains/crew/repository/CrewJoinRequestRepository.java index 1e25fb9b..82071d46 100644 --- a/src/main/java/com/run_us/server/domains/crew/repository/CrewJoinRequestRepository.java +++ b/src/main/java/com/run_us/server/domains/crew/repository/CrewJoinRequestRepository.java @@ -1,6 +1,7 @@ package com.run_us.server.domains.crew.repository; import com.run_us.server.domains.crew.domain.CrewJoinRequest; +import com.run_us.server.domains.crew.domain.enums.CrewJoinRequestStatus; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; @@ -25,4 +26,6 @@ Optional findByCrewIdAndUserIdAndAfterRequestedAt( Integer userId, ZonedDateTime recentDate ); + + boolean existsByCrewIdAndStatus(Integer crewId, CrewJoinRequestStatus status); } From a67cde6bf2a67f5ee0ded10ca1a2f12ad33af7d5 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:32:12 +0900 Subject: [PATCH 15/23] :sparkles: add : make getUserByInternalId method --- .../com/run_us/server/domains/user/service/UserService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/run_us/server/domains/user/service/UserService.java b/src/main/java/com/run_us/server/domains/user/service/UserService.java index 0a3b070f..45ced0f9 100644 --- a/src/main/java/com/run_us/server/domains/user/service/UserService.java +++ b/src/main/java/com/run_us/server/domains/user/service/UserService.java @@ -34,6 +34,12 @@ public User getUserByPublicId(String publicId) { .orElseThrow(() -> UserException.of(USER_NOT_FOUND)); } + public User getUserByInternalId(int internalId) { + return userRepository + .findByInternalId(internalId) + .orElseThrow(() -> UserException.of(USER_NOT_FOUND)); + } + public Map getUserMapByIds(List userIds) { if (userIds == null || userIds.isEmpty()) { return Collections.emptyMap(); From 4fab857b7bb64d780c808c672abfaa3cbb620581 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:33:21 +0900 Subject: [PATCH 16/23] :sparkles: add : move validate logic to CrewValidator --- .../domains/crew/service/CommandCrewService.java | 14 ++++---------- .../server/domains/crew/service/CrewValidator.java | 12 ++++++++++++ .../service/usecase/CommandCrewUseCaseImpl.java | 1 - 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 2035b27f..7ce5206b 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -17,6 +17,7 @@ public class CommandCrewService { private final CrewRepository crewRepository; + private final CrewValidator crewValidator; public Crew saveCrew(CreateCrewRequest requestDto, User creator) { Crew crew = requestDto.toEntity(creator); @@ -24,28 +25,21 @@ public Crew saveCrew(CreateCrewRequest requestDto, User creator) { } public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew, Integer userId) { - checkCrewOwner(crew, userId); + crewValidator.validateCrewOwner(crew, userId); CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); crew.updateCrewInfo(newCrewDescription); } public void updateCrewJoinRule(UpdateCrewJoinTypeRequest requestDto, Crew crew, Integer userId) { - checkCrewOwner(crew, userId); + crewValidator.validateCrewOwner(crew, userId); crew.updateJoinRule(requestDto.getJoinType(), requestDto.getJoinQuestion()); } public void closeCrew(Crew crew, Integer userId) { - checkCrewOwner(crew, userId); + crewValidator.validateCrewOwner(crew, userId); crew.close(); } - - - private void checkCrewOwner(Crew crew, Integer userId) { - if (!crew.isOwner(userId)) { - throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); - } - } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/CrewValidator.java b/src/main/java/com/run_us/server/domains/crew/service/CrewValidator.java index 158e0a0d..4ea1327c 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CrewValidator.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CrewValidator.java @@ -92,4 +92,16 @@ public void validateCanFetchMembers(Integer userId, Crew crew) { throw new CrewException(CrewErrorCode.SUSPENDED_CREW); } } + + public void validateCrewOwner(Crew crew, Integer userId) { + if (!crew.isOwner(userId)) { + throw new CrewException(CrewErrorCode.FORBIDDEN_UPDATE_CREW); + } + } + + public void validateCrewMember(Crew crew, Integer userId) { + if (!crew.isMember(userId)) { + throw new CrewException(CrewErrorCode.NOT_CREW_MEMBER); + } + } } \ No newline at end of file diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java index b52f3b1d..b0561ec2 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -51,7 +51,6 @@ public SuccessResponse closeCrew(String crewPublicId, String Crew crew = crewService.getCrewByPublicId(crewPublicId); commandCrewService.closeCrew(crew, userPrincipal.getInternalId()); - return SuccessResponse.of(CrewHttpResponseCode.CREW_CLOSE_SUCCESS, CloseCrewResponse.from(crew)); } } From a84760adf206807da96589798f4c5b233e2b8721 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:34:54 +0900 Subject: [PATCH 17/23] :sparkles: add : make getCrewCardRun service logic --- .../running/run/service/RunQueryService.java | 11 +++++++ .../run/service/model/GetCrewCardRun.java | 31 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/running/run/service/model/GetCrewCardRun.java diff --git a/src/main/java/com/run_us/server/domains/running/run/service/RunQueryService.java b/src/main/java/com/run_us/server/domains/running/run/service/RunQueryService.java index ddce0782..2368952b 100644 --- a/src/main/java/com/run_us/server/domains/running/run/service/RunQueryService.java +++ b/src/main/java/com/run_us/server/domains/running/run/service/RunQueryService.java @@ -3,8 +3,11 @@ import com.run_us.server.domains.running.common.RunningErrorCode; import com.run_us.server.domains.running.common.RunningException; import com.run_us.server.domains.running.run.domain.Run; +import com.run_us.server.domains.running.run.domain.RunStatus; +import com.run_us.server.domains.running.run.domain.RunType; import com.run_us.server.domains.running.run.domain.SessionAccessLevel; import com.run_us.server.domains.running.run.repository.RunRepository; +import com.run_us.server.domains.running.run.service.model.GetCrewCardRun; import com.run_us.server.domains.running.run.service.model.JoinedRunPreviewResponse; import com.run_us.server.domains.running.run.service.model.GetRunPreviewResponse; import lombok.RequiredArgsConstructor; @@ -15,6 +18,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @Component @@ -69,4 +73,11 @@ private void updateJoinedRunPreviewWithPaceTypes(List runs, Map regularRunOp = runRepository.findFirstForCrewCard(crewId, RunType.GROUP_REGULAR, RunStatus.WAITING); + Optional irregularRunOp = runRepository.findFirstForCrewCard(crewId, RunType.GROUP_IRREGULAR, RunStatus.WAITING); + + return GetCrewCardRun.from(regularRunOp.orElse(null), irregularRunOp.orElse(null)); + } } diff --git a/src/main/java/com/run_us/server/domains/running/run/service/model/GetCrewCardRun.java b/src/main/java/com/run_us/server/domains/running/run/service/model/GetCrewCardRun.java new file mode 100644 index 00000000..2b6a61ce --- /dev/null +++ b/src/main/java/com/run_us/server/domains/running/run/service/model/GetCrewCardRun.java @@ -0,0 +1,31 @@ +package com.run_us.server.domains.running.run.service.model; + +import com.run_us.server.domains.running.run.domain.Run; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class GetCrewCardRun { + Run regularRun; + Run irregularRun; + + @Builder(access = AccessLevel.PRIVATE) + public GetCrewCardRun(Run regularRun, Run irregularRun) { + this.regularRun = regularRun; + this.irregularRun = irregularRun; + } + + public static GetCrewCardRun from(Run regularRun, Run irregularRun) { + GetCrewCardRunBuilder builder = GetCrewCardRun.builder(); + + if (regularRun != null) { + builder.regularRun(regularRun); + } + if (irregularRun != null) { + builder.irregularRun(irregularRun); + } + + return builder.build(); + } +} From a0bb9015ec894e8f784bf137f52a64ca9791d8e9 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:35:25 +0900 Subject: [PATCH 18/23] :sparkles: add : make existNewJoinRequest service logic --- .../com/run_us/server/domains/crew/service/CrewService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/run_us/server/domains/crew/service/CrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CrewService.java index 62a01b81..27b36e15 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CrewService.java @@ -94,4 +94,9 @@ public void removeMember(Crew crew, Integer targetUserId) { log.debug("action=remove_member_end crewPublicId={} targetUserId={}", crew.getPublicId(), targetUserId); } + + @Transactional(readOnly = true) + public boolean existNewJoinRequest(Integer crewId) { + return crewJoinRequestRepository.existsByCrewIdAndStatus(crewId, CrewJoinRequestStatus.WAITING); + } } \ No newline at end of file From b2fc5e4cb28d8a06b3023526d60c2e3b768d2802 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:37:19 +0900 Subject: [PATCH 19/23] :sparkles: feat : make getCrewHome api --- .../crew/controller/QueryCrewController.java | 31 +++++++ .../model/request/CreateCrewRequest.java | 7 ++ .../model/response/CrewThisMonthRecord.java | 27 ++++++ .../model/response/GetCrewHomeResponse.java | 87 +++++++++++++++++++ .../model/response/RunCardInfo.java | 55 ++++++++++++ .../model/response/SimpleUserInfo.java | 30 +++++++ .../crew/service/model/CrewRunCardInfo.java | 17 ++++ .../service/usecase/QueryCrewUseCase.java | 8 ++ .../service/usecase/QueryCrewUseCaseImpl.java | 71 +++++++++++++++ 9 files changed, 333 insertions(+) create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/QueryCrewController.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/CrewThisMonthRecord.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/RunCardInfo.java create mode 100644 src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java create mode 100644 src/main/java/com/run_us/server/domains/crew/service/model/CrewRunCardInfo.java create mode 100644 src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCase.java create mode 100644 src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCaseImpl.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/QueryCrewController.java b/src/main/java/com/run_us/server/domains/crew/controller/QueryCrewController.java new file mode 100644 index 00000000..aac1cc4e --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/QueryCrewController.java @@ -0,0 +1,31 @@ +package com.run_us.server.domains.crew.controller; + +import com.run_us.server.domains.crew.controller.model.response.GetCrewHomeResponse; +import com.run_us.server.domains.crew.service.usecase.QueryCrewUseCase; +import com.run_us.server.global.common.SuccessResponse; +import com.run_us.server.global.security.annotation.CurrentUser; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/crews") +@RequiredArgsConstructor +public class QueryCrewController { + private final QueryCrewUseCase queryCrewUseCase; + + @GetMapping("/{crewPublicId}/home") + public ResponseEntity> getCrewHome( + @PathVariable String crewPublicId, + @CurrentUser String currentUserPublicId) { + log.info("action=get_crew_home crew_public_id={}, user_id={}", crewPublicId, currentUserPublicId); + + SuccessResponse response = queryCrewUseCase.getCrewHome(crewPublicId, currentUserPublicId); + return ResponseEntity.ok().body(response); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/request/CreateCrewRequest.java b/src/main/java/com/run_us/server/domains/crew/controller/model/request/CreateCrewRequest.java index 25aab343..350bb463 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/request/CreateCrewRequest.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/request/CreateCrewRequest.java @@ -3,6 +3,7 @@ import com.run_us.server.domains.crew.domain.Crew; import com.run_us.server.domains.crew.domain.CrewDescription; import com.run_us.server.domains.crew.domain.CrewMembership; +import com.run_us.server.domains.crew.domain.CrewMonthlyRecord; import com.run_us.server.domains.crew.domain.enums.CrewJoinType; import com.run_us.server.domains.crew.domain.enums.CrewMembershipRole; import com.run_us.server.domains.crew.domain.enums.CrewThemeType; @@ -37,11 +38,17 @@ public Crew toEntity(User creator) { .userId(creator.getId()) .role(CrewMembershipRole.OWNER) .build(); + CrewMonthlyRecord monthlyRecord = CrewMonthlyRecord.builder() + .totalRunningCount(0) + .totalDistance(0) + .totalTime(0) + .build(); return Crew.builder() .crewDescription(description) .joinType(CrewJoinType.valueOf(this.joinType)) .owner(creator) .crewMemberships(List.of(ownerMembership)) + .monthlyRecord(monthlyRecord) .build(); } } diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/CrewThisMonthRecord.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/CrewThisMonthRecord.java new file mode 100644 index 00000000..966621e5 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/CrewThisMonthRecord.java @@ -0,0 +1,27 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.crew.domain.CrewMonthlyRecord; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class CrewThisMonthRecord { + private Integer totalRunningCount; + private Integer totalDistance; + private Integer totalTime; + + @Builder + CrewThisMonthRecord(Integer totalRunningCount, Integer totalDistance, Integer totalTime){ + this.totalRunningCount = totalRunningCount; + this.totalDistance = totalDistance; + this.totalTime = totalTime; + } + + public static CrewThisMonthRecord from(CrewMonthlyRecord monthlyRecord){ + return CrewThisMonthRecord.builder() + .totalRunningCount(monthlyRecord.getTotalRunningCount()) + .totalDistance(monthlyRecord.getTotalDistance()) + .totalTime(monthlyRecord.getTotalTime()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java new file mode 100644 index 00000000..190b323d --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java @@ -0,0 +1,87 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.crew.domain.CrewDescription; +import com.run_us.server.domains.crew.domain.enums.CrewJoinType; +import com.run_us.server.domains.crew.domain.enums.CrewThemeType; +import com.run_us.server.domains.crew.service.model.CrewRunCardInfo; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import java.time.ZonedDateTime; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class GetCrewHomeResponse { + private String crewPublicId; + private String title; + private String profileImg; + private String location; + private String intro; + private CrewJoinType joinType; + private String joinQuestion; + private CrewThemeType crewType; + private Integer memberCount; + private ZonedDateTime createdAt; + private SimpleUserInfo crewOwner; + private Boolean existNewJoinRequest; + private CrewThisMonthRecord thisMonthRecord; + private RunCardInfo regularRunning; + private RunCardInfo irregularRunning; + + @Builder + public GetCrewHomeResponse( // TODO : 가독성 이게 최선인가.. + String crewPublicId, String title, String profileImg, String location, String intro, + CrewJoinType joinType, String joinQuestion, CrewThemeType crewType, + Integer memberCount, ZonedDateTime createdAt, SimpleUserInfo crewOwner, + Boolean existNewJoinRequest, CrewThisMonthRecord thisMonthRecord, + RunCardInfo regularRunning, RunCardInfo irregularRunning + ) { + this.crewPublicId = crewPublicId; + this.title = title; + this.profileImg = profileImg; + this.location = location; + this.intro = intro; + this.joinType = joinType; + this.joinQuestion = joinQuestion; + this.crewType = crewType; + this.memberCount = memberCount; + this.createdAt = createdAt; + this.crewOwner = crewOwner; + this.existNewJoinRequest = existNewJoinRequest; + this.thisMonthRecord = thisMonthRecord; + this.regularRunning = regularRunning; + this.irregularRunning = irregularRunning; + } + + + public static GetCrewHomeResponse from(Crew crew, boolean existNewJoinRequest, CrewRunCardInfo cardRunInfo) { + CrewDescription description = crew.getCrewDescription(); + + GetCrewHomeResponseBuilder builder = GetCrewHomeResponse.builder() + .crewPublicId(crew.getPublicId()) + .title(description.getTitle()) + .profileImg(description.getProfileImageUrl()) + .location(description.getLocation()) + .intro(description.getIntro()) + .joinType(crew.getJoinType()) + .joinQuestion(description.getJoinQuestion()) + .crewType(description.getThemeType()) + .memberCount(crew.getMemberCount()) + .createdAt(crew.getCreatedAt()) + + .crewOwner(SimpleUserInfo.from(crew.getOwner())) + .existNewJoinRequest(existNewJoinRequest) + .thisMonthRecord(CrewThisMonthRecord.from(crew.getMonthlyRecord())); + + if (cardRunInfo.getIrregularRunCard() != null) { + builder.irregularRunning(cardRunInfo.getIrregularRunCard()); + } + if (cardRunInfo.getRegularRunCard() != null) { + builder.regularRunning(cardRunInfo.getRegularRunCard()); + } + + return builder.build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/RunCardInfo.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/RunCardInfo.java new file mode 100644 index 00000000..3ea5f893 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/RunCardInfo.java @@ -0,0 +1,55 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.running.run.domain.Run; +import com.run_us.server.domains.running.run.domain.RunPace; +import com.run_us.server.domains.running.run.domain.RunningPreview; +import com.run_us.server.domains.user.domain.User; +import com.run_us.server.global.common.GlobalConst; +import lombok.Builder; +import lombok.Getter; + +import java.time.format.DateTimeFormatter; +import java.util.List; + +@Getter +public class RunCardInfo { + private String runningPublicId; + private String topMessage; + private String title; + private String description; + private String startAt; + private List paceList; + private Integer participantCount; + private SimpleUserInfo createdBy; + + + @Builder + private RunCardInfo( + String runningPublicId, + String topMessage, String title, String description, String startAt, + List paceList, Integer participantCount, SimpleUserInfo createdBy) { + this.runningPublicId = runningPublicId; + this.topMessage = topMessage; + this.title = title; + this.description = description; + this.startAt = startAt; + this.paceList = paceList; + this.participantCount = participantCount; + this.createdBy = createdBy; + } + + public static RunCardInfo from(Run run, String topMessage, User createdUser) { + RunningPreview preview = run.getPreview(); + + return RunCardInfo.builder() + .runningPublicId(run.getPublicId()) + .topMessage(topMessage) + .title(preview.getTitle()) + .description(preview.getDescription()) + .startAt(preview.getBeginTime().format(DateTimeFormatter.ofPattern(GlobalConst.TIME_FORMAT_PATTERN))) + .paceList(run.getPaceCategories()) + .createdBy(SimpleUserInfo.from(createdUser)) + .build(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java new file mode 100644 index 00000000..e0c36df4 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java @@ -0,0 +1,30 @@ +package com.run_us.server.domains.crew.controller.model.response; + +import com.run_us.server.domains.user.domain.User; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class SimpleUserInfo { + private String userPublicId; + private String profileImageUrl; + private String nickname; + + @Builder + public SimpleUserInfo(String userPublicId, String profileImageUrl, String nickname) { + this.userPublicId = userPublicId; + this.profileImageUrl = profileImageUrl; + this.nickname = nickname; + } + + public static SimpleUserInfo from(User user) { +// String profileImgUrl = user.getProfile()==null ? "tempUrl" : user.getProfile().getImgUrl(); +// String profileImgUrl = user.getProfile()==null ? "temp" : user.getProfile().getImgUrl(); + + return SimpleUserInfo.builder() + .userPublicId(user.getPublicId()) + .profileImageUrl(user.getProfile().getImgUrl()) + .nickname(user.getProfile().getNickname()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/service/model/CrewRunCardInfo.java b/src/main/java/com/run_us/server/domains/crew/service/model/CrewRunCardInfo.java new file mode 100644 index 00000000..65bd5ff9 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/model/CrewRunCardInfo.java @@ -0,0 +1,17 @@ +package com.run_us.server.domains.crew.service.model; + +import com.run_us.server.domains.crew.controller.model.response.RunCardInfo; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class CrewRunCardInfo { + RunCardInfo regularRunCard; + RunCardInfo irregularRunCard; + + @Builder + public CrewRunCardInfo(RunCardInfo regularRunCard, RunCardInfo irregularRunCard) { + this.regularRunCard = regularRunCard; + this.irregularRunCard = irregularRunCard; + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCase.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCase.java new file mode 100644 index 00000000..405130a3 --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCase.java @@ -0,0 +1,8 @@ +package com.run_us.server.domains.crew.service.usecase; + +import com.run_us.server.domains.crew.controller.model.response.GetCrewHomeResponse; +import com.run_us.server.global.common.SuccessResponse; + +public interface QueryCrewUseCase { + SuccessResponse getCrewHome(String crewPublicId, String userPublicId); +} diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCaseImpl.java new file mode 100644 index 00000000..4f1ec47a --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/QueryCrewUseCaseImpl.java @@ -0,0 +1,71 @@ +package com.run_us.server.domains.crew.service.usecase; +import com.run_us.server.domains.crew.controller.model.enums.CrewHttpResponseCode; +import com.run_us.server.domains.crew.controller.model.response.GetCrewHomeResponse; +import com.run_us.server.domains.crew.controller.model.response.RunCardInfo; +import com.run_us.server.domains.crew.domain.Crew; +import com.run_us.server.domains.crew.service.CrewService; +import com.run_us.server.domains.crew.service.CrewValidator; +import com.run_us.server.domains.crew.service.model.CrewRunCardInfo; +import com.run_us.server.domains.running.run.domain.Run; +import com.run_us.server.domains.running.run.service.RunQueryService; +import com.run_us.server.domains.running.run.service.model.GetCrewCardRun; +import com.run_us.server.domains.running.run.service.strategy.RunTopMessageContext; +import com.run_us.server.domains.running.run.service.strategy.TimePlaceMessage; +import com.run_us.server.domains.user.domain.User; +import com.run_us.server.domains.user.domain.UserPrincipal; +import com.run_us.server.domains.user.service.UserService; +import com.run_us.server.domains.user.service.resolver.UserIdResolver; +import com.run_us.server.global.common.SuccessResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryCrewUseCaseImpl implements QueryCrewUseCase { + private final CrewService crewService; + private final RunQueryService runQueryService; + private final UserService userService; + private final UserIdResolver userIdResolver; + private final CrewValidator crewValidator; + + @Override + public SuccessResponse getCrewHome(String crewPublicId, String userPublicId) { + UserPrincipal userPrincipal = userIdResolver.resolve(userPublicId); + Crew crew = crewService.getCrewByPublicId(crewPublicId); + crewValidator.validateCrewMember(crew, userPrincipal.getInternalId()); + + boolean existNewJoinRequest = crewService.existNewJoinRequest(crew.getId()); + + CrewRunCardInfo crewRunCardInfo = getCrewRunCardInfo(crew); + + return SuccessResponse.of(CrewHttpResponseCode.CREW_HOME_FETCHED, GetCrewHomeResponse.from(crew, existNewJoinRequest, crewRunCardInfo)); + } + + private CrewRunCardInfo getCrewRunCardInfo(Crew crew) { + GetCrewCardRun crewCardRun = runQueryService.getCrewCardRun(crew.getId()); + + CrewRunCardInfo.CrewRunCardInfoBuilder crewCardRunBuilder = CrewRunCardInfo.builder(); + + Run regularRun = crewCardRun.getRegularRun(); + if (regularRun != null) { + RunCardInfo regularRunCard = getRunCardInfo(regularRun); + crewCardRunBuilder.regularRunCard(regularRunCard); + } + + Run irregularRun = crewCardRun.getIrregularRun(); + if(irregularRun != null) { + RunCardInfo irregularRunCard = getRunCardInfo(irregularRun); + crewCardRunBuilder.irregularRunCard(irregularRunCard); + } + + return crewCardRunBuilder.build(); + } + + private RunCardInfo getRunCardInfo(Run run) { + User runHost = userService.getUserByInternalId(run.getHostId()); + return RunCardInfo.from(run, RunTopMessageContext.getMessage(new TimePlaceMessage(run)), runHost); + } + +} \ No newline at end of file From 3472c5f821def827cca54e6ebc30e7dca4adba87 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Thu, 6 Mar 2025 18:37:51 +0900 Subject: [PATCH 20/23] :sparkles: edit : change to use @CurrentUser --- .../server/domains/crew/controller/CrewController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java index 7716b050..6dfd7be6 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/CrewController.java @@ -35,10 +35,10 @@ public class CrewController { @PostMapping public ResponseEntity> createCrew( @RequestBody CreateCrewRequest requestDto, - @RequestAttribute("publicUserId") String userId) { - log.info("action=create_crew user_id={}", userId); + @CurrentUser String currentUserPublicId) { + log.info("action=create_crew user_id={}", currentUserPublicId); - SuccessResponse response = createCrewUseCase.createCrew(requestDto, userId); + SuccessResponse response = createCrewUseCase.createCrew(requestDto, currentUserPublicId); return ResponseEntity.status(HttpStatus.CREATED).body(response); } From b9f082cf89fb0089463274bac00c4b951f8580ad Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Sat, 8 Mar 2025 00:31:52 +0900 Subject: [PATCH 21/23] :bug: fix : add exception throwing when user profile is null --- .../controller/model/response/SimpleUserInfo.java | 14 ++++++++++---- .../domains/user/exception/UserErrorCode.java | 5 ++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java index e0c36df4..50c973cc 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/SimpleUserInfo.java @@ -1,6 +1,10 @@ package com.run_us.server.domains.crew.controller.model.response; +import com.run_us.server.domains.crew.controller.model.enums.CrewErrorCode; +import com.run_us.server.domains.crew.controller.model.enums.CrewException; +import com.run_us.server.domains.user.domain.Profile; import com.run_us.server.domains.user.domain.User; +import com.run_us.server.domains.user.exception.UserErrorCode; import lombok.Builder; import lombok.Getter; @@ -18,13 +22,15 @@ public SimpleUserInfo(String userPublicId, String profileImageUrl, String nickna } public static SimpleUserInfo from(User user) { -// String profileImgUrl = user.getProfile()==null ? "tempUrl" : user.getProfile().getImgUrl(); -// String profileImgUrl = user.getProfile()==null ? "temp" : user.getProfile().getImgUrl(); + Profile profile = user.getProfile(); + if(profile == null){ + throw new CrewException(UserErrorCode.GET_USER_PROFILE_FAILED); + } return SimpleUserInfo.builder() .userPublicId(user.getPublicId()) - .profileImageUrl(user.getProfile().getImgUrl()) - .nickname(user.getProfile().getNickname()) + .profileImageUrl(profile.getImgUrl()) + .nickname(profile.getNickname()) .build(); } } diff --git a/src/main/java/com/run_us/server/domains/user/exception/UserErrorCode.java b/src/main/java/com/run_us/server/domains/user/exception/UserErrorCode.java index d6d30bf8..c69c2d1d 100644 --- a/src/main/java/com/run_us/server/domains/user/exception/UserErrorCode.java +++ b/src/main/java/com/run_us/server/domains/user/exception/UserErrorCode.java @@ -17,7 +17,10 @@ public enum UserErrorCode implements CustomResponseCode { REFRESH_FAILED("UEH4015", HttpStatus.UNAUTHORIZED, "리프레시 토큰이 만료되었습니다.", "리프레시 토큰이 만료되었습니다."), // 404 - USER_NOT_FOUND("UEH4041", HttpStatus.NOT_FOUND, "사용자를 찾을 수 없음", "사용자를 찾을 수 없음"),; + USER_NOT_FOUND("UEH4041", HttpStatus.NOT_FOUND, "사용자를 찾을 수 없음", "사용자를 찾을 수 없음"), + + // 409 + GET_USER_PROFILE_FAILED("UEH4091", HttpStatus.CONFLICT, "사용자의 프로필 정보를 가져올 수 없음", "사용자의 프로필 정보를 가져올 수 없음"); private final String code; private final HttpStatus httpStatusCode; From 4fc6d5feca60c2cdfb8294a04cc97122653f91cd Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Sat, 8 Mar 2025 01:37:08 +0900 Subject: [PATCH 22/23] :bug: fix : use service model UpdateCrewInfo instead of request dto --- .../model/request/UpdateCrewInfoRequest.java | 11 ----- .../crew/service/CommandCrewService.java | 8 ++- .../crew/service/model/UpdateCrewInfo.java | 49 +++++++++++++++++++ .../usecase/CommandCrewUseCaseImpl.java | 3 +- 4 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/run_us/server/domains/crew/service/model/UpdateCrewInfo.java diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java index d25458c7..bc0aaafd 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/request/UpdateCrewInfoRequest.java @@ -14,15 +14,4 @@ public class UpdateCrewInfoRequest { private String location; private String profileImageUrl; private CrewThemeType crewType; - - public CrewDescription from(CrewDescription old) { - return CrewDescription.builder() - .title(this.title) - .intro(this.intro) - .location(this.location) - .profileImageUrl(this.profileImageUrl) - .themeType(this.crewType) - .joinQuestion(old.getJoinQuestion()) - .build(); - } } diff --git a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java index 7ce5206b..ee6a4cbd 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java +++ b/src/main/java/com/run_us/server/domains/crew/service/CommandCrewService.java @@ -1,13 +1,11 @@ package com.run_us.server.domains.crew.service; -import com.run_us.server.domains.crew.controller.model.enums.CrewErrorCode; -import com.run_us.server.domains.crew.controller.model.enums.CrewException; import com.run_us.server.domains.crew.controller.model.request.CreateCrewRequest; -import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; import com.run_us.server.domains.crew.controller.model.request.UpdateCrewJoinTypeRequest; import com.run_us.server.domains.crew.domain.Crew; import com.run_us.server.domains.crew.domain.CrewDescription; import com.run_us.server.domains.crew.repository.CrewRepository; +import com.run_us.server.domains.crew.service.model.UpdateCrewInfo; import com.run_us.server.domains.user.domain.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -24,10 +22,10 @@ public Crew saveCrew(CreateCrewRequest requestDto, User creator) { return crewRepository.save(crew); } - public void updateCrewInfo(UpdateCrewInfoRequest requestDto, Crew crew, Integer userId) { + public void updateCrewInfo(UpdateCrewInfo requestDto, Crew crew, Integer userId) { crewValidator.validateCrewOwner(crew, userId); - CrewDescription newCrewDescription = requestDto.from(crew.getCrewDescription()); + CrewDescription newCrewDescription = requestDto.to(crew.getCrewDescription()); crew.updateCrewInfo(newCrewDescription); } diff --git a/src/main/java/com/run_us/server/domains/crew/service/model/UpdateCrewInfo.java b/src/main/java/com/run_us/server/domains/crew/service/model/UpdateCrewInfo.java new file mode 100644 index 00000000..b513931d --- /dev/null +++ b/src/main/java/com/run_us/server/domains/crew/service/model/UpdateCrewInfo.java @@ -0,0 +1,49 @@ +package com.run_us.server.domains.crew.service.model; + +import com.run_us.server.domains.crew.controller.model.request.UpdateCrewInfoRequest; +import com.run_us.server.domains.crew.domain.CrewDescription; +import com.run_us.server.domains.crew.domain.enums.CrewThemeType; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UpdateCrewInfo { + private String title; + private String intro; + private String location; + private String profileImageUrl; + private CrewThemeType crewType; + + @Builder + UpdateCrewInfo(String title, String intro, String location, String profileImageUrl, CrewThemeType crewType){ + this.title = title; + this.intro = intro; + this.location = location; + this.profileImageUrl = profileImageUrl; + this.crewType = crewType; + } + + public static UpdateCrewInfo from(UpdateCrewInfoRequest requestDto) { + return UpdateCrewInfo.builder() + .title(requestDto.getTitle()) + .intro(requestDto.getIntro()) + .location(requestDto.getLocation()) + .profileImageUrl(requestDto.getProfileImageUrl()) + .crewType(requestDto.getCrewType()) + .build(); + } + + public CrewDescription to(CrewDescription old) { + return CrewDescription.builder() + .title(this.title) + .intro(this.intro) + .location(this.location) + .profileImageUrl(this.profileImageUrl) + .themeType(this.crewType) + .joinQuestion(old.getJoinQuestion()) + .build(); + } +} diff --git a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java index b0561ec2..5f82cae7 100644 --- a/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java +++ b/src/main/java/com/run_us/server/domains/crew/service/usecase/CommandCrewUseCaseImpl.java @@ -9,6 +9,7 @@ import com.run_us.server.domains.crew.domain.Crew; import com.run_us.server.domains.crew.service.CommandCrewService; import com.run_us.server.domains.crew.service.CrewService; +import com.run_us.server.domains.crew.service.model.UpdateCrewInfo; import com.run_us.server.domains.user.domain.UserPrincipal; import com.run_us.server.domains.user.service.resolver.UserIdResolver; import com.run_us.server.global.common.SuccessResponse; @@ -30,7 +31,7 @@ public SuccessResponse updateCrewInfo(String crewPublicI UserPrincipal userPrincipal = userIdResolver.resolve(userPublicId); Crew crew = crewService.getCrewByPublicId(crewPublicId); - commandCrewService.updateCrewInfo(requestDto, crew, userPrincipal.getInternalId()); + commandCrewService.updateCrewInfo(UpdateCrewInfo.from(requestDto), crew, userPrincipal.getInternalId()); return SuccessResponse.of(CrewHttpResponseCode.CREW_UPDATED, UpdateCrewInfoResponse.from(crew.getPublicId())); } From 1f2838e97340f1fbfab85fef1c036673523e6c6a Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Sat, 8 Mar 2025 01:38:52 +0900 Subject: [PATCH 23/23] :bulb: comment : delete TODO comment --- .../crew/controller/model/response/GetCrewHomeResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java b/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java index 190b323d..ee3fef7c 100644 --- a/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java +++ b/src/main/java/com/run_us/server/domains/crew/controller/model/response/GetCrewHomeResponse.java @@ -31,7 +31,7 @@ public class GetCrewHomeResponse { private RunCardInfo irregularRunning; @Builder - public GetCrewHomeResponse( // TODO : 가독성 이게 최선인가.. + public GetCrewHomeResponse( String crewPublicId, String title, String profileImg, String location, String intro, CrewJoinType joinType, String joinQuestion, CrewThemeType crewType, Integer memberCount, ZonedDateTime createdAt, SimpleUserInfo crewOwner,