Skip to content

[WTH-203] 동아리 개설/가입 수 제한#30

Merged
hyxklee merged 7 commits intodevfrom
refactor/WTH-203-동아리-생성-수-제한
Mar 19, 2026

Hidden character warning

The head ref may contain hidden characters: "refactor/WTH-203-\ub3d9\uc544\ub9ac-\uc0dd\uc131-\uc218-\uc81c\ud55c"
Merged

[WTH-203] 동아리 개설/가입 수 제한#30
hyxklee merged 7 commits intodevfrom
refactor/WTH-203-동아리-생성-수-제한

Conversation

@hyxklee
Copy link
Copy Markdown
Contributor

@hyxklee hyxklee commented Mar 18, 2026

📌 Summary

어떤 작업인지 한 줄 요약해 주세요.

MVP 동아리 개설/가입 수 제한 정책을 수립했습니다.

📝 Changes

변경사항을 what, why, how로 구분해 작성해 주세요.

What

동아리 개설/가입 수 제한 정책 수립

Why

무분별한 생성과 가입을 막기 위해

How

동아리 생성 1개, 가입 1개로 정책 수립
MVP만 유지

📸 Screenshots / Logs

필요시 스크린샷 or 로그를 첨부해주세요.

💡 Reviewer 참고사항

리뷰에 참고할 내용을 작성해주세요.

일단은 MVP에서만 유효한 설정입니다. 추후 BM 설정에 따라 개수를 바꾸는 식으로 변경될 수도 있습니다.

✅ Checklist

  • PR 제목 설정 완료 (WTH-123 인증 필터 설정)
  • 테스트 구현 완료
  • 리뷰어 등록 완료
  • 자체 코드 리뷰 완료

Summary by CodeRabbit

  • New Features

    • 동아리 생성(LEAD) 및 가입(USER)에 대해 역할 기반으로 각각 최대 1개로 제한합니다.
    • 생성/가입 시 제한을 사전검증하여 초과 시 명확한 충돌 오류를 반환합니다.
    • 생성 흐름에서 사용자 조회 시 잠금을 적용해 정책 검사 전에 처리합니다.
  • Tests

    • 제한 정책 관련 단위/통합 테스트를 추가·갱신해 실패·성공 시나리오를 검증합니다.

@hyxklee hyxklee requested a review from soo0711 March 18, 2026 12:38
@hyxklee hyxklee self-assigned this Mar 18, 2026
@hyxklee hyxklee added ✨ Feature 새로운 기능 추가 🔨 Refactor 코드 구조 개선 및 리팩토링 labels Mar 18, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 18, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8a20e695-7284-4643-b023-28a8872704dc

📥 Commits

Reviewing files that changed from the base of the PR and between 77027d4 and 2c85251.

📒 Files selected for processing (8)
  • src/main/kotlin/com/weeth/domain/club/application/exception/ClubErrorCode.kt
  • src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUsecase.kt
  • src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCase.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberReader.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberRepository.kt
  • src/main/kotlin/com/weeth/domain/club/domain/service/ClubMemberPolicy.kt
  • src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUseCaseTest.kt
  • src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCaseTest.kt
🚧 Files skipped from review as they are similar to previous changes (6)
  • src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCase.kt
  • src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUseCaseTest.kt
  • src/main/kotlin/com/weeth/domain/club/domain/service/ClubMemberPolicy.kt
  • src/main/kotlin/com/weeth/domain/club/application/exception/ClubErrorCode.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberReader.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberRepository.kt

📝 Walkthrough

Walkthrough

동아리 도메인에 가입 및 생성 제한 로직을 도입했습니다. 새로운 예외/에러 코드, 멤버 집계 카운트 메서드, 정책 검증(validateJoinLimit/validateCreateLimit)을 추가하고, 유스케이스에서 해당 정책을 호출하도록 수정했습니다.

Changes

Cohort / File(s) Summary
Exception Classes
src/main/kotlin/com/weeth/domain/club/application/exception/ClubCreateLimitExceededException.kt, src/main/kotlin/com/weeth/domain/club/application/exception/ClubJoinLimitExceededException.kt
새 예외 추가(ClubCreateLimitExceededException) 및 가입 예외명 변경(기존 ClubCantJoinExceptionClubJoinLimitExceededException).
Error Code Enum
src/main/kotlin/com/weeth/domain/club/application/exception/ClubErrorCode.kt
CLUB_CANT_JOIN 제거; CLUB_JOIN_LIMIT_EXCEEDED(21110)CLUB_CREATE_LIMIT_EXCEEDED(21111) 추가(HTTP CONFLICT).
Domain Repository / Reader
src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberReader.kt, src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberRepository.kt
사용자/상태/역할로 필터링한 멤버 수를 반환하는 countByUserIdAndMemberStatusAndMemberRole(...) 메서드 추가(Repo에 쿼리 포함).
Domain Policy
src/main/kotlin/com/weeth/domain/club/domain/service/ClubMemberPolicy.kt
validateJoinLimit(userId)validateCreateLimit(userId) 추가; 내부 상수 MAX_USER_CLUBS = 1, MAX_LEAD_CLUBS = 1; 카운트 기반으로 예외 던짐.
Use Cases
src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUsecase.kt, src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCase.kt
가입 시 clubMemberPolicy.validateJoinLimit() 호출로 기존 체크 대체; 생성 시 userReader.getByIdWithLock(...) 사용 및 clubMemberPolicy.validateCreateLimit() 호출 추가.
Tests
src/test/kotlin/com/weeth/domain/club/.../ManageClubMemberUseCaseTest.kt, .../ManageClubUseCaseTest.kt, .../ClubMemberPolicyTest.kt
정책 기반 예외 검증을 반영하도록 테스트 수정/추가(예외 타입 변경, 정책 모킹, 신규 실패/성공 시나리오).

Sequence Diagram(s)

sequenceDiagram
    participant Client as Client
    participant UseCase as ManageClubUseCase
    participant Policy as ClubMemberPolicy
    participant Repo as ClubMemberRepository
    participant DB as Database

    Client->>UseCase: 요청 (create/join)
    UseCase->>Repo: userReader.getByIdWithLock(userId) / getById(userId)
    UseCase->>Policy: validateCreateLimit(userId) / validateJoinLimit(userId)
    Policy->>Repo: countByUserIdAndMemberStatusAndMemberRole(userId, status, role)
    Repo->>DB: SELECT COUNT(...)
    DB-->>Repo: count
    Repo-->>Policy: count
    alt count >= MAX
        Policy-->>UseCase: throw LimitExceededException
        UseCase-->>Client: 409 Conflict (예외)
    else count < MAX
        UseCase->>Repo: save club / save clubMember
        Repo->>DB: INSERT ...
        DB-->>Repo: ok
        Repo-->>UseCase: saved
        UseCase-->>Client: 성공 응답
    end
Loading

🎯 Estimated Code Review Effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

📌 Possibly Related PRs

👥 Suggested Reviewers

  • JIN921
  • dalzzy
  • woneeeee
  • soo0711

🐰 Poem

