Skip to content

๐Ÿ› Fix: users - club ์—ฐ๊ด€๊ด€๊ณ„ ์˜ค๋ฅ˜ ์ˆ˜์ •#48

Merged
imjuyongp merged 3 commits intodevelopfrom
feat/notification
Feb 4, 2026
Merged

๐Ÿ› Fix: users - club ์—ฐ๊ด€๊ด€๊ณ„ ์˜ค๋ฅ˜ ์ˆ˜์ •#48
imjuyongp merged 3 commits intodevelopfrom
feat/notification

Conversation

@imjuyongp
Copy link
Copy Markdown
Member

@imjuyongp imjuyongp commented Feb 4, 2026

#๏ธโƒฃ Issue Number

๐Ÿ“ ์š”์•ฝ(Summary)

๋ฌธ์ œ์ 

  1. leader ์ค‘๋ณต ๊ด€๋ฆฌ: Club.leader ํ•„๋“œ์™€ ClubMember.role=LEADER ๋‘ ๊ณณ์—์„œ ๋™ํ˜ธํšŒ์žฅ ๊ด€๋ฆฌ
  2. ๋ณตํ•ฉ ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด ๋ˆ„๋ฝ: ๊ฐ™์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ๋™ํ˜ธํšŒ์— ์ค‘๋ณต ๊ฐ€์ž… ๊ฐ€๋Šฅ
  3. User์— Club ๊ด€๊ณ„ ๋ˆ„๋ฝ: ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ž…ํ•œ ๋™ํ˜ธํšŒ ์กฐํšŒ ๋ถˆํŽธ
image

DB ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ

-- clubs ํ…Œ์ด๋ธ”์—์„œ leader_id ์ปฌ๋Ÿผ ์ œ๊ฑฐ๋จ
ALTER TABLE clubs DROP COLUMN leader_id;

-- club_members ํ…Œ์ด๋ธ”์— ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€๋จ
ALTER TABLE club_members ADD UNIQUE (club_id, user_id);

๐Ÿ› ๏ธ PR ์œ ํ˜•

์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”?

  • ๋ฒ„๊ทธ ์ˆ˜์ •
  • ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

๐Ÿ“ธ์Šคํฌ๋ฆฐ์ƒท (์„ ํƒ)

๐Ÿ’ฌ ๊ณต์œ ์‚ฌํ•ญ to ๋ฆฌ๋ทฐ์–ด

  • erd ์ˆ˜์ •์‚ฌํ•ญ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… PR Checklist

PR์ด ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.(๋ฒ„๊ทธ ์ˆ˜์ •/๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ).

Summary by CodeRabbit

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ

  • ๊ฐœ์„  ์‚ฌํ•ญ
    • ํด๋Ÿฝ ๋ฆฌ๋” ์ฐธ์กฐ ๋ฐฉ์‹์ด ๋ณ€๊ฒฝ๋˜์–ด ๋ฆฌ๋” ํ™•์ธ๊ณผ ๋ฉค๋ฒ„ ๊ด€๋ฆฌ๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž์˜ ํด๋Ÿฝ ๊ฐ€์ž… ๋‚ด์—ญ ์ถ”์  ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ ๊ธฐ๋Šฅ
    • ํด๋Ÿฝ ๊ฐ€์ž… ์š”์ฒญ์„ ์ƒ์„ฑยท๊ด€๋ฆฌํ•˜๋Š” ์š”์ฒญ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์•Œ๋ฆผ(๊ฐ€์ž… ์š”์ฒญ, ์Šน์ธ/๊ฑฐ์ ˆ, ์ฑ„ํŒ…, ๋Œ“๊ธ€ ๋“ฑ)๊ณผ ์ฝ์Œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 4, 2026

Caution

Review failed

The pull request is closed.

Walkthrough

Club ์—”ํ‹ฐํ‹ฐ์˜ ๋ฆฌ๋” ๊ด€๊ณ„๋ฅผ User ์ง์ ‘ ์ฐธ์กฐ์—์„œ ClubMember๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘ ์ ‘๊ทผ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ , Club ์ƒ์„ฑ API ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ, User์— clubMemberships ์ถ”๊ฐ€, JoinClubRequest ๋ฐ Notification ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€๊ฐ€ ํฌํ•จ๋œ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค.

