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 @@ -67,17 +67,17 @@ public void init() {

SaveUserRequest saveUserRequest1 = SaveUserRequest.of(
email1, passwordEncoder.encode("password1"),
"tester01", "tester01", "01012345678"
"테스트 유저 1", "테스트 유저 1", "01012345678"
);

SaveUserRequest saveUserRequest2 = SaveUserRequest.of(
email2, passwordEncoder.encode("password2"),
"tester02", "tester02", "01056781234"
"테스트 유저 2", "테스트 유저 2", "01056781234"
);

SaveUserRequest saveUserRequest3 = SaveUserRequest.of(
email3, passwordEncoder.encode("test"),
"tester", "tester", "01011112111"
"테스트", "테스터", "01011112111"
);

/// 테스트 유저 생성
Expand Down Expand Up @@ -107,22 +107,39 @@ public void init() {
.orElseThrow(() -> new IllegalArgumentException("해당 유저가 없습니다."));

/// 테스트 그룹 생성
GroupCreateRequest groupCreateRequest1 = GroupCreateRequest.of(users1.getUserId(), "testGroup1",
GroupCreateRequest groupCreateRequest1 = GroupCreateRequest.of(users1.getUserId(), "테스트그룹1",
CategoryStatus.STUDY, 2, 3, 0L, null, "test1", 3, 4);

GroupCreateRequest groupCreateRequest2 = GroupCreateRequest.of(users1.getUserId(), "testGroup2",
GroupCreateRequest groupCreateRequest2 = GroupCreateRequest.of(users1.getUserId(), "테스트그룹2",
CategoryStatus.FITNESS, 2, 3, 0L, null, "test2", 3, 4);

GroupCreateRequest groupCreateRequest3 = GroupCreateRequest.of(users1.getUserId(), "testGroup3",
GroupCreateRequest groupCreateRequest3 = GroupCreateRequest.of(users1.getUserId(), "테스트그룹3",
CategoryStatus.RUNNING, 2, 3, 0L, null, "test3", 3, 4);

GroupCreateRequest groupCreateRequest4 = GroupCreateRequest.of(users1.getUserId(), "테스트그룹4",
CategoryStatus.RUNNING, 2, 3, 0L, null, "test4", 3, 4);

GroupCreateRequest groupCreateRequest5 = GroupCreateRequest.of(users1.getUserId(), "테스트그룹5",
CategoryStatus.RUNNING, 2, 3, 0L, null, "test3", 3, 4);

Group group1 = Group.of(groupCreateRequest1);
Group group2 = Group.of(groupCreateRequest2);
Group group3 = Group.of(groupCreateRequest3);
Group group4 = Group.of(groupCreateRequest4);
Group group5 = Group.of(groupCreateRequest5);

group1.addPoint(300L);
group2.addPoint(200L);
group3.addPoint(100L);
group4.addPoint(50L);
group5.addPoint(10L);

groupRepository.save(group1);
groupRepository.save(group2);
groupRepository.save(group3);
groupRepository.save(group4);
groupRepository.save(group5);


group3.updateWeeklyGoalAchieveMap(DayOfWeek.MONDAY, 2);
group3.updateWeeklyGoalAchieveMap(DayOfWeek.TUESDAY, 4);
Expand All @@ -139,9 +156,11 @@ public void init() {
RelationBetweenUserAndGroup join2 = RelationBetweenUserAndGroup.of(users2, group2, groupCreateRequest2);
RelationBetweenUserAndGroup join3 = RelationBetweenUserAndGroup.of(users3, group3, groupCreateRequest3);

RelationBetweenUserAndGroup join4 = RelationBetweenUserAndGroup.of(users3, group1, 3, 4);
relationRepository.save(join1);
relationRepository.save(join2);
relationRepository.save(join3);
relationRepository.save(join4);

for (int i = 4; i <= 12; i++) {
Users member = userRepository.findByUserId((long) i)
Expand All @@ -152,14 +171,14 @@ public void init() {

log.info("======== 👥 테스트 관계 데이터 생성 완료 =========");

CreateRecruitmentRequest createRecruitmentRequest = CreateRecruitmentRequest.of(group1.getId(), "testRecruitment", "testContent");
CreateRecruitmentRequest createRecruitmentRequest = CreateRecruitmentRequest.of("그룹 1 모집글", "테스트");
Recruitment recruitment = Recruitment.of(users1, group1, createRecruitmentRequest);
recruitmentRepository.save(recruitment);

log.info("======== 🔖테스트 모집글 생성 완료 =========");

/// 테스트 댓글 생성
Comment comment = Comment.of(recruitment, users1, "testComment");
Comment comment = Comment.of(recruitment, users1, "테스트 댓글");
commentRepository.save(comment);

log.info("======== 💬테스트 댓글 생성 완료 =========");
Expand All @@ -170,7 +189,7 @@ public void init() {
LocalDateTime startOfWeek = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));

// User ID: 4 -> currentProgress: 5
createActivityRecords(userRepository.findByUserId(4L)
createActivityRecords(userRepository.findByUserId(3L)
.orElseThrow(() -> new IllegalArgumentException("해당 유저가 없습니다.")),
group3, startOfWeek, 5, CategoryStatus.RUNNING, chestList);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
package MathCaptain.weakness.domain.Group.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum CategoryStatus {
FITNESS,
STUDY,
RUNNING
FITNESS("헬스"),
STUDY("공부"),
RUNNING("러닝");

private final String value;

CategoryStatus(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}

@JsonCreator
public static CategoryStatus fromValue(String value) {
for (CategoryStatus status : CategoryStatus.values()) {
if (status.value.equals(value) || status.name().equals(value)) {
return status;
}
}
throw new IllegalArgumentException("정의되지 않은 값 입니다 : " + value);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
package MathCaptain.weakness.domain.Group.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum GroupRole {
LEADER,
MEMBER
LEADER("그룹장"),
MEMBER("멤버");

private final String value;

GroupRole(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}

@JsonCreator
public static GroupRole fromValue(String value) {
for (GroupRole role : GroupRole.values()) {
if (role.value.equals(value) || role.name().equals(value)) {
return role;
}
}
throw new IllegalArgumentException("정의되지 않은 값 입니다 : " + value);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,32 @@
package MathCaptain.weakness.domain.Group.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum RequestStatus {
WAITING,
ACCEPTED,
REJECTED,
CANCELED
WAITING("가입요청 중"),
ACCEPTED("가입요청 수락"),
REJECTED("가입요청 거절"),
CANCELED("가입요청 취소");

private final String value;

RequestStatus(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}

@JsonCreator
public static RequestStatus fromValue(String value) {
for (RequestStatus status : RequestStatus.values()) {
if (status.value.equals(value) || status.name().equals(value)) {
return status;
}
}
throw new IllegalArgumentException("정의되지 않은 값 입니다 : " + value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class FitnessDetail {
@ElementCollection
@CollectionTable(
name = "fitnessdetail_exerciseinfolist",
joinColumns = @JoinColumn(name = "fitness detail_id")
joinColumns = @JoinColumn(name = "fitness_detail_id")
)
private List<ExerciseInfo> exerciseInfoList;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public RecordSummaryResponse endActivity(Users user, Long groupId, ActivityLogEn

ActivityRecord record = ActivityRecord.of(relation, logRequest);
updateGoalAchieve(relation, record);
recordRepository.save(record);
recordRepository.save(record);

// 활동 로그 저장 및 응답 생성
return createRecordSummaryResponse(activityType, logRequest, record, relation);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,11 @@ public ApiResponse<List<RecruitmentResponse>> recruitmentList() {
return recruitmentService.getAllRecruitments();
}

// 모집글 작성 요청
@GetMapping("/create")
public ApiResponse<RecruitmentCreateResponse> createRecruitmentPage(@LoginUser Users loginUser) {
return recruitmentService.createRequest(loginUser);
}

// 모집글 생성
@PostMapping("/create")
public ApiResponse<Long> createRecruitment(@Valid @LoginUser Users loginUser,
@RequestBody CreateRecruitmentRequest createRecruitmentRequest) {
public ApiResponse<RecruitmentDetailResponse> createRecruitment(
@Valid @LoginUser Users loginUser,
@RequestBody CreateRecruitmentRequest createRecruitmentRequest) {
return recruitmentService.createRecruitment(loginUser, createRecruitmentRequest);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class CreateRecruitmentRequest {

@NotNull(message = "그룹을 입력해주세요!")
@NotEmpty(message = "그룹을 입력해주세요!")
private Long recruitGroupId;

@NotNull(message = "제목을 입력해주세요!")
@NotEmpty(message = "제목을 입력해주세요!")
@Size(max = 30, message = "제목은 30자 이내로 작성해주세요!")
Expand All @@ -22,13 +18,12 @@ public class CreateRecruitmentRequest {
@NotEmpty(message = "내용을 입력해주세요!")
private String content;

private CreateRecruitmentRequest(Long recruitGroupId, String title, String content) {
this.recruitGroupId = recruitGroupId;
private CreateRecruitmentRequest(String title, String content) {
this.title = title;
this.content = content;
}

public static CreateRecruitmentRequest of(Long recruitGroupId, String title, String content) {
return new CreateRecruitmentRequest(recruitGroupId, title, content);
public static CreateRecruitmentRequest of(String title, String content) {
return new CreateRecruitmentRequest(title, content);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class RecruitmentDetailResponse {

private Long authorId;

private Long recruitGroupId;

private String authorName;

private String recruitGroupName;
Expand All @@ -31,9 +35,11 @@ public class RecruitmentDetailResponse {
private List<CommentResponse> comments;

@Builder
private RecruitmentDetailResponse(String authorName, String recruitGroupName, String title,
private RecruitmentDetailResponse(Long authorId, Long recruitGroupId, String authorName, String recruitGroupName, String title,
CategoryStatus category, String content, RecruitmentStatus recruitmentStatus,
LocalDateTime createdAt, LocalDateTime updatedAt, List<CommentResponse> comments) {
this.authorId = authorId;
this.recruitGroupId = recruitGroupId;
this.authorName = authorName;
this.recruitGroupName = recruitGroupName;
this.title = title;
Expand All @@ -47,6 +53,8 @@ private RecruitmentDetailResponse(String authorName, String recruitGroupName, St

public static RecruitmentDetailResponse of(Recruitment recruitment, List<CommentResponse> comments) {
return RecruitmentDetailResponse.builder()
.authorId(recruitment.getAuthor().getUserId())
.recruitGroupId(recruitment.getRecruitGroup().getId())
.authorName(recruitment.getAuthor().getName())
.recruitGroupName(recruitment.getRecruitGroup().getName())
.title(recruitment.getTitle())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
package MathCaptain.weakness.domain.Recruitment.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum RecruitmentStatus {
// 모집중, 모집종료
RECRUITING,
END
RECRUITING("모집중"),
END("모집종료");

private final String value;

RecruitmentStatus(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}

@JsonCreator
public static RecruitmentStatus fromValue(String value) {
for (RecruitmentStatus status : RecruitmentStatus.values()) {
if (status.value.equals(value) || status.name().equals(value)) {
return status;
}
}
throw new IllegalArgumentException("정의되지 않은 값 입니다 : " + value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.springframework.transaction.annotation.Transactional;

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

@Service
@Slf4j
Expand All @@ -32,20 +33,17 @@ public class RecruitmentService {
private final CommentService commentService;

/// 모집 CRUD
// 모집글 작성 요청 (그룹 정보 반환)
public ApiResponse<RecruitmentCreateResponse> createRequest(Users user) {
RelationBetweenUserAndGroup relation = findLeaderRelationBy(user);
return ApiResponse.ok(RecruitmentCreateResponse.of(relation));
}

// 모집글 생성
public ApiResponse<Long>createRecruitment(Users author, CreateRecruitmentRequest createRecruitmentRequest) {
Group group = getGroupBy(createRecruitmentRequest);
public ApiResponse<RecruitmentDetailResponse>createRecruitment(Users author, CreateRecruitmentRequest createRecruitmentRequest) {
Group group = findLeaderGroupByUser(author);
Recruitment recruitment = Recruitment.of(author, group, createRecruitmentRequest);
Long recruitmentId = recruitmentRepository.save(recruitment).getPostId();
return ApiResponse.ok(recruitmentId);
recruitmentRepository.save(recruitment);
RecruitmentDetailResponse recruitmentResponse = RecruitmentDetailResponse.of(recruitment, List.of());
return ApiResponse.ok(recruitmentResponse);
}


// 모집글 조회
public ApiResponse<RecruitmentDetailResponse> getRecruitment(Long recruitmentId) {
Recruitment recruitment = findRecruitmentBy(recruitmentId);
Expand Down Expand Up @@ -74,11 +72,6 @@ public ApiResponse<List<RecruitmentResponse>> getAllRecruitments() {
.toList());
}

private Group getGroupBy(CreateRecruitmentRequest createRecruitmentRequest) {
return groupRepository.findById(createRecruitmentRequest.getRecruitGroupId()).
orElseThrow(() -> new ResourceNotFoundException("해당 그룹이 없습니다."));
}

private RelationBetweenUserAndGroup findLeaderRelationBy(Users user) {
return relationRepository.findByMemberAndGroupRole(user, GroupRole.LEADER)
.orElseThrow(() -> new IllegalArgumentException("그룹장만 모집글을 작성할 수 있습니다."));
Expand All @@ -89,4 +82,9 @@ private Recruitment findRecruitmentBy(Long recruitmentId) {
orElseThrow(() -> new ResourceNotFoundException("해당 모집글이 없습니다."));
}

private Group findLeaderGroupByUser(Users author) {
RelationBetweenUserAndGroup relation = relationRepository.findByMemberAndGroupRole(author, GroupRole.LEADER)
.orElseThrow(() -> new ResourceNotFoundException("그룹장으로 가입된 그룹이 없습니다."));
return relation.getGroup();
}
}