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
Expand Up @@ -2,17 +2,13 @@

import com.follow_me.running_mate.domain.course.validation.annotation.UniqueCourseName;
import com.follow_me.running_mate.domain.enums.CourseOptionType;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.List;

@Getter
@AllArgsConstructor
public class CourseRequest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@

import com.follow_me.running_mate.domain.enums.CourseImageType;
import com.follow_me.running_mate.domain.enums.CoursePointVoice;
import com.follow_me.running_mate.domain.enums.Difficulty;
import com.follow_me.running_mate.domain.enums.Ranking;
import com.follow_me.running_mate.domain.enums.Status;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

public class CourseResponse {

@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
package com.follow_me.running_mate.domain.course.mapper;

import com.follow_me.running_mate.domain.course.dto.request.CourseRequest;
import com.follow_me.running_mate.domain.course.entity.Course;
import com.follow_me.running_mate.domain.course.entity.CourseBookmark;
import com.follow_me.running_mate.domain.course.entity.CourseImage;
import com.follow_me.running_mate.domain.course.entity.CourseOption;
import com.follow_me.running_mate.domain.course.entity.CoursePoint;
import com.follow_me.running_mate.domain.course.entity.CourseRecord;
import com.follow_me.running_mate.domain.course.entity.CourseRecordPoint;
import com.follow_me.running_mate.domain.course.entity.CourseReview;
import com.follow_me.running_mate.domain.course.entity.CourseReviewImage;
import com.follow_me.running_mate.domain.course.entity.*;
import com.follow_me.running_mate.domain.enums.CourseImageType;
import com.follow_me.running_mate.domain.enums.CourseOptionType;
import com.follow_me.running_mate.domain.enums.Status;
import com.follow_me.running_mate.domain.member.entity.Member;
import com.follow_me.running_mate.global.common.util.FormatterUtil;
import java.time.Duration;
import org.springframework.stereotype.Component;

import java.time.Duration;

@Component
public class CourseEntityMapper {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
package com.follow_me.running_mate.domain.course.mapper;

import com.follow_me.running_mate.domain.course.dto.response.CourseResponse;
import com.follow_me.running_mate.domain.course.entity.Course;
import com.follow_me.running_mate.domain.course.entity.CourseImage;
import com.follow_me.running_mate.domain.course.entity.CourseOption;
import com.follow_me.running_mate.domain.course.entity.CoursePoint;
import com.follow_me.running_mate.domain.course.entity.CourseRecord;
import com.follow_me.running_mate.domain.course.entity.CourseReview;
import com.follow_me.running_mate.domain.course.entity.CourseReviewImage;
import com.follow_me.running_mate.domain.course.entity.*;
import com.follow_me.running_mate.domain.crew.entity.Crew;
import com.follow_me.running_mate.domain.member.entity.Member;
import com.follow_me.running_mate.global.common.util.FormatterUtil;
import java.util.List;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class CourseResponseMapper {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import com.follow_me.running_mate.domain.course.exception.CourseErrorCode;
import com.follow_me.running_mate.global.error.exception.CustomException;
import io.lettuce.core.dynamic.annotation.Param;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface CourseReviewRepository extends JpaRepository<CourseReview, Long> {

default CourseReview getCourseReview(Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@

import com.follow_me.running_mate.domain.course.dto.request.CourseRequest;
import com.follow_me.running_mate.domain.course.dto.response.CourseResponse;
import com.follow_me.running_mate.domain.course.entity.Course;
import com.follow_me.running_mate.domain.course.entity.CourseOption;
import com.follow_me.running_mate.domain.course.entity.CoursePoint;
import com.follow_me.running_mate.domain.course.entity.CourseReview;
import com.follow_me.running_mate.domain.course.entity.CourseReviewImage;
import com.follow_me.running_mate.domain.course.entity.*;
import com.follow_me.running_mate.domain.course.mapper.CourseEntityMapper;
import com.follow_me.running_mate.domain.course.mapper.CourseResponseMapper;
import com.follow_me.running_mate.domain.course.repository.CourseRepository;
Expand All @@ -17,21 +13,17 @@
import com.follow_me.running_mate.domain.course.service.record.CourseRecordService;
import com.follow_me.running_mate.domain.course.service.review.CourseReviewService;
import com.follow_me.running_mate.domain.crew.service.CrewService;
import com.follow_me.running_mate.domain.enums.CourseOptionType;
import com.follow_me.running_mate.domain.enums.Difficulty;
import com.follow_me.running_mate.domain.enums.Ranking;
import com.follow_me.running_mate.domain.enums.ReviewSortType;
import com.follow_me.running_mate.domain.enums.RunningGoal;
import com.follow_me.running_mate.domain.enums.Status;
import com.follow_me.running_mate.domain.enums.*;
import com.follow_me.running_mate.domain.member.entity.Member;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.concurrent.CompletableFuture;

@Slf4j
@Service
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
import com.follow_me.running_mate.domain.course.entity.CourseReviewImage;
import com.follow_me.running_mate.domain.enums.ReviewSortType;
import com.follow_me.running_mate.domain.member.entity.Member;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface CourseReviewService {

CourseReview save(Course course, Member member, CourseRequest.CreateReviewRequest request);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,16 @@
import com.follow_me.running_mate.domain.member.entity.Member;
import com.follow_me.running_mate.global.common.service.S3ImageService;
import com.follow_me.running_mate.global.error.exception.CustomException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class CourseReviewServiceImpl implements CourseReviewService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,15 @@
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.time.YearMonth;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.time.YearMonth;
import java.util.List;

@RestController
@RequestMapping("/crew")
@RequiredArgsConstructor
Expand Down Expand Up @@ -156,9 +148,9 @@ public BaseResponse<CrewResponse.CrewScheduleListResponse> getCrewSchedule(
@ApiResponse(responseCode = "500", description = "서버 오류",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class)))
})
public BaseResponse<CrewResponse.CrewScheduleMemberListResponse> getMembersBySchedule(@PathVariable(value = "scheduleId") Long scheduleId) {
public BaseResponse<CrewResponse.CrewMemberListResponse> getMembersBySchedule(@PathVariable(value = "scheduleId") Long scheduleId) {
List<CrewResponse.CrewMemberInfo> responses = crewService.getMembersBySchedule(scheduleId);
return BaseResponse.success("스케줄 멤버 조회에 성공했습니다.", new CrewResponse.CrewScheduleMemberListResponse(responses));
return BaseResponse.success("스케줄 멤버 조회에 성공했습니다.", new CrewResponse.CrewMemberListResponse(responses));
}

//TODO: 아직 프로필 리스트 화면이 나오지 않아 임시로 팔로워랑 똑같이 작성해둠
Expand Down Expand Up @@ -520,4 +512,41 @@ public BaseResponse<CrewResponse.CrewUpdateResponse> getUpdateCrewInfo(
crewService.getUpdateCrewInfo(principalDetails.member(), crewId)
);
}
@GetMapping("/{crewId}/ready")
@Operation(summary = "READY 상태인 크루 신청자 조회 API", description = "현재 READY 상태인 크루 신청자들을 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "READY 상태인 크루 신청자 조회에 성공했습니다.",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
@ApiResponse(responseCode = "CREW009", description = "해당 크루를 찾을 수 없음",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
@ApiResponse(responseCode = "CREW004", description = "해당 사용자에게 권한이 없습니다.",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
})
public BaseResponse<CrewResponse.CrewApplyMemberListResponse> getReadyApplicants(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable(value = "crewId") Long crewId) {
return BaseResponse.success(
"READY 상태인 크루 신청자 조회에 성공했습니다.",
crewService.getReadyApplicants(principalDetails.member(), crewId)
);
}
@GetMapping("/{crewId}/members/complete")
@Operation(summary = "크루 멤버 조회 API", description = "현재 참여중인 상태인 크루 멤버들을 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "COMPLETE 상태인 크루 멤버 조회에 성공했습니다.",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
@ApiResponse(responseCode = "CREW009", description = "해당 크루를 찾을 수 없음",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
@ApiResponse(responseCode = "CREW004", description = "해당 사용자에게 권한이 없습니다.",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))),
})
public BaseResponse<CrewResponse.CrewMemberListResponse> getCompleteMembers(
@AuthenticationPrincipal PrincipalDetails principalDetails,
@PathVariable Long crewId
) {
return BaseResponse.success(
"COMPLETE 상태인 크루 멤버 조회에 성공했습니다.",
crewService.getCompleteMembers(principalDetails.member(), crewId)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import com.follow_me.running_mate.domain.course.dto.response.CourseResponse;
import com.follow_me.running_mate.domain.enums.ActivityTimeType;
import com.follow_me.running_mate.domain.enums.Ranking;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

public class CrewResponse {
@Getter
@AllArgsConstructor
Expand Down Expand Up @@ -48,6 +49,24 @@ public static class CrewApplyResponse{
private Long memberId;
private String status;
}
@Getter
@AllArgsConstructor
@NoArgsConstructor
public static class CrewApplyMemberListResponse{
private List<CrewApplyMemberInfo> crewApplyList;
}

@Getter
@Builder
@AllArgsConstructor
public static class CrewApplyMemberInfo {
private Long memberId;
private String profileImageUrl;
private String nickname;
private Ranking ranking;
private Long footPrint;
private String status;
}


@Getter
Expand Down Expand Up @@ -166,14 +185,15 @@ public static class CrewScheduleInfo {
private LocalDateTime endTime;
private Integer memberCount;
private Integer memberMax;
private String meetingPlace;
private CourseResponse.SummaryInfo crewCourse;
}

@Getter
@Builder
@AllArgsConstructor
public static class CrewScheduleMemberListResponse {
private List<CrewMemberInfo> CrewScheduleMembers;
public static class CrewMemberListResponse {
private List<CrewMemberInfo> CrewMembers;
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,12 @@

import com.follow_me.running_mate.domain.course.dto.response.CourseResponse;
import com.follow_me.running_mate.domain.crew.dto.response.CrewResponse;
import com.follow_me.running_mate.domain.crew.entity.Crew;
import com.follow_me.running_mate.domain.crew.entity.CrewActivityTime;
import com.follow_me.running_mate.domain.crew.entity.CrewImage;
import com.follow_me.running_mate.domain.crew.entity.CrewLocation;
import com.follow_me.running_mate.domain.crew.entity.CrewSchedule;
import com.follow_me.running_mate.domain.crew.entity.*;
import com.follow_me.running_mate.domain.member.entity.Member;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.stereotype.Component;

@Component
public class CrewResponseMapper {
Expand All @@ -29,6 +26,19 @@ public List<CrewResponse.MyCrewResponse> toCrewInfoResponse(List<Crew> CrewList
.toList();
}

public List<CrewResponse.CrewApplyMemberInfo> toCrewApplyMemberInfo(List<CrewMember> CrewMembers) {
return CrewMembers.stream()
.map(crewMember -> CrewResponse.CrewApplyMemberInfo.builder()
.memberId(crewMember.getMember().getId())
.nickname(crewMember.getMember().getNickname())
.profileImageUrl(crewMember.getMember().getProfileImageUrl())
.footPrint(crewMember.getMember().getFootprint())
.ranking(crewMember.getMember().getRanking())
.status(crewMember.getStatus().getToKorean())
.build())
.toList();
}

public CrewResponse.CrewDetailResponse toCrewDetailInfo(
Crew crew,
List<CrewActivityTime> crewActivityTimes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
import com.follow_me.running_mate.domain.enums.CrewMemberStatus;
import com.follow_me.running_mate.domain.member.entity.Member;
import io.lettuce.core.dynamic.annotation.Param;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface CrewMemberRepository extends JpaRepository<CrewMember, Long> {
@Query("SELECT cm.crew FROM CrewMember cm WHERE cm.member = :member AND cm.status = :status")
List<Crew> findCrewsByMemberAndStatus(@Param("member") Member member, @Param("status") CrewMemberStatus status);
Expand All @@ -26,4 +27,6 @@ public interface CrewMemberRepository extends JpaRepository<CrewMember, Long> {
boolean existsByCrewAndMemberAndStatus(Crew crew, Member member , CrewMemberStatus status);

List<CrewMember> findAllByCrew(Crew crew);

List<CrewMember> findAllByCrewAndStatus(Crew crew, CrewMemberStatus crewMemberStatus);
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ CrewResponse.recommendedCrewListResponse searchCrews(
void leaveCrew(Member member, Long crewId);
CrewResponse.DuplicateCheckResponse isNameDuplicate(String nickname);
CrewResponse.CrewUpdateResponse getUpdateCrewInfo(Member member, Long crewId);
CrewResponse.CrewApplyMemberListResponse getReadyApplicants(Member member, Long crewId);
CrewResponse.CrewMemberListResponse getCompleteMembers(Member member, Long crewId);

void softDeleteCrew(Member member);
}
Loading
Loading