🐇 동아리 문을 지키네, 한 걸음씩,
가입은 셈해 보고, 창설도 한정,
정책이 말하네: "한도는 하나!",
예외 휙 던지고, 테스트가 박수,
당근처럼 튀어나온 안정의 코드.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 동아리 개설/가입 수 제한이라는 주요 변경사항을 명확하게 요약하고 있으며, 작업번호 WTH-203를 포함하여 구체적이고 간결합니다.
Description check ✅ Passed PR 설명은 템플릿의 모든 주요 섹션(Summary, What/Why/How, 체크리스트)을 포함하고 있으며, 작업 내용과 의도가 명확하게 기술되어 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/WTH-203-동아리-생성-수-제한
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCase.kt`:
- Around line 39-43: Acquire and hold the per-user lock before running the
create-limit check to avoid TOCTOU: obtain the user lock for userId, then call
clubMemberPolicy.validateCreateLimit(userId), then load the user with
userReader.getById(userId), and finally release the lock (ensure release in a
try/finally or equivalent). Update the flow in ManageClubUseCase so the lock is
taken prior to validateCreateLimit and always released after the validation and
subsequent use of user to serialize the policy upper bound.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 35219ae0-cdc8-4aa0-be79-389dd69e6190

📥 Commits

Reviewing files that changed from the base of the PR and between 76eee80 and 77027d4.

📒 Files selected for processing (11)
  • src/main/kotlin/com/weeth/domain/club/application/exception/ClubCreateLimitExceededException.kt
  • src/main/kotlin/com/weeth/domain/club/application/exception/ClubErrorCode.kt
  • src/main/kotlin/com/weeth/domain/club/application/exception/ClubJoinLimitExceededException.kt
  • src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUsecase.kt
  • src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCase.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberReader.kt
  • src/main/kotlin/com/weeth/domain/club/domain/repository/ClubMemberRepository.kt
  • src/main/kotlin/com/weeth/domain/club/domain/service/ClubMemberPolicy.kt
  • src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUseCaseTest.kt
  • src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCaseTest.kt
  • src/test/kotlin/com/weeth/domain/club/domain/service/ClubMemberPolicyTest.kt

Copy link
Copy Markdown
Collaborator

@soo0711 soo0711 left a comment

Choose a reason for hiding this comment

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

수고하셧습니다!! 코드래빗이 말한 동시성 이슈만 체크하면 될 것 같아요!

hyxklee added 3 commits March 19, 2026 14:40
# Conflicts:
#	src/main/kotlin/com/weeth/domain/club/application/exception/ClubErrorCode.kt
#	src/main/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUsecase.kt
#	src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubMemberUseCaseTest.kt
#	src/test/kotlin/com/weeth/domain/club/application/usecase/command/ManageClubUseCaseTest.kt
@hyxklee hyxklee merged commit af1b842 into dev Mar 19, 2026
2 checks passed
@hyxklee hyxklee deleted the refactor/WTH-203-동아리-생성-수-제한 branch March 19, 2026 06:31
hyxklee added a commit that referenced this pull request Apr 30, 2026
* [WTH-137] weeth server cicd 구축 (#4)

* chore: 깃 이그노어 업데이트

* deploy: Dockerfile 통합

* deploy: main, dev 통합 CI 워크플로우 설정

* deploy: docker ignore 설정

* deploy: 개발서버 CICD 적용

* deploy: 운영서버 CICD 적용

* chore: caddy 리버스 프록시 정보 추가

* chore: 릴리즈 드래프터 적용

* chore: lint 수정

* chore: PR 템플릿 수정

* deploy: key 볼륨 마운트 설정

* deploy: 워크플로우 의존성 설정

* deploy: ci job 이름 변경

* deploy: wrapping 제거

* deploy: 홈 디렉토리 설정 변경

* chore: jdk 21로 업데이트

* [WTH-140] Deploy Job 분리  (#5)

* deploy: job 분리

* chore: 개행 추가

* hotfix: 레디스 설정 추가

* [WTH-143] 응답 코드 및 예외 예시 오류 수정 (#7)

* fix: 커스텀 예외 코드 반환

* fix: 그룹 페이지에 각각 커스터마이저 등록

* [WTH-139] file 도메인 코틀린 마이그레이션 (#6)

* refactor: File 엔티티 구조 변경 및 마이그레이션

* refactor: 기존 서비스 제거

* refactor: FileRepository 마이그레이션

* refactor: 예외 마이그레이션

* refactor: 매퍼 마이그레이션

* refactor: dto 마이그레이션

* refactor: 파일 엔티티 개선을 위한 Enum Class 추가

* refactor: 타 도메인 조회를 위한 Reader 인터페이스 추가

* refactor: 파일 업로드 URL 생성을 위한 Port/Adapter 구현

* refactor: 기존 유스케이스를 QueryService로 이전

* refactor: Controller 마이그레이션

* refactor: File 도메인 변경에 따른 기존 코드 수정

* refactor: File 도메인 변경에 따른 기존 코드 수정

* refactor: File 도메인 변경에 따른 기존 코드 수정

* refactor: port/adapter 컨벤션 수정 및 스웨거 노출 API prefix 제거

* refactor: 예외 발생 원인 유지

* test: 테스트 추가

* feat: S3/CDN url 반환 로직 구현

* refactor: 주석 추가

* feat: S3/CDN url 반환 로직 구현

* feat: S3/CDN url 반환 환경변수 설정

* refactor: 주석 위치 수정

* refactor: 하위호환

* test: s3 presigned url 테스트 추가

* feat: VO 분리

* refactor: 미사용 객체 제거

* refactor: VO 규격에 맞게 테스트 대응

* refactor: lint 설정

* refactor: Repository 테스트 구현 및 불필요 코드 정리

* refactor: code-review skill 오류 해결

* refactor: 단일 enum 파일로 확장자 관리

* refactor: lint 설정

* refactor: 수정시 null check 추가

* refactor: command로 이동

* refactor: 입력 검증 수정

* [WTH-144] comment 도메인 코틀린 마이그레이션 (#8)

* refactor: Comment 엔티티 마이그레이션

* refactor: 기존 서비스 제거

* refactor: Repository 마이그레이션

* refactor: Dto 마이그레이션 및 분리

* refactor: 예외 마이그레이션

* refactor: mapper 마이그레이션

* refactor: 유스케이스 마이그레이션 및 통합

* refactor: 컨트롤러 마이그레이션

* refactor: Comment Test Fixture 추가

* refactor: Comment 변경으로 인한 notice 도메인 수정

* refactor: Comment 변경으로 인한 post 도메인 수정

* refactor: 주석 추가

* refactor: 롬복 어노테이션 추가

* refactor: Increse 메서드 추가

* feat: 테스트 시 쿼리 측정을 위한 설정 추가

* feat: 댓글 조회 서비스 구현

* refactor: 댓글 조회 시 파일도 bulk로 조회해오도록 수저

* chore: 컨텍스트 업데이트

* refactor: 자체 리뷰 사항 반영

* feat: 레거시 vs 개선 로직 비교 테스트 추가

* chore: lint 처리

* [WTH-146] penalty 도메인 코틀린 마이그레이션 (#10)

* refactor: Penalty enum java -> kotlin으로 폴더 변경

* refactor: Penalty enum kotlin으로 문법 변환

* refactor: Penalty entity, repository java -> kotlin으로 폴더 변경

* refactor: Penalty dto, mapper java -> kotlin으로 폴더 변경

* refactor: Penalty entity, repository kotlin으로 문법 변환

* refactor: Penalty dto, mapper kotlin으로 문법 변환

* build: Lombok 의존성 및 Kotlin 호환성 설정 추가

* refactor: Kotlin 마이그레이션에 따른 Java 호출 수정

* refactor: Penalty exception java -> kotlin으로 폴더 변경

* refactor: Penalty exception kotlin으로 문법 변환

* refactor: Penalty usecase java -> kotlin으로 폴더 변경

* refactor: Penalty service 불필요한 파일 삭제

* refactor: Penalty controller, responsecode java -> kotlin으로 폴더 변경

* refactor: 코틀린 문법에 맞게 Penalty errorcode 수정

* refactor: Penalty usecase kotlin으로 문법 변환

* refactor: Penalty controller, responseCode kotlin으로 문법 변환

* refactor: PenaltyType enum 패키지 이동

* refactor: Penalty DTO 개별 파일로 분리

* refactor: Penalty usecase command/query 분리

* refactor: Penalty mapper, controller 새 구조에 맞게 수정

* refactor: GetPenaltyQueryService 조회 N+1 쿼리 최적화

* refactor: Penalty 카운트 수정 시 User 비관적 락 적용

* fix: SavePenaltyUseCase 비관적 락 정확성 우선시하여 stale read 방지

* refactor: GetPenaltyQueryService UserCardinal N+1 쿼리 배치 조회로 최적화

* refactor: PenaltyRepository 동적 쿼리를 명시적 @query로 전환

* fix: PenaltyResponse에 항상 null 반환되던 필드에 실제 값 매핑

* refactor: Penalty UseCase 메서드명 execute를 도메인 동작명으로 변경

* refactor: Penalty DTO 불필요한 nullable 제거 및 Mapper 파라미터 정리

* refactor: QueryService DTO 조합 로직 Mapper로 이동 및 메서드명 개선

* style: Penalty DTO에 Swagger @Schema 어노테이션 추가

* refactor: Penalty 쿼리 표준화 및 LAZY fetch 전환

* refactor: QueryService @transactional 어노테이션 클래스 레벨로 이동

* [WTH-142] attendance 도메인 코틀린 마이그레이션 (#9)

* refactor: Attendacne domain java -> kotlin으로 폴더 변경

* build: Lombok 의존성 및 Kotlin 호환성 설정 추가

* refactor: Attendacne entity kotlin으로 문법 변환

* test: Attendance entity Test 추가

* refactor: Attendacne enum java -> kotlin으로 폴더 변경

* refactor: Attendacne eum kotlin으로 문법 변환

* refactor: Attendacne repository kotlin으로 문법 변환

* refactor: Attendacne dto java -> kotlin으로 폴더 변경

* refactor: Attendacne dto kotlin으로 문법 변환

* refactor: Attendacne dto 코틀린 코드에 맞춰 수정

* refactor: Attendacne mapper java -> kotlin으로 폴더 변경 및 dto 확장 준비

* refactor: Attendance DTO request/response로 분리

* refactor: Attendacne mapper 코틀린 코드에 맞춰 참조 코드 수정

* refactor: Attendacne service java -> kotlin으로 폴더 변경

* refactor: Attendacne service kotlin으로 문법 변환

* refactor: Attendacne usecase java -> kotlin으로 폴더 변경

* refactor: Attendacne usecase kotlin으로 문법 변환

* refactor: Attendacne exception java -> kotlin으로 폴더 변경

* refactor: Attendacne exception kotlin으로 문법 변환

* refactor: Attendacne controller, responseCode java -> kotlin으로 폴더 변경

* refactor: Attendacne controller, responseCode kotlin으로 문법 변환

* refactor: AttendanceScheduler를 service/scheduler 패키지로 이동

* refactor: Attendance UseCase command/query 분리

* test: Attendance command/query 분리에 따른 테스트 재작성

* refactor: Attendance controller UseCase 의존 분리

* test: AttendanceMapperTest 하드코딩 값을 변수 참조로 변경

* refactor: 테스트 FQCN 정리 및 하드코딩 값 변수 참조로 변경

* refactor: Attendance Schduler Transaction import jakarta에서 spring으로 변경

* refactor: Attendance N+1 방지 위해 @manytoone(fetch = FetchType.LAZY) 적용

* refactor: Attendance 단건 조회 N+1 방지 위해 JOIN FETCH 적용

* test: UpdateAttendanceStatusUseCase 테스트 findByIdWithUser 반영

* refactor: user.attendances 조회를 Repository 쿼리로 분리

* test: Repository 쿼리 전환에 따른 테스트 mock 수정

* refactor: AttendanceMapper 중복 메서드 통합

* refactor: AttendanceGetService 미사용 메서드 제거

* refactor: Attendance DTO에 @Schema 어노테이션 추가

* refactor: AttendanceMainResponse를 AttendanceSummaryResponse로 이름 변경

* refactor: UpdateAttendanceStatusRequest 불필요한 @NotNull 제거

* refactor: toMainResponse를 toSummaryResponse로 변경

* stye: kotlin 코드 포맷 적용

* test: toSummaryResponse mock에 isAdmin 파라미터 명시

* refactor: UseCase 메서드명 execute를 도메인 용어로 변경

* refactor: GetAttendanceQueryService 메서드명을 도메인 용어로 변경

* refactor: AttendanceScheduler를 infrastructure로 이동, Usecase로 분리

* refactor: 아키텍처 기준에 맞게 attendance enum 패키지 구조 수정

* [WTH-145] board 도메인 마이그레이션 (#11)

* [WTH-157] global 도메인 마이그레이션 (#13)

* refactor: JWT 마이그레이션

* refactor: Apple 마이그레이션

* refactor: Kakao 마이그레이션

* refactor: Config 마이그레이션

* refactor: 예외 관련 마이그레이션

* refactor: 스프링 인증 관련 마이그레이션

* refactor: Redis 토큰 저장소 마이그레이션

* refactor: 기타 global 파일 마이그레이션

* refactor: 유저 도메인 변경사항 전파

* docs: 주석 추가

* docs: 코드 스타일 업데이트

* docs: 마크다운 깨짐 해결

* chore: lint 수정

* refactor: Role -> String 작업 원복

* refactor: 리뷰 반영

* refactor: 토큰 오류 수정

* refactor: email nullable 설정

* [WTH-149] account 도메인 코틀린 마이그레이션 (#12)

* test: account 도메인 안전망 테스트 추가

* refactor: Account entity java -> kotlin 패키지 변경

* refactor: Account entity kotlin으로 문법 변경, money vo 추가

* refactor: entity 코틀린 문법 변경에 따른 참조 파일 수정

* refactor: Account dto, mapper java -> kotlin 패키지 변경

* refactor: Account dto 분리 및 kotlin 문법으로 변환

* refactor: Account mapper 수동 mapper,  kotlin 문법으로 변환

* refactor: dto, mapper 코틀린 문법 변경에 따른 참조 파일 수정

* refactor: Account repository java -> kotlin 패키지 변경

* refactor: Account repository kotlin 문법으로 변환

* refactor: AccountUseCaseImpl find() 조회 N+1 개선

* refactor: Account repository 코틀린 문법 변경에 따른 참조 파일 수정

* refactor: 불필요한 service, usecase 관련 파일 삭제

* refactor: 아키텍처 구조에 맞게 usecase command/query로 분리

* test: usecase command/query 분리에 맞춰 테스트 다시 작성

* refactor: Account usecase 분리에 맞춰 참조 파일 수정

* refactor: Account exception, controller, responsecode java -> kotlin 패키지 변경

* refactor: Account controller, responsecode kotlin 문법으로 변환

* refactor: Account exception kotlin 문법으로 변환

* refactor: 불필요한 @JvmStatic 어노테이션 제거

* fix: Receipt.update() 금액 유효성 검사 누락 수정

* fix: updateReceipt 기수 존재 검증 누락 수정 및 description @notblank 추가

* fix: 영수증 수정 시 빈 파일 리스트로 전체 삭제 처리

* refactor: 요청 스웨거 예시 수정

* refactor: 요청 스웨거 예시 추가

* fix: Receipt 수정 시 account 불일치 검증 및 clearMocks 누락 수정

* [WTH-159] user 도메인 마이그레이션 (#14)

* refactor: 사용자 도메인 모델을 코틀린으로 전환

* refactor: 사용자 DTO와 컨트롤러를 재구성

* refactor: 사용자 예외와 조회 로직을 정리

* feat: 소셜 로그인 연동을 구현

* perf: OB 적용 조회를 배치로 최적화

* refactor: 타 도메인 사용자 의존성을 정리

* test: 의존성 변경에 맞춰 테스트를 수정

* test: 사용자 도메인 테스트 구조를 개편

* refactor: 유저 테스트 명시적으로 수정

* refactor: 탈퇴 메서드 이전

* refactor: 미사용 메서드 제거

* refactor: 개행 추가

* refactor: DB 정렬 쿼리로 개선

* refactor: lint 설정

* [WTH-148] schedule 도메인 코틀린 마이그레이션 (#15)

* test: Schedule 도메인 안전망 테스트 추가

* refactor: Schedule entity event java -> kotlin 패키지 변경

* refactor: Schedule entity event 독립 entity로 변경 및 kotlin 문법으로 수정

* refactor: Schedule entity event과 관련된 참조 파일 수정

* refactor: Meeting → Session, Attendance kotlin 엔티티 변환 및 attendance 도메인으로 이동

* refactor: Attendance 도메인 참조 파일 Session/AttendanceStatus로 업데이트

* refactor: Schedule 도메인 참조 파일 Session으로 업데이트

* refactor: UserManageUseCase Session 참조로 업데이트

* test: 문법 변환에 맞춰 Schedule 테스트 및 픽스처 수정

* refactor: 미사용 Status enum 제거

* refactor: Schedule enum java -> kotlin 패키지 변경

* refactor: Schedule enum  kotlin 문법으로 변환

* refactor: Schedule dto 분리 및 kotlin 문법으로 변환

* refactor: requiredItem 속성 삭제 및 dto 참조 파일 수정

* refactor: Schedule mapper java -> kotlin 패키지 변경

* refactor: Schedule mapper kotlin 문법으로 변환

* refactor: Schedule validator java -> kotlin 패키지 변경, java dto 삭제

* refactor: Schedule validator kotlin 문법으로 변환

* refactor: Schedule UseCase/Service Kotlin DTO 참조로 전환

* refactor: Schedule Controller Kotlin DTO 참조로 전환

* refactor: Schedule mapper/validator Kotlin DTO 참조로 전환 및 테스트 수정

* refactor: Schedule event repository kotlin 문법으로 변환

* refactor: SessionReader 인터페이스 추가

* refactor: User Attendance 연관관계 단순화 및 N+1 해결

* refactor: AttendanceRepository 배치 조회 메서드 추가

* refactor: AttendanceRepository deleteAllBySession 벌크 삭제 추가

* refactor: session, evenet, attendence usecase 생성

* refactor: schedule usecase get query 생성

* refactor: usecase command/query 통합, 분리에 맞춰 참조 파일 수정, 삭제

* refactor: usecase command/query 통합, 분리에 맞춰 test 수정, 삭제

* refactor: SessionRepository/AttendanceRepository 비관적 락 쿼리 추가

* refactor: ManageSessionUseCase/ManageAttendanceUseCase 비관적 락 적용

* refactor: schedule/attendance 컨트롤러 Kotlin 전환 및 Event/Session API 분리

* refactor: ScheduleTimeCheck Kotlin 전환 및 요청 DTO type 필드 제거

* fix: ScheduleTimeCheckValidator null 입력 시 NPE 방지

* refactor: Event 조회를 Command UseCase에서 QueryService로 분리

* style: GetScheduleQueryService Kotlin 관용 표현으로 리팩토링

* style: findById().orElseThrow() Kotlin 스타일로 통일 및 불필요한 줄 제거

* refactor: Session 조회를 Command UseCase에서 GetSessionQueryService로 분리

* style: ktlintFormat 적용

* refactor: Meeting → Session 네이밍 통일

* style: GetAttendanceQueryService mapper 필드명 attendanceMapper로 통일

* docs: QR 코드 출석 기능 예정 메서드에 TODO 주석 추가

* refactor: schedule DTO에 @Schema 어노테이션 추가

* refactor: Meeting → Session 네이밍 통일

* fix: 머지 충돌로 인한 UserManageUseCaseImpl 컴파일 오류 수정

* fix: 출석 상태 관리자 재정 시 상태 검증 및 카운터 보정 로직 수정

* test: UserManageUseCaseTest 의존성을 실제 구현체에 맞게 수정

* fix: SessionNotFoundException을 attendance 도메인으로 분리

* refactor: findSessionInfos 중복 정렬 제거

* refactor: Meeting → Session 네이밍 통일

* fix: Session.updateInfo에 시간 유효성 검증 추가

* fix: Event update에 시간 유효성 검증 추가

* refactor: ScheduleController에서 불필요한 @ApiErrorCodeExample 제거

* refactor: AttendanceRepository mock을 relaxed로 변경하여 saveAll 호출 오류 수정

* refactor: Meeting -> Session 네이밍 변경

* refactor: ResponseCode 코드 번호 정리

* refactor: SessionErrorCode, SessionNotFoundException를 attendance 패키지로 이동

* refactor: content 필드 text -> length 500으로 변경

* refactor: attendance에서 session 패키지로 분리

* refactor: SwaggerConfig 도메인 코드 범위 테이블에 Session 추가

* fix: 세션 삭제 시 출석 상태 조회에 비관적 락 추가

* [WTH-161] 마이그레이션 후 정리 (#16)

* [WTH-160] user 도메인 리팩토링 (#18)

* refactor: cardinal 도메인 분리

* refactor: cardinal 도메인 분리

* refactor: 유저 도메인 dto 개선

* refactor: 유저 관련 엔티티 개선

* refactor: 유스케이스 분리

* refactor: 소셜 로그인 개선

* refactor: 유스케이스 분리

* refactor: 테스트 변경사항 반영

* refactor: 경고 기능 제거

* feat: UserCardinal 쿼리 추가

* refactor: api 엔드포인트 제거 및 응답 코드 수정

* docs: CLAUDE.md 예외 코드 범위 현행화

* test: email 형식에 맞게 fixture 수정

* refactor: 트랜잭션 제거

* refactor: id private set 설정

* [WTH-150] board 도메인 리팩토링 (#20)

* refactor: 미사용 enum 제거

* refactor: 어드민용 API에서는 전체 게시판이 조회되도록 수정

* refactor: 게시판 수정 API PATCH 관련 주석 및 테스트 추가

* refactor: 게시글 수정시 PATCH 규칙 개선 및 삭제된 게시판의 글인 경우 반환하지 않도록 설정

* refactor: 게시판 상세 정보 조회 API 어드민으로 이전

* refactor: 미사용 메서드 제거

* refactor: 미사용 메서드 제거

* refactor: 게시판 정보가 바뀌거나, 유저 권한이 바뀌는 케이스 대응

* docs: todo 주석 추가

* docs: todo 주석 설정

* refactor: private set 설정

* chore: lint 수정

* docs: 엔티티 구조 업데이트

* docs: 엔티티 구조 업데이트

* refactor: 엔티티 구조 개선

* refactor: 엔티티 구조 변경에 따른 테스트 수정

* docs: 주석 추가

* test: 불필요한 문구 제거

* [WTH-174] weeth server 클로드 코드 커스텀 업데이트 (#19)

* docs: 응답코드 5자리로 개선

* docs: 응답코드 5자리로 개선

* chore: ktlint hook 추가

* docs: 클로드 코드 관련 컨텍스트 최신화

* docs: 리드미 업데이트

* [WTH-169] QR 출석체크 기능 구현 (#17)

* refactor: 사용되지 않는 ScheduleTimeCheck 관련 코드 제거

* refactor: 출석 코드 자릿수 4자리에서 6자리로 변경

* feat: QR 출석 Redis 포트 및 어댑터 추가

* feat: QR 출석 예외 클래스 및 에러/응답 코드 추가

* feat: QR 토큰 응답 DTO 및 어드민 QR 생성 UseCase 추가

* feat: 출석 체크인 로직을 Redis QR 코드 기반으로 변경

* feat: 어드민 QR 코드 생성 엔드포인트 추가

* test: GenerateQrTokenUseCase 및 ManageAttendanceUseCase checkIn 테스트 추가

* style: 린트 적용

* refactor: ManageAttendanceUseCase 가독성 개선

* style: 개행 추가해서 가독성 개선

* refactor: Attendance status 필드 private set 적용

* style: 린트 적용

* fix: 출석 에러코드 번호 수정

* fix: 세션 에러코드 번호 수정

* refactor: 불필요한 @transactional 어노테이션 제거

* refactor: 난수 생성 방식을 SecureRandom으로 변경

* feat: 출석 체크 시간 검증 추가

* refactor: QR 출석 Redis 키를 code에서 sessionId로 변경 및 세션 ID API 추가

* docs: QrAttendancePort 메서드 주석 추가

* test: QR 출석 체크인 테스트 수정 및 시간 검증 케이스 추가

* style: 린트 적용

* refactor: TTL_SECONDS 중복 상수를 QrAttendancePort로 통합

* [WTH-176] club 도메인 엔티티 추가 작업 (#21)

* test: 누락 작업 추가(게시판 조회 시 검증 추가)

* feat: Club 도메인 entity, vo 구현

* feat: vo 구현

* feat: repository 구현

* feat: 예외 추가

* feat: enums 추가

* feat: ClubRepository 추가

* feat: ClubMember Test 추가

* feat: Club Test 추가

* chore: lint 설정

* feat: tsid 생성 유틸 추가

* docs: club 응답 코드 추가

* refactor: 동아리 이름은 중복 가능하도록 수정

* refactor: 학교 이름 + 동아리 이름 Unique 제약조건 추가

* test: 테스트 보강

* [WTH-181] club 도메인 추가 작업 2 (#22)

* refactor: UUID 사용으로 인한 code 길이 수정 및 프로필, 배경 사진 추가

* feat: Club Code UUID 적용

* feat: ClubMember 관련 정책 추가

* feat: dto 추가

* feat: 동아리 조회 서비스 구현

* feat: 동아리 멤버 조회 서비스 구현

* feat: 동아리 관리 유스케이스 구현

* feat: 동아리 가입/탈퇴 유스케이스 구현

* feat: 동아리 멤버 관리 유스케이스 구현

* feat: 컨트롤러 추가

* refactor: 스프링 빈 등록

* feat: 응답 코드 추가

* refactor: 주석 추가, 예외 이름 변경

* refactor: 테스트 케이스 보강

* refactor: MVP 기획에 맞게 다중 동아리 지원 막기

* refactor: 기수 정보 및 추가 사용자 정보 반환

* feat: mapper 구현

* refactor: id 기반 검증 제거

* feat: TSID를 Long으로 디코딩하는 어노테이션 추가

* docs: 주석 추가

* chore: lint 설정

* refactor: 중복 에러 코드 제거

* refactor: ClubMember 관련 DTO 수정

* refactor: 전처리 추가

* refactor: 테스트 케이스 추가

* refactor: 동시 가입 오류가 터지지 않게 락 적용

* refactor: 동시 가입 오류가 터지지 않게 락 적용

* refactor: 유스케이스명 수정

* refactor: ClubMember 관리시 해당 동아리에 속했는지 검증 추가

* refactor: 동아리 업데이트시 PATCH 계약에 맞게 수정

* feat:프로필, 배경 사진 삭제 API 추가

* [WTH-183] club 도메인 추가 작업 3 (#23)

* refactor: Account 도메인 클럽 추가

* refactor: Account 도메인 클럽 추가

* refactor: Attendance 도메인 사전 작업

* refactor: Board 도메인 Club 추가 작업

* refactor: Board 도메인 Club 추가 작업

* refactor: Cardinal 도메인 Club 추가 작업

* refactor: comment 관련 테스트 반영

* refactor: Penalty 도메인 Club 사전 작업

* refactor: Schedule 도메인 Club 추가 작업

* refactor: Session 도메인 Club 추가 작업

* chore: 컨벤션 수정

* refactor: 계좌 생성 메서드 수정

* refactor: 기존 메서드 성능 개선

* docs: clubId 관련 내용 추가

* test: 테스트 반영

* chore: lint 설정

* refactor: 리뷰 내용 반영

* docs: todo 주석 추가

* [WTH-180] 대시보드 api 구현 (#24)

* feat: NoticeRead 엔티티 및 Repository 추가

* feat: 공지 읽음 처리 유스케이스 및 API 추가

* feat: 대시보드용 Reader 인터페이스 추가

* feat: 대시보드 DTO, Mapper, Exception 추가

* feat: 대시보드 QueryService 구현

* feat: 대시보드 Controller 구현

* test: 대시보드 및 공지 읽음 처리 테스트 추가

* docs: 대시보드 도메인 ID API 설계 문서 추가

* docs: Swagger 도메인 코드 범위에 Club, Dashboard 추가

* style: 불필요한 주석 제거

* style: 불필요한 import문 삭제

* refactor: 공지 읽음 ID 조회 시 기간 제한 추가

* refactor: EventRepository findByDateRange @query 제거

* refactor: 사용하지 않는 메서드 제거

* style: 작성자 프로필 이미지 미구현 TODO 주석 추가

* refactor: 미사용 메서드 제거

* fix: 공지 읽음 처리 동시 요청 시 중복 저장 예외 처리

* fix: PostRepository 쿼리 보조 정렬 키 추가

* refactor: 공지 읽음 처리 API에 boardId 범위 제한 추가

* refactor: myClubs 조회 시 활성 멤버십만 반환하도록 수정

* refactor: validateMembership에서 비활성 멤버 접근 차단

* refactor: clubId api 지침에 맞게 수정

* style: 린트 적용

* refactor: NoticeRead 방식을 LastNoticeRead 방식으로 수정

* refactor: clubInfo DTO 초대코드 필드 추가

* refactor: 스케줄 일정 enum으로 변경

* refactor: 최신공지 응답 구조 수정

* refactor: MVP 미지원 홈 응답 필드 임시 제외

* refactor: home 대시보드에 내활동 응답 추가

* refactor: 대시보드 게시글/공지 조회 시 해당 클럽 검증 및 클럽 범위 필터링 적용

* style: 린트 적용

* refactor: 공지 읽음 처리 club 검증 추가

* fix: 대시보드 공지 시간 필드를 정렬 기준인 createdAt으로 통일

* test: 공지 읽음 갱신 시 lastReadAt 변경 여부 단언 추가

* refactor: SessionReader에 findByDateRange API로 통일

* refactor: 불필요한 쿼리문 삭제

* [WTH-189] club 추가 마무리 작업 (#25)

* refactor: Account 도메인 ClubId 추가 및 접근 제어

* refactor: Board 도메인 ClubId 추가 및 접근 제어

* refactor: Cardinal 도메인 ClubId 추가 및 접근 제어

* refactor: CLub 도메인 리팩토링

* refactor: CLub 도메인 리팩토링

* refactor: schedule 도메인 club 추가 및 접근 제어

* refactor: session 도메인 club 추가 및 접근 제어

* refactor: ManageCardinalUseCase.kt 접근제어 추가

* refactor: applyOb 메서드 ClubMember로 이전

* refactor: attendance 도메인 clubMember 추가

* refactor: apply-ob api 추가

* refactor: apply-ob dto 추가

* refactor: ClubMember 조회시 clubId 추가

* refactor: Penalty clubMember 추가

* refactor: 접근 제어 추가

* refactor: 기수 정책 추가

* refactor: 미사용 API 제거

* refactor: 미사용 코드 제거

* docs: 주석 추가

* refactor: response code 추가

* refactor: mock 제거

* refactor: lint 설정

* test: ClubMemberCardinalPolicyTest 추가

* refactor: 에러코드 수정

* docs: 주석 추가

* refactor: 코드 정리

* refactor: 테스트 오류 수정

* docs: TODO 주석 추가

* refactor: isCurrent 메서드명 변경 및 주석 추가

* refactor: 리뷰 내용 반영

* [WTH-197] 동아리 정보 공개 api 구현 (#27)

* refactor: 동아리 정보 공개 API 구현

* refactor: @PathVariable 어노테이션 제거

* refactor: dto명 수정

* [WTH-198] 동아리 개설 가입시 기수 입력 및 초기화 (#28)

* feat: 최초 기수 설정 dto 및 중복 설정 예외 추가

* feat: 락을 포함한 조회 및 검증 메서드 추가. (추후 WTH-200 이슈에서도 사용 예정)

* feat: 락을 포함한 조회 및 검증 메서드 추가.

* refactor: 동아리 개설시 기수 초기화 로직 추가

* feat: 기수 초기 설정시 출석 초기화 로직 추가

* refactor: 개설시 기수 입력 추가

* feat: 활동 기수 최초 설정 API 추가

* docs: 주석 추가

* refactor: PathVariable 제거

* refactor: n+1 제거 및 주석 추가

* refactor: 미사용 import 문 제거

* refactor: 가볍게 검증하도록 수정

* [WTH-203] 동아리 개설/가입 수 제한 (#30)

* feat: 동아리 최대 가입 예외 추가

* refactor: 동아리 생성가입 제한 로직 추가

* refactor: 미사용 예외 삭제

* docs: 주석 최신화

* refactor: 충돌해결

* refactor: 동시성 문제 해소

* [WTH-210] 학교 학과 open api (#29)

* feat: Redis 캐시 설정 추가

* feat: 커리어넷 API 설정 추가

* feat: 학교/학과 도메인 레이어 추가

* feat: 커리어넷 Port/어댑터 구현

* feat: 학교/학과 조회 API 엔드포인트 추가

* feat: 학교/학과 조회 API 공개 접근 허용

* test: 학교/학과 api 테스트 구현

* docs: university 도메인 코드 범위 추가

* style: 개행 추가

* refactor: 커리어넷 Port 구조 개선

* style: 린트 적용

* refactor: 코드 리뷰 반영

* test: 변경된 구조에 맞게 테스트 수정

* fix: Redis 캐시 Kotlin 역직렬화 오류 수정

* style: 린트 적용

* fix: Redis 캐시 역직렬화 타입 검증 범위 제한

* refactor: 응답이 한글부터 정렬되게 수정

* fix: university API 엔드포인트 경로 수정

* refactor: GetSchoolQueryService, GetMajorQueryService를 GetUniversityQueryService로 통합

* refactor: port 네이밍 변경

* test: QueryService 통합에 맞춰 테스트 수정

* test: 학교/학과 캐시 통합 테스트 및 성능 벤치마크 추가

* refactor: 코드 리뷰 반영

* refactor: TTL 7일로 수정

* fix: MySQL 버전 수정

* fix: Jackson 역직렬화 허용 타입을 ArrayList로 제한

* [WTH-208] 사용자 프로필 기능 추가 (#26)

* feat: User 엔티티 term, profile 필드 추가

* feat: 약관 동의 api 구현

* feat: 프로필 이미지 업로드/수정 api 구현

* feat: OAuth 프로필 이미지 저장

* feat: 파일 타입에 USER PROFILE 추가

* feat: UserInfo 공통 DTO 추가

* refactor: 사용자 정보가 필요한 Response/Mapper에서 UserInfo로 통일

* feat: 프로필 bio 및 profileImageUrl 필드 추가

* test: 사용자 프로필 필드 변경에 따른 관련 테스트 수정

* style: 린트 적용

* feat: 일정 클럽 필터링 기능 추가

* refactor: 대시보드 내활동 userInfo 네이밍 변경

* style: UserMapper DTO 생성자 named arguments 적용

* fix: CommonResponse<Void> nullable 타입 수정

* refactor: agreeTerms 검증 및 할당 로직 개선

* refactor: User 엔티티 생성자 정리 및 lateinit 제거

* fix: UserInfo.role nullable 타입 제거

* fix: AgreeTermsRequest 검증 메시지 추가

* test: User 엔티티 agreeTerms, updateProfileImageUrl, bio 테스트 추가

* fix: bio 필드 최대 길이 30자로 변경

* fix: profileImageUrl 공백 입력 시 null 정규화

* fix: User 생성자 name, profileImageUrl 검증, 정규화 추가

* refactor: User 생성자에서 id 제거 및 관련 테스트 변경

* refactor: bio 필드를 User에서 ClubMember로 이전

* refactor: 동아리별 멤버 프사 추가 및 소셜 프사 제거

* refactor: 소셜 로그인 이름 미제공 시 이메일 앞자리로 대체 가입할 수 있게 수정

* refactor: ClubMember 프로필 이미지 검증 추가 및 대시보드에 동아리 프사 추가

* style: bio 기본값 제거 및 Swagger 예제 추가

* feat: 동아리 멤버 프로필 사진 삭제 API 추가

* test: 동아리 멤버 프로필 사진 삭제 UseCase 테스트 추가

* refactor: 동아리 활동 프로필 수정 API 통합

* refactor: 동아리 멤버 프로필 전체 가입 동아리에 일괄 적용

* docs: 주석 추가

* style: 린트 적용

* refactor: 코드 리뷰 반영

* feat: User 엔티티에 school 필드 추가

* refactor: 응답코드 번호에 맞게 수정

* refactor: 미사용 api 제거

* [WTH-201] 동아리 입력 출력값 검증 (#31)

* feat: 주사용 연락처 정보 추가

* refactor: 주사용 연락처 추가 반영 작업

* refactor: Dto 검증 추가 및 미사용 import 문 제거

* refactor: 미사용 import 제거 및 주석 추가

* refactor: 전화번호 global vo로 전환

* refactor: 주사용 연락처 enum 추가

* refactor: 전화번호 예시 "-" 제거

* docs: 주석 추가

* refactor: 주 연락처가 이메일인데, 이메일이 없는 경우 커스텀 예외 처리

* [WTH-204] LEAD 권한 이양 API 구현 (#33)

* feat: LEAD 권한 이양 API 구현

* feat: LEAD 권한 이양 관련 예외 추가

* refactor: 동시성 방어를 위한 락 추가

* docs: LEAD 관련 설명 추가

* test: 관련 테스트 추가

* docs: lint 설정

* refactor: 사전 검증 추가

* refactor: 커스텀 예외 검증으로 수정

* [WTH-196] 인증 정책 수정, 이미지 관련 필드 수정 (#32)

* refactor: JWT Token에서 Role 제거

* refactor: CurrentUserRole 관련 파일 제거

* refactor: Board 도메인 Role 제거 및 LEAD 접근 제어 수정

* refactor: Board 도메인 Role 제거

* refactor: user.role, profileimage 제거

* refactor: 작성자 정보를 매핑하기 위한 ClubMember 조회 메서드 추가

* refactor: User.Role -> MemberRole로 전환

* refactor: UserInfo 반환을 위한 매핑 로직 추가

* test: 테스트 일괄 반영

* chore: ADMIN 경로 검증에서 일반 인증 경로로 수정

* chore: 대체 예정 Deprecated 처리

* refactor: storageKey를 저장하는 방식으로 수정

* refactor: storageKey를 저장하는 방식으로 수정

* test: 이미지 관련 테스트 일괄 반영

* refactor: 미사용 dto 제거

* refactor: dto 길이 제한 추가

* refactor: 헬퍼 메서드 추가

* refactor: 불필요 코드 제거

* refactor: 중복 검증 제거

* refactor: isAdmin 메서드 제거

* [WTH-200] 동아리 정책 수정 (#34)

* refactor: ClubMember 정책 분리

* feat: 분리 정책 테스트 추가

* refactor: 분리 반영

* refactor: ClubCode 검증 로직 개선

* [WTH-202] 출석 정책 및 구조 정리 (#36)

* refactor: Session, Attendance private set 적용

* refactor: 출석 자동 마감 스케줄러를 매일 00시로 변경

* refactor: 미사용 API 제거

* refactor: AttendanceSummar.code 예시 6자리로 수정

* refactor: 출석 초기화 트리거 정리

* refactor: 출석 체크인, 마감 락 추가

* refactor: 배치 락 및 데드락 방지

* refactor: 세션 생성 시 출석 쿼리 최적화

* test: 배치 락 변경과 관련된 테스트 수정

* feat: 출석 마감 예외 클래스 추가

* style: 린트 적용

* fix: updateStatus 빈 리스트 예외 방지

* fix: 주석 제거

* refactor: DB 레벨 잠금 순서 보장

* fix: 주석으로 정렬 명시

* refactor: TODO 주석추가

* [WTH-205] 내 동아리 활동 정보 조회 api 추가 (#35)

* refactor: 컨트롤러 분리

* refactor: dto에 role, status 정보 추가

* refactor: 가입 동아리 여부, 반환 메서드 추가

* refactor: 조회 메서드 책임 이전

* refactor: 응답코드 수정

* refactor: 매퍼로 위임

* [WTH-206] 게시글 좋아요 api (#38)

* feat: 게시글 좋아요 도메인 추가

* feat: 게시글 좋아요 DTO 추가

* feat: 게시글 좋아요 토글 유스케이스 추가

* feat: 게시글 좋아요 토글 API 추가

* style: 린트 적용

* test: 관련 테스트 수정

* refactor: 게시글 좋아요 플래그 방식으로 변경

* refactor: 게시글 좋아요 응답 코드 단일화

* refactor: 게시글 좋아요 동시성 스냅샷 해결

* refactor: 비지니스 로직 이동

* refactor: 불필요한 락 제거

* refactor: 락 타임아웃 응답 코드 변경

* test: 게시글 좋아요 테스트 추가

* refactor: 응답 mapper로 위임

* refactor: 좋아요 응답 PostLikeResponse로 통합

* [WTH-207] 게시판 기본 기능 수정 (#37)

* feat: 게시글 작성 시 현재 기수 자동 반영

* feat: 전체 게시글 조회 API 추가

* feat: 게시판 순서 수정 기능 추가

* refactor: 게시판 순서 변경 시 중복 boardId 검증 추가

* feat: 게시판 생성 시 displayOrder 자동 설정

* refactor: 게시판 생성 시 reorder apply 블록 제거

* style: 린트 적용

* refactor: 게시판 이름 중복 확인 로직 추가

* test: 게시판 이름 중복 검증 테스트 추가

* feat: 동아리 생성 시 공지사항 게시판 자동 생성

* style: 린트 적용

* refactor: 공지사항 게시판 생성 시 순서 명시

* test: 게시판 재정렬 후 검증 테스트 추가

* feat: 게시판 정보 추가

* refactor: 게시판 관련 코드 정리

* style: 가독성 개선

* style: 린트 적용

* fix: board EntityGraph 누락 수정

* refactor: cardinal 조회 예외 방지

* docs: 게시판 순서 변경 요청 DTO 설명 추가

* refactor: 대시보드 최신글 권한별 필터링 적용

* refactor: 미사용 매서드 제거 및 테스트 보완

* refactor: 공지사항 순서 고정 및 가상 전체 게시판 추가

* test: 게시판 고정, 전체 관련 테스트 추가

* refactor: 어드민 게시판 postCount 및 가상 전체 게시판 추가

* refactor: 게시판 이름, 순서 변경 제한 및 삭제 시 displayOrder 재정렬

* fix: 미팅 테이블명 세션으로 수정

* refactor: 세션 조회 시 기수 검증 추가

* refactor: 전체 게시글 목록 조회 시 좋아요 추가

* refactor: 좋아요와 관련된 테스트 수정

* test: 기수 검증 테스트 추가

* [WTH-221] 액세스 토큰 리프레시 토큰 쿠키 반환 (#39)

* feat: 쿠키 관련 환경변수 설정

* feat: 쿠키 유틸 추가

* refactor: 쿠키에서 토큰 추출 로직 추가

* refactor: 쿠키에서 토큰 추출 로직 추가

* refactor: 쿠키를 반환하고 받도록 인증 관련 API 수정

* refactor: 약관 동의 시 가입 승인 & 토큰 발급하도록 로직 수정

* refactor: 토큰 타입 추가 (임시, 액세스)

* refactor: 인증 API 수정

* refactor: 가입 미완료시 예외처리

* test: 테스트 환경변수 추가

* feat: token type enum 추가

* feat: 동아리 활동 정보 API 추가

* refactor: public 겨로 저리

* feat: 유저 프로필 완성 여부 확인 API 추가

* [WTH-220] 동아리 이미지도 File을 타도록 수정 (#40)

* refactor: 동아리 이미지도 File을 타도록 수정

* refactor: lint 설정

* feat: 추방 멤버 복구 API 추가

* feat: 추방 멤버 복구 API 추가

* refactor: 페널티 타입 삭제

* refactor: 경로 파라미터로 수정

* refactor: UUID 예시 수정

* refactor: 학교 + 학번으로 중복 검사하도록 수정

* refactor: 페널티 타입 제거

* refactor: 스웨거 자물쇠 제거

* refactor: 스웨거 자물쇠 제거

* docs: 주석 추가

* refactor: 생성시간을 반환하도록 수정

* HOTFIX: cors 주소 추가

* HOTFIX: PATCH 매핑으로 수정

* [WTH-228] 공지사항 삭제 가능 (#41)

* fix: 공지사항 삭제 방어 로직 추가

* test: 공지 게시판 삭제 테스트 추가

* refactor: 게시글 생성 제한 추가

* fix: 게시글 작성 작성자의 현재 최신기수로 변경

* fix: countBy 반환 타입 Int → Long 수정

* test: ClubMemberCardinalTestFixture 추가

* style: 린트 적용

* refactor: 게시판 생성 동시성 이슈 해결

* fix: countBy 반환 타입 Int로 수정

* refactor: 공지 게시판 생성 방어 로직

* refactor: 모든 게시판으로 생성 개수 제한

* [WTH-229] 유저 기수 수정 (#43)

* refactor: 기수 필드 연도, 학기 제거

* refactor: 현재 진행 기수 지정 API로 변경

* refactor: 기수 정책 동아리로 범위 제한

* feat: 기수 수정 api 추가

* style: 린트 적용

* refactor: 기수 연도, 학기 제거

* test: club id 불일치 수정

* refactor: 기수 출석 카운트 복구 로직 추가

* refactor: 출석 복구 최신기수로 제한

* refactor: 출석 통계 및 패널티 리셋 수정

* test: 기수 테스트 픽스처 수정

* refactor: 페널티 복구 로직 추가

* [WTH-226] 세션 반복 생성 (#42)

* feat: 세션 반복 생성을 위한 entity, enums 추가

* feat: 세션 반복 생성을 위한 dto/예외 설정

* feat: 세션 그룹 저장소 및 세션 저장소 메서드 추가

* refactor: duration 기반으로 계산하도록 개선

* refactor: 세션 생성 유스케이스 분리 + 반복 생성 로직 추가

* refactor: 세션 업데이트 유스케이스 분리 + 반복 세션 수정 로직 추가

* feat: 반복 세션 삭제 유스케이스 추가

* refactor: 예외 처리시 data도 선택적으로 받을 수 있도록 수정

* refactor: 세션 관리 유스케이스 분리

* refactor: 세션그룹 삭제 메서드 추가

* refactor: 메퍼 메서드 추가 및 세션 도메인으로 이전

* feat: 세션 그룹으로 조회 메서드 추가

* refactor: 세션 그룹 별 조회하도록 로직 개선

* refactor: 세션 그룹 별 조회하도록 로직 개선

* refactor: 이번 주 세션 리스트로 반환하도록 수정

* refactor: duration 계산 메서드 분리

* test: 테스트 적용

* refactor: 이번 주 세션 리스트로 반환하도록 수정

* refactor: lint 설정

* feat: 세션 반복 관련 API 가

* refactor: UI에 맞게 API 수정

* refactor: 세션 도메인으로 이전

* refactor: 응답 DTO 개선

* refactor: PATCH 스럽도록 수정

* refactor: 세션 id로 매핑 수정

* refactor: import 문 수정

* refactor: 엣지케이스 관련 주석 보강

* refactor: 제약조건 추가

* refactor: 개별 삭제 동시성 문제 보강

* refactor: 개별 삭제 동시성 문제 보강

* refactor: totalCount를 저장하지 않고, 조회시 계산해 반환하도록 수정

* refactor: dto 설명 수정

* refactor: 세션 그룹 업데이트 및 설명 포맷 개선

* refactor: 락 조회시 정렬 추가

* refactor: 장소, 설명 선택 처리

* refactor: QueryHints 추가

* refactor: id 변경

* refactor: fixture 파라미터 변경

* [WTH-236] 랜딩 문의하기 api 구현 (#45)

* chore: Notion, Slack 설정 추가

* feat: 문의 port 인터페이스 추가

* feet: 문의하기 로직 구현

* feet: Notion, Slack Adapter 구현

* feet: 문의하기 엔트포인트 추가

* refactor: 응답코드 수정

* refactor: 문의하기 비동기로 변경

* chore: AsyncConfig 추가

* [WTH-237] 애플 로그인 수정 및 로그인 시 유저 정보 반환 (#44)

* fix: 애플 로그인 수정

* refactor: 로그인 시 유저 이름 반환

* refactor: 주석 및 파일명 변경

* refactor: 파싱 로직 이전

* refactor: 컨트롤러 정리

* test: 의존성 추가

* HOTFIX: CORS 경로 변경

* fix: 도메인 설정이 변경된 경우 바로 반영 되도록 로직 수정 (#46)

* [WTH-251] post comment 작성자 타입을 club member로 변경 (#48)

* refactor: Post/Comment user 필드 clubMember로 변경

* refactor: clubMember로 fetch join

* refactor: userReader 제거

* refactor: Mapper authorMember 제거

* refactor: Service buildMemberMap 제거

* refactor: Post/Comment fixture user를 clubMember로 변경

* test: 관련 test 수정

* test: 관련 test 수정

* [WTH-247] 유저 필드 nullable 처리 (#47)

* fix: 선택 필드 nullable 및 PATCH 전략에 맞게 수정

* refactor: 초기 유저 정보 설정시 프로필 완성 여부를 검증하도록 수정

* refactor: 파일 업데이트시 하드 딜리트 시켜 replace가 정상적으로 되도록 수정

* refactor: isNew 필드 추가

* refactor: 파일 목록 반환

* test: 테스트 반영

* refactor: 업데이트시 검증 보강

* refactor: 업데이트시 검증 보강

* refactor: 충돌해결

* HOTIFX: 랜딩 CORS 추가

* [WTH-252] 출석 요약 조회 api에 세션 id가 없어 출석이 불가능한 문제 (#49)

* refactor: 세션 id 반환

* refactor: 경로 매개변수로 변경

* test: test 반영

* [WTH-260] 동아리 생성시 club id 동아리 이름 즉시 반환 (#50)

* feat: 동아리중복 검증 추가

* feat: 동아리중복 검증 추가

* refactor: 동아리 생성 응답 반환

* refactor: 테스트 반영

* [WTH-278] 파일 수정 오류 해결 (#52)

* fix: 삭제 즉시 적용

* test: test mockk 추가

* [WTH-309] 문의 내용 NotBlank 검증 제거 (#53)

* refactor: 문의 내용 선택 입력으로 변경

* [WTH-282] 댓글 좋아요 백엔드 qa (#54)

* refactor: 댓글 반환 시간 작성 시간으로 변경

* refactor: 좋아요 토글을 like/unlike로 분리

* refactor: 공통 검증 로직 메서드로 추출

* refactor: 응답 예시 추가

* [WTH-294] qr 만료시간 실시간 전달 (#51)

* feat: SSE 연결 관리를 위한 SseEmitterStore 추가

* feat: SSE port 구현

* feat: SSE adapter 구현

* feat: QR 생성 시 SSE로 출석 가능한 시간 전송

* feat: 출석 SSE 구독 엔드포인트 추가

* test: 관련 테스트 수정

* test: SseEmitterStore 단위 테스트 추가

* refactor: SsePort를 Broadcast, Subscribe로 분리

* feat: SSE Subscribe UseCase 추가

* refactor: SseEmitterStore 동시성 처리

* test: 관련 테스트 추가 및 수정

* test: 동시성 테스트 무한 대기 방지

* test: 동시성 테스트 수정

* refactor: @synchronized 병목 해소

* refactor: event로 패키지 변경

* style: 린트 적용

* [WTH-310] 대시보드 최근 게시글에 좋아요 여부 필드 추가 (#55)

* refactor: 대시보드 최근 게시글 응답에 isLiked 필드 추가

* test: isLiked 테스트 추가

* [WTH-105] Weeth Server 모니터링 설정 (#56)

* feat: 프로메테우스 API Overview 추가

* feat: 프로메테우스 외부/내부 인프라 대시보드

* feat: 로그 MDC 설정 추가

* feat: 관측 설정 추가

* refactor: redisConnectionFactory 주입 방식으로 수정

* refactor: 도커 네트워크 접근 허용

* refactor: 로그백 설정 수정

* refactor: 환경 설정

* feat: 로컬 모니터링 완성

* feat: 로컬 모니터링 완성

* refactor: 도커 파일 Java Agent 설정

* refactor: 도커 컴포즈 Java Agent 설정

* feat: 개발 서버 모니터링 설정 추가

* feat: 개발 서버 도커 컴포즈 추가

* feat: 개발 서버 배포 스크립트 추가

* feat: 운영 서버 모니터링 설정 추가

* feat: 운영 서버 도커 컴포즈 추가

* feat: 운영 서버 배포 스크립트 추가

* feat: 개발/운영 깃액션 워크 플로우 추가

* context: 컨텍스트 업데이트

* refactor: 도커 컴포즈 오타 수정

* refactor: 리버스 프록시 엔드포인트 명시적 제한

* refactor: 로컬 환경변수 설정 추가

* refactor: 루트 경로 차단 추가

* refactor: 모니터링 환경변수 추가

* refactor: 디렉토리 오타 수정

* refactor: 환경변수 수정

* refactor: 로키 설정 수정

* refactor: 대기시간 증강

* HOTFIX: 어드민 유저 이름 환경 변수 설정

* HOTFIX: 모니터링 핫픽스 추가 (Log 수집 안됨, Lettuce 수집 안됨 해결)

* HOTFIX: 빌드 오류 해소

* HOTFIX: 불필요 이미지 정리 코드 추가

* [WTH-327] 어드민 게시판 관리 수정 (#57)

* refactor: 게시판 이름 중복 API 추가 및 설명 추가

* refactor: 기본 설정 게시판 설명 추가

* fix: DTO 추가

* [WTH-326] 게시판 관련 API에 boardId 필드 추가 (#58)

* fix: 게시판 관련 응답에 게시판 ID 추가

* fix: 게시판 관련 응답에 게시판 ID 추가

* refactor: 게시판 관련 요청에 게시판 ID 추가

* test: 관련 테스트 수정

* refactor: 좋아요 응답 DTO를 PostLikeActionResponse로 분리, 게시글 수정 boardId 추가

* refactor: 게시판 글자수 20자로 제한

* [WTH-350] 게시판 권한 추가 (#60)

* feat: 게시판 설정에 따른 권한 표시

* refactor: 댓글 허용에 따른 권한 확인

* [WTH-347] sse is empty 처리 (#59)

* fix: SSE emitter 교체/삭제 시 메모리 누수 방지

* feat: SSE 구독 시 QR 상태 즉시 전송 추가

* feat: SSE 구독 시 QR 상태 즉시 전송 추가

* feat: QR 만료 시 SSE로 qr-close 이벤트 broadcast

* refactor: 코드 리뷰 반영

* [WTH-349] 모니터링 인프라 개선 (#61)

* [WTH-356] 리더 추방이 불가능하도록 수정 (#62)

* refactor: 리더 추방이 불가능하도록 수정

* test: 테스트 수정

* [WTH] 오늘의 일정 단건 응답으로 수정 (#64)

* refactor: 오늘의 일정 응답 1개면 바로 반환, 여러개면 현재 시간 이후에 가까운 1개로 반환하게 수정

* test: 관련 테스트 수정

* [WTH-358] 추방된 경우 동아리 리스트 미표기 (#65)

* fix: 내 동아리 조회 시 활성화된 동아리만 조회

* refactor: mvp 후 추방된 상태까지 반환하도록 설정

* [WTH-361] 운영서버 모니터링 설정 (#66)

* refactor: 운영 환경 템포 제거

* refactor: 운영 CORS 추가

---------

Co-authored-by: 전수현 <128474444+soo0711@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능 추가 🔨 Refactor 코드 구조 개선 및 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants