Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
d36bd65
feat: Url 업로드
yw6938 Nov 8, 2025
c6c3bb1
feat: 기존 테스트 삭제
yw6938 Nov 8, 2025
66dcafd
feat: 클럽별 파일 경로 검증 강화
yw6938 Nov 8, 2025
32792aa
feat: 중복 업로드 수정
yw6938 Nov 12, 2025
9ce05c6
feat: 중복 업로드 수정
yw6938 Nov 12, 2025
33cb954
feat: 불필요한 과정 제거
yw6938 Nov 12, 2025
750243d
feat: description 정리
yw6938 Nov 17, 2025
3fd9915
refactor: 파일명을 난수로 저장
yw6938 Nov 17, 2025
84c6602
refactor: 만료시간을 expirationTime로 변경
yw6938 Nov 17, 2025
dab01a9
feat: applicationForm delete 구현
alsdddk Nov 19, 2025
64d2233
chore: 트랜잭션 어노테이션 spring 버전으로 변경
alsdddk Nov 19, 2025
f241662
refactor: feedurl생성 리스트로 변경
yw6938 Nov 19, 2025
0ec2ff4
refactor: dto 검증 어노테이션 추가
yw6938 Nov 19, 2025
8759bf2
refactor: null일때 예외 추가
yw6938 Nov 19, 2025
d1bc8fe
Merge pull request #808 from Moadong/refactor/#779-club-photo-multi-u…
yw6938 Nov 19, 2025
f91fde0
feat: ApplicationForm Mode 추가
lepitaaar Nov 19, 2025
905aaf3
feat: 요청 객체에 지원서 양식 폼 mode 추가
lepitaaar Nov 19, 2025
6e8bd75
feat: ApplicationFormMode CU api 수정
lepitaaar Nov 19, 2025
451d3d1
feat: 지원서 양식에 url 추가
lepitaaar Nov 19, 2025
4e884e3
feat: 지원서 필드 누락 오류코드 추가
lepitaaar Nov 19, 2025
abf02c8
feat: 질문과 외부지원서링크 둘중하나 존재하는지 체크
lepitaaar Nov 19, 2025
ea0be2b
feat: 허락하는 외부 지원서 링크만 업데이트 가능
lepitaaar Nov 19, 2025
20f0aa9
feat: 외부 지원서 부분업데이트 api추가
lepitaaar Nov 19, 2025
ddf6b32
feat: 외부 지원서 모드인 지원서를 제출시 Not Found 에러
lepitaaar Nov 19, 2025
c0c5fc6
Merge pull request #854 from Moadong/feature/#852-applicationForm-del…
alsdddk Nov 20, 2025
94f2a2f
refactor: 시작날짜에 상시모집 처리한다
alsdddk Nov 20, 2025
bf35045
fix: 시작일 경계조건 수정
alsdddk Nov 21, 2025
0530ffb
feat: 외부지원서 링크 응답 추가
lepitaaar Nov 22, 2025
2d9c08e
chore: 코드 포맷팅
lepitaaar Nov 22, 2025
e05ce4b
fix: 현재 지원서 양식의 모드가 존재하지않을시 기본 내부지원서 응답하게 getter 수정
lepitaaar Nov 22, 2025
813d87d
refactor: formMode 추가 및 mode에 상관없이 questions와 externalApplicationUrl …
lepitaaar Nov 22, 2025
56e3f2e
refactor: formMode에 따라 검증 옵션 추가
lepitaaar Nov 22, 2025
7019556
fix: 중복된 지원서 응답 목록이 존재시 에러 반환
lepitaaar Nov 22, 2025
3346f99
Merge pull request #873 from Moadong/refactor/#855-always-recruit-sta…
alsdddk Nov 22, 2025
9c1c1ab
feat: 외부지원서 trim
lepitaaar Nov 22, 2025
042940a
fix: 형식에맞게 테스트코드 변경
lepitaaar Nov 22, 2025
6a764cf
fix: X-Accel-Buffering을 추가하여 nginx의 버퍼링을 제어해 sse 이벤트 연결 수립을 한번에 하도록 변…
lepitaaar Nov 26, 2025
98d30f3
Merge pull request #895 from Moadong/fix/bypass-proxy-buffering
lepitaaar Nov 26, 2025
6a256aa
feature: 모집정보 수정 시 업데이트 날짜 추가
yw6938 Nov 26, 2025
373ffeb
test: 업데이트 날짜 구현 확인
yw6938 Nov 26, 2025
8bec173
fix: @Getter 중복 삭제
yw6938 Nov 26, 2025
47de23d
fix: 테스트 코드 수정
yw6938 Nov 26, 2025
a92091b
Merge pull request #882 from Moadong/feature/#864-add-external-url-ap…
lepitaaar Nov 27, 2025
a6be538
fix: 날짜 업데이트 로직 수정
yw6938 Nov 30, 2025
8898972
fix: test 수정
yw6938 Nov 30, 2025
7473305
test: 갯수 test 추가
yw6938 Dec 3, 2025
11cd9c6
test: deleteFile 테스트 추가
yw6938 Dec 3, 2025
ef032a2
Merge pull request #898 from Moadong/feature/#893-show-last-updated-o…
lepitaaar Dec 7, 2025
79d50ba
Merge pull request #910 from Moadong/test/#909-club-photos-multi-uplo…
lepitaaar Dec 7, 2025
97a7e69
refactor: instant로 변경
alsdddk Dec 6, 2025
87fb0d4
refactor: 모집기간을 start/end로 분리
alsdddk Dec 10, 2025
7cdd077
refactor: 테스트에도 Instant적용
alsdddk Dec 12, 2025
1cf8768
test: 테스트격리를 위해 데이터 정리 로직 추가(중복 토큰 방지)
alsdddk Dec 12, 2025
806f92d
test: 테스트격리를 위해 데이터 정리 로직 추가(중복 토큰 방지)
alsdddk Dec 12, 2025
138f53e
fix: 특수문자 검색 오류 해결
alsdddk Dec 13, 2025
5a0157f
refactor: 특수문자 제거 코드 삭제 후 정규식 처리로 변경
alsdddk Dec 19, 2025
a3271ca
test: 검색 레포 keyword 호출 인자 변경
alsdddk Dec 19, 2025
4a59937
Merge pull request #922 from Moadong/refactor/#912-db-utc-MOA-406
alsdddk Dec 21, 2025
9e7d2ac
Merge branch 'develop/be' into fix/#925-search-special-char-MOA-419
alsdddk Dec 21, 2025
1c6efa9
Merge pull request #928 from Moadong/fix/#925-search-special-char-MOA…
alsdddk Dec 21, 2025
9a4ec5d
refactor: 검색 범위에서 소개글, 상세 삭제 및 분과태그 추가
alsdddk Dec 13, 2025
5c182ca
Merge pull request #930 from Moadong/refactor/#929-search-range-MOA-422
alsdddk Dec 21, 2025
f91d085
refactor: 추천 동아리 응답 삭제
lepitaaar Dec 23, 2025
13c2822
refactor: 추천 동아리 응답 삭제
lepitaaar Dec 23, 2025
b166e76
refactor: faq, description 필드 수정 위치 변경
lepitaaar Dec 23, 2025
400bece
refactor: faq, description 업데이트 필드 추가
lepitaaar Dec 23, 2025
d026c77
feature: 기존 description 문자 형에서 객체로 변경
lepitaaar Dec 23, 2025
129e1c9
refactor: faqs 필드 위치 ClubDescription 안으로 이동
lepitaaar Dec 23, 2025
8ee92df
refactor: faqs 필드 변경에 따른 컴파일 오류 수정
lepitaaar Dec 23, 2025
6037308
fix: ClubDescription NPE 에러
lepitaaar Dec 23, 2025
8f43ad0
fix: ClubDescription NPE 에러 수정
lepitaaar Dec 23, 2025
052430c
refactor: clubDescription dto 추가 및 길이 제한 추가
lepitaaar Dec 23, 2025
df505cb
refactor: clubDescription dto와 엔티티간 의존성을 분리하였습니다
lepitaaar Dec 23, 2025
a9b2716
refactor: faqs 위치 description에 통합
lepitaaar Dec 23, 2025
61872ed
Merge pull request #963 from Moadong/feature/#962-addclubdescriptiond…
lepitaaar Dec 23, 2025
c79d372
Merge pull request #961 from Moadong/refactor/#960-recruitment-api-up…
lepitaaar Dec 23, 2025
eff6ec8
refactor: 허용되는 외부 지원주소를 불변 객체로 변경
lepitaaar Dec 23, 2025
fd9b168
fix: 동아리 이미지관련 api 사용자 사용 권한 미인증 버그 수정
lepitaaar Dec 23, 2025
283739d
test: 테스트코드 수정
lepitaaar Dec 23, 2025
616dcbb
refactor: recruitmentStatus 필드 응답 값 통일
lepitaaar Dec 23, 2025
91fbc3d
feature: refresh토큰 다중 발급 가능
yw6938 Dec 24, 2025
32ee4ac
refactor: 검증 순서 변경
yw6938 Dec 24, 2025
bfa1fc3
Merge pull request #973 from Moadong/feature/#911-admin-multi-refresh…
lepitaaar Dec 26, 2025
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
1 change: 1 addition & 0 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ dependencies {
// S3
implementation 'software.amazon.awssdk:s3:2.26.0'
implementation 'software.amazon.awssdk:auth:2.26.0'
implementation 'software.amazon.awssdk:url-connection-client:2.26.0'
Comment on lines 54 to +57
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

AWS SDK for Java v2 latest stable version 2024 2025

💡 Result:

The latest stable AWS SDK for Java v2 is 2.40.13 (released Dec 20, 2025). (mvnrepository.com)

Citations:


🌐 Web query:

AWS SDK for Java v2 2.26.0 security advisory vulnerabilities

💡 Result:

Short answer — AWS SDK for Java v2 2.26.0 itself has no separate AWS security advisory page, but several known CVEs are reported for that v2.26.0 release (mostly coming from bundled/dependent libraries). The main items flagged by public dependency trackers and the aws-sdk-java-v2 repo are:

  • Netty-related TLS/SSLEngine vulnerability (reported as CVE-2025-24970 affecting netty-handler used by netty-nio-client). [1]
  • Various dependency CVEs surfaced by Maven/registry listings for 2.26.0 modules (examples shown include CVE-2024-47554 and CVE-2025-48924 listed on mvnrepository pages for 2.26.0 artifacts). [2][3][4]

Recommendation: upgrade to a current patched AWS SDK for Java v2 release (or at minimum update the specific client/dependency versions that include fixes for the above CVEs). See the aws-sdk-java-v2 GitHub issue tracker for ongoing security issues and the module release pages for exact CVE lists per artifact. [1][2][3]

Sources:
[1] aws/aws-sdk-java-v2 GitHub — "Security vuln in aws sdk, via third-party (netty-nio-client) CVE-2025-24970". (github.com)
[2] Maven / software.amazon.awssdk:auth:2.26.0 (vulnerability list). (mvnrepository.com)
[3] Maven / software.amazon.awssdk:utils:2.26.0 (vulnerability list). (mvnrepository.com)
[4] Maven / software.amazon.awssdk:sts:2.26.0 (vulnerability list). (mvnrepository.com)

If you want, I can (a) fetch the latest patched v2 release that fixes these specific CVEs and give upgrade instructions, or (b) produce a per-artifact CVE list for your project's dependencies. Which would you prefer?

Citations:


AWS SDK 버전을 2.40.13 이상으로 업그레이드하세요.

현재 사용 중인 버전 2.26.0에는 보안 취약점이 있습니다. CVE-2025-24970(Netty TLS/SSLEngine 취약점)을 포함한 여러 CVE가 보고되었으며, 최신 안정 버전은 2.40.13(2025년 12월 20일 출시)입니다. 일관된 버전 관리는 좋으나, 보안 업그레이드가 필요합니다.

🤖 Prompt for AI Agents
In backend/build.gradle around lines 54 to 57, the AWS SDK dependencies are
pinned to 2.26.0 which contains known CVEs; update all software.amazon.awssdk
artifact versions to at least 2.40.13 (e.g., implementation
'software.amazon.awssdk:s3:2.40.13', implementation
'software.amazon.awssdk:auth:2.40.13', implementation
'software.amazon.awssdk:url-connection-client:2.40.13'), or better centralize
the SDK version in a single variable or BOM and reference it for consistency;
after updating, refresh Gradle dependencies and run the build/tests to verify no
breaking API changes.


// resize tool
implementation 'net.coobird:thumbnailator:0.4.14'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -69,6 +70,16 @@ public ResponseEntity<?> getClubApplications(@CurrentUser CustomUserDetails user
return Response.ok(clubApplyAdminService.getClubApplicationForms(user));
}

@DeleteMapping("/application/{applicationFormId}")
@Operation(summary = "클럽 지원서 양식 삭제", description = "클럽의 지원서 양식을 삭제합니다")
@PreAuthorize("isAuthenticated()")
@SecurityRequirement(name = "BearerAuth")
public ResponseEntity<?> deleteClubApplicationForm(@PathVariable String applicationFormId,
@CurrentUser CustomUserDetails user) {
clubApplyAdminService.deleteClubApplicationForm(applicationFormId, user);
return Response.ok("success delete application");
}

@GetMapping("/apply/info/{applicationFormId}")
@Operation(summary = "클럽 지원자 현황", description = "클럽 지원자 현황을 불러옵니다")
@PreAuthorize("isAuthenticated()")
Expand Down Expand Up @@ -105,13 +116,16 @@ public ResponseEntity<?> removeApplicant(@PathVariable String applicationFormId,
return Response.ok("success delete applicant");
}

@GetMapping(value = "/applicant/{applicationFormId}/events",produces = "text/event-stream")
@Operation(summary = "지원자 상태 변경 실시간 이벤트",
description = "지원자의 상태 변경을 실시간으로 받아볼 수 있는 SSE 엔드포인트입니다.")
@GetMapping(value = "/applicant/{applicationFormId}/events", produces = "text/event-stream")
@Operation(summary = "지원자 상태 변경 실시간 이벤트",
description = "지원자의 상태 변경을 실시간으로 받아볼 수 있는 SSE 엔드포인트입니다.")
@PreAuthorize("isAuthenticated()")
@SecurityRequirement(name = "BearerAuth")
public SseEmitter getApplicantStatusEvents(@PathVariable String applicationFormId,
public SseEmitter getApplicantStatusEvents(HttpServletResponse response,
@PathVariable String applicationFormId,
@CurrentUser CustomUserDetails user) {
response.addHeader("X-Accel-Buffering", "no");
response.addHeader("Cache-Control", "no-cache");
return clubApplyAdminService.createSseConnection(applicationFormId, user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,11 @@ public ResponseEntity<?> applyToClub(@PathVariable String clubId,
return Response.ok("success apply");
}

@GetMapping("/apply")
@GetMapping("/apply")
@Operation(summary = "클럽의 활성화된 지원서 목록 불러오기", description = "클럽의 활성화된 모든 지원서 목록을 불러옵니다")
public ResponseEntity<?> getActiveApplicationForms(@PathVariable String clubId) {
return Response.ok(clubApplyPublicService.getActiveApplicationForms(clubId));
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class ClubSearchController {
+ "keyword에 빈칸 입력 시 전체 검색<br>"
+ "recruitmentStatus, category, division에 all 입력 시 전체 검색<br>"
+ "<br>"
+ "keyword는 대소문자 구분 없이 자유롭게 검색"
+ "keyword는 대소문자 구분 없이 자유롭게 검색<br>"
+ "recruitmentStatus은 모집상태로 ALWAYS(상시모집), OPEN(모집중), CLOSED(모집마감), UPCOMING(모집예정)<br>"
+ "division은 분과로 중동<br>"
+ "category는 종류로 봉사, 종교, 취미교양, 학술, 운동, 공연, 기타<br>")
Expand Down
20 changes: 13 additions & 7 deletions backend/src/main/java/moadong/club/entity/Club.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
package moadong.club.entity;

import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -25,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
Expand All @@ -49,15 +46,18 @@ public class Club implements Persistable<String> {
@Field("recruitmentInformation")
private ClubRecruitmentInformation clubRecruitmentInformation;

@Field("description")
private ClubDescription clubDescription;

@Version
private Long version;

public Club() {
this.name = "";
this.category = "";
this.division = "";
this.state = ClubState.UNAVAILABLE;
this.clubRecruitmentInformation = ClubRecruitmentInformation.builder().build();
this.clubDescription = ClubDescription.builder().build();
}

public Club(String userId) {
Expand All @@ -67,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) {
Expand All @@ -77,15 +78,19 @@ public Club(String id, String userId) {
this.state = ClubState.UNAVAILABLE;
this.clubRecruitmentInformation = ClubRecruitmentInformation.builder().build();
this.userId = userId;
this.clubDescription = ClubDescription.builder().build();
}

@Builder
public Club(String name, String category, String division,
String userId,
ClubRecruitmentInformation clubRecruitmentInformation) {
this.name = name;
this.category = category;
this.division = division;
this.userId = userId;
this.clubRecruitmentInformation = clubRecruitmentInformation;
this.clubDescription = ClubDescription.builder().build();
}

public void update(ClubInfoRequest request) {
Expand All @@ -98,6 +103,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<String> tags) {
Expand Down
44 changes: 38 additions & 6 deletions backend/src/main/java/moadong/club/entity/ClubApplicationForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,32 @@

import jakarta.persistence.Id;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import moadong.club.enums.ApplicantStatus;
import moadong.club.enums.ApplicationFormMode;
import moadong.club.enums.ApplicationFormStatus;
import moadong.club.enums.SemesterTerm;
import moadong.global.exception.ErrorCode;
import moadong.global.exception.RestApiException;
import org.springframework.data.annotation.Version;
import org.springframework.data.domain.Persistable;
import org.springframework.data.mongodb.core.mapping.Document;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

@Document("club_application_forms")
@AllArgsConstructor
@Getter
@Builder(toBuilder = true)
public class ClubApplicationForm implements Persistable<String> {
private static final String[] externalApplicationUrlAllowed = {"https://forms.gle", "https://docs.google.com/forms", "https://form.naver.com", "https://naver.me"};

@Id
private String id;
Expand Down Expand Up @@ -57,9 +63,20 @@ public class ClubApplicationForm implements Persistable<String> {
@Builder.Default
private ApplicationFormStatus status = ApplicationFormStatus.UNPUBLISHED;

@NotNull
@Builder.Default
private ApplicationFormMode formMode = ApplicationFormMode.INTERNAL;

@Builder.Default
private String externalApplicationUrl = "";

@Version
private Long version;

public ApplicationFormMode getFormMode() {
return Optional.ofNullable(this.formMode).orElse(ApplicationFormMode.INTERNAL);
}

public void updateFormTitle(String title) {
this.title = title;
}
Expand Down Expand Up @@ -89,6 +106,21 @@ public void updateFormStatus(boolean activeFlag) {
this.status = ApplicationFormStatus.fromFlag(this.status, activeFlag);
}

public void updateFormMode(ApplicationFormMode formMode) {
this.formMode = formMode;
}

public void updateExternalApplicationUrl(String externalApplicationUrl) {
boolean allowed = Arrays.stream(externalApplicationUrlAllowed)
.anyMatch(externalApplicationUrl::startsWith);

if (!allowed) {
throw new RestApiException(ErrorCode.NOT_ALLOWED_EXTERNAL_URL);
}

this.externalApplicationUrl = externalApplicationUrl.trim();
}

@Override
public boolean isNew() {
return this.version == null;
Expand Down
19 changes: 19 additions & 0 deletions backend/src/main/java/moadong/club/entity/ClubAward.java
Original file line number Diff line number Diff line change
@@ -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<String> achievements;
}
27 changes: 27 additions & 0 deletions backend/src/main/java/moadong/club/entity/ClubDescription.java
Original file line number Diff line number Diff line change
@@ -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<ClubAward> awards;

private ClubIdealCandidate idealCandidate;

private String benefits;

private List<Faq> faqs;
}
19 changes: 19 additions & 0 deletions backend/src/main/java/moadong/club/entity/ClubIdealCandidate.java
Original file line number Diff line number Diff line change
@@ -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<String> tags;

private String content;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
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;
Expand All @@ -19,6 +15,12 @@
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)
Expand All @@ -38,19 +40,16 @@ public class ClubRecruitmentInformation {
@Column(length = 30)
private String introduction;

@Column(length = 20000)
private String description;

@Column(length = 5)
private String presidentName;

@Pattern(regexp = RegexConstants.PHONE_NUMBER, message = "전화번호 형식이 올바르지 않습니다.")
@Column(length = 13)
private String presidentTelephoneNumber;

private LocalDateTime recruitmentStart;
private Instant recruitmentStart;

private LocalDateTime recruitmentEnd;
private Instant recruitmentEnd;

private String recruitmentTarget;

Expand All @@ -60,12 +59,12 @@ public class ClubRecruitmentInformation {

private List<String> tags;

private List<Faq> faqs;

@Enumerated(EnumType.STRING)
@NotNull
private ClubRecruitmentStatus clubRecruitmentStatus;

private LocalDateTime lastModifiedDate;

public void updateLogo(String logo) {
this.logo = logo;
}
Expand All @@ -75,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() {
Expand Down Expand Up @@ -121,4 +118,12 @@ public void update(ClubInfoRequest request) {
public void updateCover(String cover) {
this.cover = cover;
}

private void setLastModifiedDate(LocalDateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}

public void updateLastModifiedDate() {
setLastModifiedDate(LocalDateTime.now());
}
}
Loading