From 0a860052abbbea70ab70d8909bad5423cbe28083 Mon Sep 17 00:00:00 2001 From: jeeheaG Date: Wed, 1 Jan 2025 16:50:38 +0900 Subject: [PATCH 1/9] :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 2/9] :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 3/9] :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 4/9] :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 5/9] :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 6/9] :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 7/9] :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 8/9] :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 9/9] :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)); + } }