Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +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.*;
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;
Expand All @@ -30,6 +29,7 @@ public class CrewController {
private final CrewJoinUseCase crewJoinUseCase;
private final CreateCrewUseCase createCrewUseCase;
private final CrewMemberUseCase crewMemberUseCase;
private final CommandCrewUseCase commandCrewUseCase;


@PostMapping
Expand All @@ -43,6 +43,37 @@ public ResponseEntity<SuccessResponse<CreateCrewResponse>> createCrew(
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}

@PatchMapping("/{crewPublicId}")
public ResponseEntity<SuccessResponse<UpdateCrewInfoResponse>> updateCrewInfo(
@PathVariable String crewPublicId,
@RequestBody UpdateCrewInfoRequest requestDto,
@CurrentUser String currentUserPublicId){
log.info("action=update_crew_info userPublicId={}, crewPublicId={}", currentUserPublicId, crewPublicId);

SuccessResponse<UpdateCrewInfoResponse> response = commandCrewUseCase.updateCrewInfo(crewPublicId, requestDto, currentUserPublicId);
return ResponseEntity.ok().body(response);
}

@PatchMapping("/{crewPublicId}/join-rule")
public ResponseEntity<SuccessResponse<UpdateCrewJoinRuleResponse>> updateCrewJoinRule(
@PathVariable String crewPublicId,
@RequestBody UpdateCrewJoinTypeRequest requestDto,
@CurrentUser String currentUserPublicId){
log.info("action=update_crew_join_rule userPublicId={}, crewPublicId={}", currentUserPublicId, crewPublicId);

SuccessResponse<UpdateCrewJoinRuleResponse> response = commandCrewUseCase.updateCrewJoinRule(crewPublicId, requestDto, currentUserPublicId);
return ResponseEntity.ok().body(response);
}

@DeleteMapping("/{crewPublicId}")
public ResponseEntity<SuccessResponse<CloseCrewResponse>> closeCrew(
@PathVariable String crewPublicId,
@CurrentUser String currentUserPublicId){
log.info("action=delete_crew userPublicId={}, crewPublicId={}", currentUserPublicId, crewPublicId);

SuccessResponse<CloseCrewResponse> response = commandCrewUseCase.closeCrew(crewPublicId, currentUserPublicId);
return ResponseEntity.ok().body(response);
}

@PostMapping("/{crewPublicId}/join-requests")
public ResponseEntity<SuccessResponse<CreateJoinRequestResponse>> requestJoin(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public enum CrewErrorCode implements CustomResponseCode {


// 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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, "크루 검색 성공", "크루 검색 성공"),
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
19 changes: 18 additions & 1 deletion src/main/java/com/run_us/server/domains/crew/domain/Crew.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -75,6 +74,15 @@ public void removeMember(Integer userId) {
this.memberCount--;
}

public boolean isOwner(Integer userId) {
return this.owner.getId().equals(userId);
}

public void updateCrewInfo(CrewDescription crewDescription) {
this.crewDescription = crewDescription;
}


@Override
public void prePersist() {
this.publicId = TSID.Factory.getTsid().toString();
Expand All @@ -95,4 +103,13 @@ public Crew(
this.status = CrewStatus.ACTIVE;
this.crewMemberships = crewMemberships;
}

public void updateJoinRule(CrewJoinType joinType, String joinQuestion) {
this.joinType = joinType;
this.getCrewDescription().updateJoinQuestion(joinQuestion);
}

public void close() {
this.status = CrewStatus.SUSPENDED;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
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.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class CommandCrewService {

private final CrewRepository crewRepository;

public Crew saveCrew(CreateCrewRequest requestDto, User creator) {
Crew crew = requestDto.toEntity(creator);
return crewRepository.save(crew);
}

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.updateJoinRule(requestDto.getJoinType(), requestDto.getJoinQuestion());
}

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);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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.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<UpdateCrewInfoResponse> updateCrewInfo(String crewPublicId, UpdateCrewInfoRequest requestDto, String userPublicId);

SuccessResponse<UpdateCrewJoinRuleResponse> updateCrewJoinRule(String crewPublicId, UpdateCrewJoinTypeRequest requestDto, String userPublicId);

SuccessResponse<CloseCrewResponse> closeCrew(String crewPublicId, String userPublicId);
}
Loading
Loading