diff --git a/backend/src/main/java/moadong/club/entity/Club.java b/backend/src/main/java/moadong/club/entity/Club.java index df0f6e146..60441a058 100644 --- a/backend/src/main/java/moadong/club/entity/Club.java +++ b/backend/src/main/java/moadong/club/entity/Club.java @@ -1,8 +1,5 @@ package moadong.club.entity; -import java.util.List; -import java.util.Map; - import com.google.firebase.messaging.FirebaseMessaging; import com.google.firebase.messaging.FirebaseMessagingException; import com.google.firebase.messaging.Message; @@ -22,6 +19,9 @@ import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; +import java.util.List; +import java.util.Map; + @Slf4j @Document("clubs") @AllArgsConstructor @@ -46,6 +46,9 @@ public class Club implements Persistable { @Field("recruitmentInformation") private ClubRecruitmentInformation clubRecruitmentInformation; + @Field("description") + private ClubDescription clubDescription; + @Version private Long version; public Club() { @@ -54,6 +57,7 @@ public Club() { this.division = ""; this.state = ClubState.UNAVAILABLE; this.clubRecruitmentInformation = ClubRecruitmentInformation.builder().build(); + this.clubDescription = ClubDescription.builder().build(); } public Club(String userId) { @@ -63,6 +67,7 @@ public Club(String userId) { this.state = ClubState.UNAVAILABLE; this.clubRecruitmentInformation = ClubRecruitmentInformation.builder().build(); this.userId = userId; + this.clubDescription = ClubDescription.builder().build(); } public Club(String id, String userId) { @@ -73,6 +78,7 @@ public Club(String id, String userId) { this.state = ClubState.UNAVAILABLE; this.clubRecruitmentInformation = ClubRecruitmentInformation.builder().build(); this.userId = userId; + this.clubDescription = ClubDescription.builder().build(); } @Builder @@ -82,6 +88,7 @@ public Club(String name, String category, String division, this.category = category; this.division = division; this.clubRecruitmentInformation = clubRecruitmentInformation; + this.clubDescription = ClubDescription.builder().build(); } public void update(ClubInfoRequest request) { @@ -94,6 +101,7 @@ public void update(ClubInfoRequest request) { this.state = ClubState.AVAILABLE; this.socialLinks = request.socialLinks(); this.clubRecruitmentInformation.update(request); + this.clubDescription = request.description().toEntity(); } private void validateTags(List tags) { diff --git a/backend/src/main/java/moadong/club/entity/ClubAward.java b/backend/src/main/java/moadong/club/entity/ClubAward.java new file mode 100644 index 000000000..99a8c2893 --- /dev/null +++ b/backend/src/main/java/moadong/club/entity/ClubAward.java @@ -0,0 +1,19 @@ +package moadong.club.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ClubAward { + + private String semester; + + private List achievements; +} diff --git a/backend/src/main/java/moadong/club/entity/ClubDescription.java b/backend/src/main/java/moadong/club/entity/ClubDescription.java new file mode 100644 index 000000000..caa22e009 --- /dev/null +++ b/backend/src/main/java/moadong/club/entity/ClubDescription.java @@ -0,0 +1,27 @@ +package moadong.club.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ClubDescription { + + private String introDescription; + + private String activityDescription; + + private List awards; + + private ClubIdealCandidate idealCandidate; + + private String benefits; + + private List faqs; +} diff --git a/backend/src/main/java/moadong/club/entity/ClubIdealCandidate.java b/backend/src/main/java/moadong/club/entity/ClubIdealCandidate.java new file mode 100644 index 000000000..ba3bfcdf5 --- /dev/null +++ b/backend/src/main/java/moadong/club/entity/ClubIdealCandidate.java @@ -0,0 +1,19 @@ +package moadong.club.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ClubIdealCandidate { + + private List tags; + + private String content; +} diff --git a/backend/src/main/java/moadong/club/entity/ClubRecruitmentInformation.java b/backend/src/main/java/moadong/club/entity/ClubRecruitmentInformation.java index 59eafb0ff..819df38e2 100644 --- a/backend/src/main/java/moadong/club/entity/ClubRecruitmentInformation.java +++ b/backend/src/main/java/moadong/club/entity/ClubRecruitmentInformation.java @@ -6,22 +6,21 @@ import jakarta.persistence.Id; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.List; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import lombok.Setter; import moadong.club.enums.ClubRecruitmentStatus; import moadong.club.payload.request.ClubInfoRequest; import moadong.club.payload.request.ClubRecruitmentInfoUpdateRequest; import moadong.global.RegexConstants; import org.checkerframework.common.aliasing.qual.Unique; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.List; + @AllArgsConstructor @Getter @Builder(toBuilder = true) @@ -41,9 +40,6 @@ public class ClubRecruitmentInformation { @Column(length = 30) private String introduction; - @Column(length = 20000) - private String description; - @Column(length = 5) private String presidentName; @@ -63,8 +59,6 @@ public class ClubRecruitmentInformation { private List tags; - private List faqs; - @Enumerated(EnumType.STRING) @NotNull private ClubRecruitmentStatus clubRecruitmentStatus; @@ -80,12 +74,10 @@ public void updateRecruitmentStatus(ClubRecruitmentStatus status) { } public void updateDescription(ClubRecruitmentInfoUpdateRequest request) { - this.description = request.description(); this.recruitmentStart = request.recruitmentStart(); this.recruitmentEnd = request.recruitmentEnd(); this.recruitmentTarget = request.recruitmentTarget(); this.externalApplicationUrl = request.externalApplicationUrl(); - this.faqs = request.faqs(); } public boolean hasRecruitmentPeriod() { diff --git a/backend/src/main/java/moadong/club/payload/dto/ClubAwardDto.java b/backend/src/main/java/moadong/club/payload/dto/ClubAwardDto.java new file mode 100644 index 000000000..ef793e595 --- /dev/null +++ b/backend/src/main/java/moadong/club/payload/dto/ClubAwardDto.java @@ -0,0 +1,25 @@ +package moadong.club.payload.dto; + +import jakarta.validation.constraints.Size; +import moadong.club.entity.ClubAward; + +import java.util.List; + +public record ClubAwardDto( + @Size(max = 50) + String semester, + + List<@Size(max = 100) String> achievements +) { + public static ClubAwardDto from(ClubAward clubAward) { + if (clubAward == null) return null; + return new ClubAwardDto(clubAward.getSemester(), clubAward.getAchievements()); + } + + public ClubAward toEntity() { + return ClubAward.builder() + .semester(semester) + .achievements(achievements) + .build(); + } +} diff --git a/backend/src/main/java/moadong/club/payload/dto/ClubDescriptionDto.java b/backend/src/main/java/moadong/club/payload/dto/ClubDescriptionDto.java new file mode 100644 index 000000000..9f1b836b3 --- /dev/null +++ b/backend/src/main/java/moadong/club/payload/dto/ClubDescriptionDto.java @@ -0,0 +1,50 @@ +package moadong.club.payload.dto; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.Size; +import moadong.club.entity.ClubDescription; + +import java.util.List; + +public record ClubDescriptionDto( + @Size(max = 500) + String introDescription, + + @Size(max = 1000) + String activityDescription, + + @Valid + List awards, + + @Valid + ClubIdealCandidateDto idealCandidate, + + @Size(max = 1000) + String benefits, + + @Valid + List faqs +) { + public static ClubDescriptionDto from(ClubDescription description) { + if (description == null) return null; + return new ClubDescriptionDto( + description.getIntroDescription(), + description.getActivityDescription(), + description.getAwards() == null ? null : description.getAwards().stream().map(ClubAwardDto::from).toList(), + ClubIdealCandidateDto.from(description.getIdealCandidate()), + description.getBenefits(), + description.getFaqs() == null ? null : description.getFaqs().stream().map(FaqDto::from).toList() + ); + } + + public ClubDescription toEntity() { + return ClubDescription.builder() + .introDescription(introDescription) + .activityDescription(activityDescription) + .awards(awards == null ? null : awards.stream().map(ClubAwardDto::toEntity).toList()) + .idealCandidate(idealCandidate == null ? null : idealCandidate.toEntity()) + .benefits(benefits) + .faqs(faqs == null ? null : faqs.stream().map(FaqDto::toEntity).toList()) + .build(); + } +} diff --git a/backend/src/main/java/moadong/club/payload/dto/ClubDetailedResult.java b/backend/src/main/java/moadong/club/payload/dto/ClubDetailedResult.java index 378dfbc46..e46c7e1cf 100644 --- a/backend/src/main/java/moadong/club/payload/dto/ClubDetailedResult.java +++ b/backend/src/main/java/moadong/club/payload/dto/ClubDetailedResult.java @@ -1,12 +1,12 @@ package moadong.club.payload.dto; -import java.time.format.DateTimeFormatter; -import java.util.List; -import java.util.Map; import lombok.Builder; import moadong.club.entity.Club; import moadong.club.entity.ClubRecruitmentInformation; -import moadong.club.entity.Faq; + +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; @Builder public record ClubDetailedResult( @@ -18,7 +18,7 @@ public record ClubDetailedResult( String state, List feeds, String introduction, - String description, + ClubDescriptionDto description, String presidentName, String presidentPhoneNumber, String recruitmentStart, @@ -29,12 +29,10 @@ public record ClubDetailedResult( Map socialLinks, String category, String division, - List faqs, - String lastModifiedDate, - List recommendClubs + String lastModifiedDate ) { - public static ClubDetailedResult of(Club club, List recommendClubs) { + public static ClubDetailedResult of(Club club) { ClubRecruitmentInformation clubRecruitmentInformation = club.getClubRecruitmentInformation(); String start = "미정"; @@ -66,8 +64,7 @@ public static ClubDetailedResult of(Club club, List recommendC .division(club.getDivision() == null ? "" : club.getDivision()) .introduction(clubRecruitmentInformation.getIntroduction() == null ? "" : clubRecruitmentInformation.getIntroduction()) - .description(clubRecruitmentInformation.getDescription() == null ? "" - : clubRecruitmentInformation.getDescription()) + .description(ClubDescriptionDto.from(club.getClubDescription())) .presidentName(clubRecruitmentInformation.getPresidentName() == null ? "" : clubRecruitmentInformation.getPresidentName()) .presidentPhoneNumber( @@ -83,10 +80,7 @@ public static ClubDetailedResult of(Club club, List recommendC club.getClubRecruitmentInformation().getExternalApplicationUrl()) .socialLinks(club.getSocialLinks() == null ? Map.of() : club.getSocialLinks()) - .faqs(club.getClubRecruitmentInformation().getFaqs() == null ? List.of() - : club.getClubRecruitmentInformation().getFaqs()) .lastModifiedDate(lastModifiedDate) - .recommendClubs(recommendClubs) .build(); } diff --git a/backend/src/main/java/moadong/club/payload/dto/ClubIdealCandidateDto.java b/backend/src/main/java/moadong/club/payload/dto/ClubIdealCandidateDto.java new file mode 100644 index 000000000..87e00d6ce --- /dev/null +++ b/backend/src/main/java/moadong/club/payload/dto/ClubIdealCandidateDto.java @@ -0,0 +1,25 @@ +package moadong.club.payload.dto; + +import jakarta.validation.constraints.Size; +import moadong.club.entity.ClubIdealCandidate; + +import java.util.List; + +public record ClubIdealCandidateDto( + List<@Size(max = 10) String> tags, + + @Size(max = 700) + String content +) { + public static ClubIdealCandidateDto from(ClubIdealCandidate candidate) { + if (candidate == null) return null; + return new ClubIdealCandidateDto(candidate.getTags(), candidate.getContent()); + } + + public ClubIdealCandidate toEntity() { + return ClubIdealCandidate.builder() + .tags(tags) + .content(content) + .build(); + } +} diff --git a/backend/src/main/java/moadong/club/payload/dto/FaqDto.java b/backend/src/main/java/moadong/club/payload/dto/FaqDto.java new file mode 100644 index 000000000..9bec92497 --- /dev/null +++ b/backend/src/main/java/moadong/club/payload/dto/FaqDto.java @@ -0,0 +1,21 @@ +package moadong.club.payload.dto; + +import jakarta.validation.constraints.Size; +import moadong.club.entity.Faq; + +public record FaqDto( + @Size(max = 100) + String question, + + @Size(max = 500) + String answer +) { + public static FaqDto from(Faq faq) { + if (faq == null) return null; + return new FaqDto(faq.getQuestion(), faq.getAnswer()); + } + + public Faq toEntity() { + return new Faq(question, answer); + } +} diff --git a/backend/src/main/java/moadong/club/payload/request/ClubInfoRequest.java b/backend/src/main/java/moadong/club/payload/request/ClubInfoRequest.java index 0f9c75790..24e481886 100644 --- a/backend/src/main/java/moadong/club/payload/request/ClubInfoRequest.java +++ b/backend/src/main/java/moadong/club/payload/request/ClubInfoRequest.java @@ -1,12 +1,14 @@ package moadong.club.payload.request; import jakarta.validation.constraints.NotBlank; -import java.util.List; -import java.util.Map; +import moadong.club.payload.dto.ClubDescriptionDto; import moadong.club.enums.ClubCategory; import moadong.club.enums.ClubDivision; import moadong.global.annotation.PhoneNumber; +import java.util.List; +import java.util.Map; + public record ClubInfoRequest( @NotBlank String name, @@ -15,6 +17,7 @@ public record ClubInfoRequest( List tags, String introduction, String presidentName, + ClubDescriptionDto description, @PhoneNumber String presidentPhoneNumber, Map socialLinks diff --git a/backend/src/main/java/moadong/club/payload/request/ClubRecruitmentInfoUpdateRequest.java b/backend/src/main/java/moadong/club/payload/request/ClubRecruitmentInfoUpdateRequest.java index 3c610ed0a..396d46dd1 100644 --- a/backend/src/main/java/moadong/club/payload/request/ClubRecruitmentInfoUpdateRequest.java +++ b/backend/src/main/java/moadong/club/payload/request/ClubRecruitmentInfoUpdateRequest.java @@ -1,17 +1,12 @@ package moadong.club.payload.request; import java.time.Instant; -import java.time.LocalDateTime; -import java.util.List; -import moadong.club.entity.Faq; public record ClubRecruitmentInfoUpdateRequest( Instant recruitmentStart, Instant recruitmentEnd, String recruitmentTarget, - String description, - String externalApplicationUrl, - List faqs + String externalApplicationUrl ) { } diff --git a/backend/src/main/java/moadong/club/repository/ClubSearchRepository.java b/backend/src/main/java/moadong/club/repository/ClubSearchRepository.java index 5a0728b1a..591c817c1 100644 --- a/backend/src/main/java/moadong/club/repository/ClubSearchRepository.java +++ b/backend/src/main/java/moadong/club/repository/ClubSearchRepository.java @@ -67,140 +67,6 @@ public List searchClubsByKeyword(String keyword, String recrui return results.getMappedResults(); } - public List searchRecommendClubs(String category, String excludeClubId) { - Set excludeIds = new HashSet<>(); - if (excludeClubId != null) { - excludeIds.add(excludeClubId); - } - - List result = new ArrayList<>(); - - // 1. 같은 카테고리 모집중 + (모집마감 포함) 동아리 최대 4개 추출 (모집상태 우선) - int maxCategoryCount = 4; - List categoryClubs = findClubsByCategoryAndState(category, excludeIds, true, maxCategoryCount); - addClubs(result, excludeIds, categoryClubs); - - int remainCount = maxCategoryCount - categoryClubs.size(); - - // 2. 부족하면 마감 동아리로 채우기 - if (remainCount > 0) { - List categoryClosedClubs = findClubsByCategoryAndState(category, excludeIds, false, remainCount); - addClubs(result, excludeIds, categoryClosedClubs); - } - - // 3. 나머지 전체 랜덤 2개(모집상태 우선)로 채우기 - int totalNeeded = 6; - int randomNeeded = totalNeeded - result.size(); - - if (randomNeeded > 0) { - List randomPool = findRandomClubs(excludeIds, 10); - - List selectedRandomClubs = selectClubsByStatePriority(randomPool, randomNeeded); - addClubs(result, excludeIds, selectedRandomClubs); - } - - return result.isEmpty() ? Collections.emptyList() : result; - } - - // 같은 카테고리 & 주어진 모집 상태별 랜덤 n개 동아리 조회 - private List findClubsByCategoryAndState(String category, Set excludeIds, - boolean onlyRecruitAvailable, int limit) { - List ops = new ArrayList<>(); - - Criteria criteria = Criteria.where("category").is(category) - .and("_id").nin(excludeIds); - - if (onlyRecruitAvailable) { - criteria = criteria.and("recruitmentInformation.clubRecruitmentStatus") - .in( - ClubRecruitmentStatus.ALWAYS.toString(), - ClubRecruitmentStatus.OPEN.toString() - ); - } - - ops.add(Aggregation.match(criteria)); - ops.add(Aggregation.sample((long) limit)); - - // searchClubsByKeyword 와 동일한 project 단계 적용 - ops.add( - Aggregation.project("name", "state", "category", "division") - .and("recruitmentInformation.introduction").as("introduction") - .and("recruitmentInformation.clubRecruitmentStatus").as("recruitmentStatus") - .and(ConditionalOperators.ifNull("$recruitmentInformation.logo").then("")) - .as("logo") - .and(ConditionalOperators.ifNull("$recruitmentInformation.tags").then(Collections.emptyList())) - .as("tags") - ); - - return mongoTemplate.aggregate(Aggregation.newAggregation(ops), "clubs", ClubSearchResult.class) - .getMappedResults(); - } - - // 중복 ID 추적하며 클럽 리스트에 추가 - private void addClubs(List result, Set excludeIds, List clubs) { - for (ClubSearchResult club : clubs) { - if (!excludeIds.contains(club.id())) { - result.add(club); - excludeIds.add(club.id()); - } - } - } - - // 전체 랜덤 풀에서 모집중 우선으로 n개, 부족하면 마감 동아리로 채움 - private boolean isRecruiting(ClubSearchResult club) { - String status = club.recruitmentStatus(); - return ClubRecruitmentStatus.ALWAYS.toString().equals(status) || ClubRecruitmentStatus.OPEN.toString().equals(status); - } - - private List selectClubsByStatePriority(List pool, int maxCount) { - List selected = new ArrayList<>(); - Set ids = new HashSet<>(); - - // 모집중 우선 선택 - for (ClubSearchResult club : pool) { - if (selected.size() >= maxCount) break; - if (isRecruiting(club) && !ids.contains(club.id())) { - selected.add(club); - ids.add(club.id()); - } - } - - // 부족하면 모집 마감 동아리 추가 - if (selected.size() < maxCount) { - for (ClubSearchResult club : pool) { - if (selected.size() >= maxCount) break; - if (!isRecruiting(club) && !ids.contains(club.id())) { - selected.add(club); - ids.add(club.id()); - } - } - } - - return selected; - } - - // 전체 클럽에서 랜덤 n개 뽑기 (중복 제거용 excludeIds는 외부에서 처리) - private List findRandomClubs(Set excludeIds, int sampleSize) { - List ops = new ArrayList<>(); - ops.add(Aggregation.match(Criteria.where("_id").nin(excludeIds))); - ops.add(Aggregation.sample((long) sampleSize)); - - ops.add( - Aggregation.project("name", "state", "category", "division") - .and("recruitmentInformation.introduction").as("introduction") - .and("recruitmentInformation.clubRecruitmentStatus").as("recruitmentStatus") - .and(ConditionalOperators.ifNull("$recruitmentInformation.logo").then("")) - .as("logo") - .and(ConditionalOperators.ifNull("$recruitmentInformation.tags").then(Collections.emptyList())) - .as("tags") - ); - - return mongoTemplate.aggregate(Aggregation.newAggregation(ops), "clubs", ClubSearchResult.class) - .getMappedResults(); - } - - - private Criteria getMatchedCriteria(String recruitmentStatus, String division, String category) { List criteriaList = new ArrayList<>(); diff --git a/backend/src/main/java/moadong/club/service/ClubProfileService.java b/backend/src/main/java/moadong/club/service/ClubProfileService.java index 4f8c6c6ca..5116ecba9 100644 --- a/backend/src/main/java/moadong/club/service/ClubProfileService.java +++ b/backend/src/main/java/moadong/club/service/ClubProfileService.java @@ -1,11 +1,8 @@ package moadong.club.service; -import java.time.LocalDateTime; -import java.util.List; import lombok.AllArgsConstructor; import moadong.club.entity.Club; import moadong.club.payload.dto.ClubDetailedResult; -import moadong.club.payload.dto.ClubSearchResult; import moadong.club.payload.request.ClubInfoRequest; import moadong.club.payload.request.ClubRecruitmentInfoUpdateRequest; import moadong.club.payload.response.ClubDetailedResponse; @@ -36,9 +33,9 @@ public void updateClubInfo(ClubInfoRequest request, CustomUserDetails user) { } public void updateClubRecruitmentInfo(ClubRecruitmentInfoUpdateRequest request, - CustomUserDetails user) { + CustomUserDetails user) { Club club = clubRepository.findClubByUserId(user.getId()) - .orElseThrow(() -> new RestApiException(ErrorCode.CLUB_NOT_FOUND)); + .orElseThrow(() -> new RestApiException(ErrorCode.CLUB_NOT_FOUND)); club.update(request); RecruitmentStateCalculator.calculate( club, @@ -54,10 +51,8 @@ public ClubDetailedResponse getClubDetail(String clubId) { Club club = clubRepository.findClubById(objectId) .orElseThrow(() -> new RestApiException(ErrorCode.CLUB_NOT_FOUND)); - List clubSearchResults = clubSearchRepository.searchRecommendClubs(club.getCategory(), clubId); - ClubDetailedResult clubDetailedResult = ClubDetailedResult.of( - club,clubSearchResults + club ); return new ClubDetailedResponse(clubDetailedResult); } diff --git a/backend/src/test/java/moadong/fixture/ClubFixture.java b/backend/src/test/java/moadong/fixture/ClubFixture.java index d071b24fd..0049a3bba 100644 --- a/backend/src/test/java/moadong/fixture/ClubFixture.java +++ b/backend/src/test/java/moadong/fixture/ClubFixture.java @@ -23,7 +23,6 @@ public static ClubRecruitmentInformation createRecruitmentInfo( String id, String logo, String introduction, - String description, String presidentName, String presidentTelephoneNumber, LocalDateTime recruitmentStart, @@ -34,7 +33,6 @@ public static ClubRecruitmentInformation createRecruitmentInfo( when(clubRecruitmentInfo.getId()).thenReturn(id); when(clubRecruitmentInfo.getLogo()).thenReturn(logo); when(clubRecruitmentInfo.getIntroduction()).thenReturn(introduction); - when(clubRecruitmentInfo.getDescription()).thenReturn(description); when(clubRecruitmentInfo.getPresidentName()).thenReturn(presidentName); when(clubRecruitmentInfo.getPresidentTelephoneNumber()).thenReturn(presidentTelephoneNumber); when(clubRecruitmentInfo.getRecruitmentStart()).thenReturn(ZonedDateTime.from(recruitmentStart)); diff --git a/backend/src/test/java/moadong/fixture/ClubRequestFixture.java b/backend/src/test/java/moadong/fixture/ClubRequestFixture.java index 7d830f384..2761d8866 100644 --- a/backend/src/test/java/moadong/fixture/ClubRequestFixture.java +++ b/backend/src/test/java/moadong/fixture/ClubRequestFixture.java @@ -1,12 +1,13 @@ package moadong.fixture; +import moadong.club.entity.ClubDescription; import moadong.club.enums.ClubCategory; import moadong.club.enums.ClubDivision; +import moadong.club.payload.dto.ClubDescriptionDto; import moadong.club.payload.request.ClubInfoRequest; import moadong.club.payload.request.ClubRecruitmentInfoUpdateRequest; import java.time.Instant; -import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ public static ClubInfoRequest createValidClubInfoRequest() { List.of("개발", "스터디"), "동아리 소개입니다.", "홍길동", + ClubDescriptionDto.from(ClubDescription.builder().build()), "010-1234-5678", Map.of("insta", "https://test") ); @@ -31,9 +33,7 @@ public static ClubRecruitmentInfoUpdateRequest defaultRequest() { Instant.now(), Instant.now().plus(7, ChronoUnit.DAYS), "테스트 대상", - "테스트 설명", - "https://fake-url.com", - List.of() + "https://fake-url.com" ); } //ToDo: 시간 계산법을 LocalDateTime에서 Instant로 변경 후에 활성화할 것