Changes

Cohort / File(s) Summary
Club ๋ฆฌ๋” ๊ด€๊ณ„ ๋ฆฌํŒฉํ† ๋ง
src/main/java/com/be/sportizebe/domain/club/entity/Club.java
private User leader ํ•„๋“œ ์ œ๊ฑฐ. getLeaderMember(), getLeader(), isLeader(Long userId) ํ—ฌํผ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€.
Club ์ƒ์„ฑ ์š”์ฒญ API ๋ณ€๊ฒฝ
src/main/java/com/be/sportizebe/domain/club/dto/request/ClubCreateRequest.java
toEntity(User, String) โ†’ toEntity(String)๋กœ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ. User import ๋ฐ ๋นŒ๋”์—์„œ ๋ฆฌ๋” ์„ค์ • ์ œ๊ฑฐ.
Club ์„œ๋น„์Šค ์ ์šฉ
src/main/java/com/be/sportizebe/domain/club/service/ClubServiceImpl.java
๋ณ€๊ฒฝ๋œ toEntity() ํ˜ธ์ถœ ๋ฐ˜์˜. ์ƒ์„ฑ ํ๋ฆ„์—์„œ ๋ฆฌ๋”๋ฅผ ClubMember๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง ๋ช…์‹œํ™”. ๋ฆฌ๋” ๊ฒ€์ฆ์„ club.isLeader(userId)๋กœ ๋ณ€๊ฒฝ.
User ์—”ํ‹ฐํ‹ฐ ํ™•์žฅ
src/main/java/com/be/sportizebe/domain/user/entity/User.java
@OneToMany(mappedBy = "user") clubMemberships ํ•„๋“œ ์ถ”๊ฐ€ (List<ClubMember>), ๋นŒ๋” ๊ธฐ๋ณธ๊ฐ’ ์ดˆ๊ธฐํ™”.
Join ์š”์ฒญ ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€
src/main/java/com/be/sportizebe/domain/notification/entity/JoinClubRequest.java
JoinClubRequest ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€(์œ ๋‹ˆํฌ ์ œ์•ฝ user_id+club_id). ์ƒํƒœ enum(PENDING, ACCEPTED, REJECTED) ๋ฐ accept(), reject() ๋ฉ”์„œ๋“œ ํฌํ•จ.
Notification ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€
src/main/java/com/be/sportizebe/domain/notification/entity/Notification.java
Notification ์—”ํ‹ฐํ‹ฐ ์ถ”๊ฐ€(์ˆ˜์‹ ์ž, ํƒ€์ž… enum, ๋ฉ”์‹œ์ง€, isRead, joinClubRequest, targetId, markAsRead()). ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค ์ถ”๊ฐ€.

Sequence Diagram(s)

(์ƒ์„ฑ๋œ ๋ณ€๊ฒฝ์€ ์—”ํ„ฐํ‹ฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง์— ์ง‘์ค‘๋˜์–ด ๋ช…ํ™•ํ•œ ๋‹ค์ค‘ ์ปดํฌ๋„ŒํŠธ ์ˆœ์ฐจ ํ๋ฆ„์ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์•„ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.)

Estimated code review effort

๐ŸŽฏ 4 (Complex) | โฑ๏ธ ~45 minutes

Possibly related PRs

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
Description Check โœ… Passed Check skipped - CodeRabbitโ€™s high-level summary is enabled.
Title check โœ… Passed PR ์ œ๋ชฉ์€ ์‚ฌ์šฉ์ž-ํด๋Ÿฝ ๊ด€๊ณ„ ์˜ค๋ฅ˜ ์ˆ˜์ •์ด๋ผ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

โœ๏ธ Tip: You can configure your own custom pre-merge checks in the settings.

โœจ Finishing touches
  • ๐Ÿ“ Generate docstrings
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/notification

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant