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
53 changes: 46 additions & 7 deletions src/main/java/com/retrip/crew/application/in/CrewService.java
Original file line number Diff line number Diff line change
@@ -1,41 +1,80 @@
package com.retrip.crew.application.in;

import com.retrip.crew.application.in.request.CreateDemandRequest;
import com.retrip.crew.application.in.request.CrewCreateRequest;
import com.retrip.crew.application.in.request.CrewOrder;
import com.retrip.crew.application.in.response.CrewCreateResponse;
import com.retrip.crew.application.in.response.CrewDetailResponse;
import com.retrip.crew.application.in.response.CrewListResponse;
import com.retrip.crew.application.in.usecase.CreateCrewUseCase;
import com.retrip.crew.application.in.request.CrewUpdateRequest;
import com.retrip.crew.application.in.response.*;
import com.retrip.crew.application.in.usecase.GetCrewUseCase;
import com.retrip.crew.application.in.usecase.ManageCrewUseCase;
import com.retrip.crew.application.in.usecase.ManageDemandUseCase;
import com.retrip.crew.application.in.usecase.UpdateRecruitmentUseCase;
import com.retrip.crew.application.out.repository.CrewMemberRepository;
import com.retrip.crew.application.out.repository.CrewQueryRepository;
import com.retrip.crew.application.out.repository.CrewRepository;
import com.retrip.crew.domain.entity.Crew;
import com.retrip.crew.domain.entity.Demand;
import com.retrip.crew.domain.entity.Recruitment;
import com.retrip.crew.domain.exception.CrewNotFoundException;
import com.retrip.crew.domain.vo.CrewDescription;
import com.retrip.crew.domain.vo.CrewTitle;
import com.retrip.crew.infra.adapter.in.presentation.rest.common.ScrollPageResponse;
import com.retrip.crew.infra.util.PaginationUtils;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

@Service
@Transactional
@RequiredArgsConstructor
public class CrewService implements CreateCrewUseCase, GetCrewUseCase {
public class CrewService implements ManageCrewUseCase, UpdateRecruitmentUseCase, ManageDemandUseCase, GetCrewUseCase {
private final CrewRepository crewRepository;
private final CrewMemberRepository crewMemberRepository;
private final CrewQueryRepository crewQueryRepository;

@Override
public CrewCreateResponse createCrew(CrewCreateRequest request) {
Crew crew = crewRepository.save(request.to(request.leader()));

return CrewCreateResponse.of(crew);
}

@Override
public CrewUpdateResponse updateCrew(UUID crewId, CrewUpdateRequest request) {
Crew crew = findById(crewId);
CrewTitle title = new CrewTitle(request.title());
CrewDescription description = new CrewDescription(request.description());
Recruitment recruitment = crew.getRecruitment();

crew.update(title, description);
recruitment.updateMaxMembers(request.maxMembers());
return CrewUpdateResponse.of(crew);
}

@Override
public ChangeRecruitmentStatusResponse startRecruitment(UUID crewId) {
Crew crew = findById(crewId);
crew.startRecruitment();
return ChangeRecruitmentStatusResponse.of(crew);
}

@Override
public ChangeRecruitmentStatusResponse stopRecruitment(UUID crewId) {
Crew crew = findById(crewId);
crew.stopRecruitment();
return ChangeRecruitmentStatusResponse.of(crew);
}

@Override
public CreateDemandResponse createDemand(UUID crewId, CreateDemandRequest request) {
Crew crew = findById(crewId);
Demand demand = crew.demand(request.memberId());
return CreateDemandResponse.of(crew.getId(), demand);
}

@Override
@Transactional(readOnly = true)
public ScrollPageResponse<CrewListResponse> getCrews(Pageable pageable, String keyword, CrewOrder order, String sort) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.retrip.crew.application.in.request;

import java.util.UUID;

public record CreateDemandRequest(
UUID memberId
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.retrip.crew.domain.entity.Crew;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Size;

import java.util.UUID;
Expand All @@ -11,14 +10,17 @@
public record CrewCreateRequest(
@Schema(description = "리더 ID")
UUID leader,

@Schema(description = "크루 타이틀")
@Size(min = 1, max = 30)
String title,

@Schema(description = "크루 설명")
@Size(min = 1, max = 500)
String description,
@Schema(description = "크루 최대 인원")
@Min(1)

@Schema(description = "크루 최대 인원수")
@Size(min = 5, max = 1000)
int maxMembers
){

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.retrip.crew.application.in.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Size;

@Schema(description = "크루 정보 수정 Request")
public record CrewUpdateRequest(
@Schema(description = "크루 타이틀")
@Size(min = 1, max = 30)
String title,

@Schema(description = "크루 설명")
@Size(min = 1, max = 500)
String description,
Comment on lines +8 to +14
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto


@Schema(description = "크루 최대 인원수")
@Size(min = 5, max = 1000)
int maxMembers
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.retrip.crew.application.in.response;

import com.retrip.crew.domain.entity.Crew;
import com.retrip.crew.domain.vo.RecruitmentStatus;
import io.swagger.v3.oas.annotations.media.Schema;

import java.util.UUID;

public record ChangeRecruitmentStatusResponse(
@Schema(description = "크루 ID")
UUID id,

@Schema(description = "모집 상태")
RecruitmentStatus status
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 값 Enum 값 Swagger에 어떻게 표시되는지 확인 가능하실까요??

) {
public static ChangeRecruitmentStatusResponse of(Crew crew) {
return new ChangeRecruitmentStatusResponse(crew.getId(), crew.getRecruitment().getStatus());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.retrip.crew.application.in.response;

import com.retrip.crew.domain.entity.Demand;

import java.util.UUID;

public record CreateDemandResponse(
UUID crewId,
UUID memberId
) {
public static CreateDemandResponse of(UUID crewId, Demand demand) {
return new CreateDemandResponse(crewId, demand.getMemberId());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.retrip.crew.application.in.response;

import com.retrip.crew.domain.entity.Crew;
import com.retrip.crew.domain.vo.RecruitmentStatus;
import io.swagger.v3.oas.annotations.media.Schema;

import java.util.UUID;
Expand All @@ -9,19 +10,32 @@
public record CrewCreateResponse(
@Schema(description = "크루 ID")
UUID id,

@Schema(description = "크루 타이틀")
String title,

@Schema(description = "크루 설명")
String description,

@Schema(description = "리더 ID")
UUID leaderId
UUID leaderId,

@Schema(description = "크루 최대 인원수")
int maxMembers,

@Schema(description = "모집 상태")
RecruitmentStatus status


) {
public static CrewCreateResponse of(Crew crew) {
return new CrewCreateResponse(
crew.getId(),
crew.getTitle().getValue(),
crew.getDescription(),
crew.getLeader().getId()
crew.getLeader().getId(),
crew.getRecruitment().getMaxMembers(),
crew.getRecruitment().getStatus()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import com.retrip.crew.domain.entity.Crew;
import com.retrip.crew.domain.entity.CrewMember;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;

import java.util.List;
import java.util.UUID;
import lombok.Builder;

@Schema
@Builder
Expand Down Expand Up @@ -39,7 +40,7 @@ public static CrewDetailResponse of(Crew crew, int memberCount){
.description(crew.getDescription())
.leaderId(crew.getLeader().getMemberId())
.memberCount(memberCount)
.maxMemberCount(crew.getMaxMembers())
.maxMemberCount(crew.getRecruitment().getMaxMembers())
.members(toList(crew.getCrewMembers().getValues()))
.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.retrip.crew.application.in.response;

import com.retrip.crew.domain.entity.Crew;
import com.retrip.crew.domain.vo.RecruitmentStatus;
import io.swagger.v3.oas.annotations.media.Schema;

import java.util.UUID;

public record CrewUpdateResponse(
@Schema(description = "크루 ID")
UUID id,

@Schema(description = "크루 타이틀")
String title,

@Schema(description = "크루 설명")
String description,

@Schema(description = "리더 ID")
UUID leaderId,

@Schema(description = "크루 최대 인원수")
int maxMembers,

@Schema(description = "모집 상태")
RecruitmentStatus status
) {
public static CrewUpdateResponse of(Crew crew) {
return new CrewUpdateResponse(
crew.getId(),
crew.getTitle().getValue(),
crew.getDescription(),
crew.getLeader().getId(),
crew.getRecruitment().getMaxMembers(),
crew.getRecruitment().getStatus()
);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.retrip.crew.application.in.usecase;

import com.retrip.crew.application.in.request.CrewCreateRequest;
import com.retrip.crew.application.in.request.CrewUpdateRequest;
import com.retrip.crew.application.in.response.CrewCreateResponse;
import com.retrip.crew.application.in.response.CrewUpdateResponse;

import java.util.UUID;

public interface ManageCrewUseCase {
CrewCreateResponse createCrew(CrewCreateRequest request);

CrewUpdateResponse updateCrew(UUID crewId, CrewUpdateRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.retrip.crew.application.in.usecase;

import com.retrip.crew.application.in.request.CreateDemandRequest;
import com.retrip.crew.application.in.response.CreateDemandResponse;

import java.util.UUID;

public interface ManageDemandUseCase {
CreateDemandResponse createDemand(UUID crewId, CreateDemandRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.retrip.crew.application.in.usecase;

import com.retrip.crew.application.in.response.ChangeRecruitmentStatusResponse;

import java.util.UUID;

public interface UpdateRecruitmentUseCase {
ChangeRecruitmentStatusResponse startRecruitment(UUID crewId);

ChangeRecruitmentStatusResponse stopRecruitment(UUID crewId);
}
Loading