Skip to content

๐Ÿ› ์ตœ๊ทผ 5๊ฐœ ์ด์Šˆ ์ˆ˜์ • (#405-#409)#411

Merged
manNomi merged 8 commits into
mainfrom
fix/issues-405-409
Feb 14, 2026
Merged

๐Ÿ› ์ตœ๊ทผ 5๊ฐœ ์ด์Šˆ ์ˆ˜์ • (#405-#409)#411
manNomi merged 8 commits into
mainfrom
fix/issues-405-409

Conversation

@manNomi

@manNomi manNomi commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

์š”์•ฝ

์ตœ๊ทผ ์ œ๊ธฐ๋œ 5๊ฐœ์˜ ๋ฒ„๊ทธ ์ด์Šˆ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ , ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ๋‚ด์—ญ

โœจ #409: ๋ฉ˜ํ‹ฐ ์‹ ์ฒญํ•˜๊ธฐ โ†’ ๋ฉ˜ํ† ๋ง ์‹ ์ฒญํ•˜๊ธฐ ํ…์ŠคํŠธ ๋ณ€๊ฒฝ

  • ๋ฉ˜ํ†  ์นด๋“œ์˜ ์‹ ์ฒญ ๋ฒ„ํŠผ ํ…์ŠคํŠธ๋ฅผ "๋ฉ˜ํ‹ฐ ์‹ ์ฒญํ•˜๊ธฐ"์—์„œ "๋ฉ˜ํ† ๋ง ์‹ ์ฒญํ•˜๊ธฐ"๋กœ ๋ณ€๊ฒฝ
  • ํŒŒ์ผ: apps/web/src/components/mentor/MentorCard/index.tsx

๐ŸŽจ #408: ํ•ฉ๊ฒฉ ๋ ˆ์‹œํ”ผ ์ €์žฅ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ํ…์ŠคํŠธ ์ƒ‰์ƒ ๊ฐœ์„ 

  • ํ•ฉ๊ฒฉ ๋ ˆ์‹œํ”ผ ์ดˆ๊ธฐ๊ฐ’์ด ๋นˆ ๋ฌธ์ž์—ด๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์ €์žฅ๋˜์ง€ ์•Š๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •
  • passTip ํ•„๋“œ๋ฅผ myMentorProfile์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋กœ๋“œํ•˜๋„๋ก ์ˆ˜์ •
  • ํ…์ŠคํŠธ ์ž…๋ ฅ ์‹œ ์ƒ‰์ƒ์ด ํšŒ์ƒ‰์—์„œ ๊ฒ€์ •์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋„๋ก ๊ฐœ์„ 
  • ํŒŒ์ผ:
    • apps/web/src/types/mentor.ts
    • apps/web/src/app/mentor/modify/_ui/ModifyContent/_hooks/useModifyHookForm.ts
    • apps/web/src/app/mentor/modify/_ui/ModifyContent/index.tsx

๐Ÿ’พ #407: ๋ฉ˜ํ†  ์•„ํ‹ฐํด ์ €์žฅ ๊ฐœ์„ 

  • ์•„ํ‹ฐํด ์ €์žฅ ์‹œ mutation ์„ฑ๊ณต ํ›„์—๋งŒ ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๋„๋ก ์ˆ˜์ •
  • URL ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์Šคํ‚ค๋งˆ ๊ฐœ์„  (z.union ์‚ฌ์šฉ)
  • ์ €์žฅ ์‹คํŒจ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ 
  • ํŒŒ์ผ:
    • apps/web/src/components/mentor/ArticleBottomSheetModal/hooks/useArticleSchema.ts
    • apps/web/src/components/mentor/ArticleBottomSheetModal/lib/schema.ts

๐Ÿ’„ #406: ๋ฉ˜ํ†  ๋Œ€๊ธฐ ํŽ˜์ด์ง€ UI ๊ฐœ์„ 

  • ๊ณผ๋„ํ•œ ํŒจ๋”ฉ ์ œ๊ฑฐ (p-4 โ†’ ์ œ๊ฑฐ)
  • ํ…์ŠคํŠธ ํ‘œํ˜„ ๋ณ€๊ฒฝ: "{nickname} ๋‹˜" โ†’ "{nickname} ๋ฉ˜ํ† "
  • ํŒŒ์ผ: apps/web/src/app/mentor/waiting/_ui/WaitingContent/index.tsx

๐Ÿ”„ #405: ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€ ISR Revalidate ์ถ”๊ฐ€

  • ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ ์™ธ์— ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ์‹œ์—๋„ ISR revalidate ํŠธ๋ฆฌ๊ฑฐ ์ถ”๊ฐ€
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€๊ฐ€ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ๊ฐœ์„ 
  • ํŒŒ์ผ:
    • apps/web/src/apis/community/patchUpdatePost.ts
    • apps/web/src/apis/community/deletePost.ts
    • apps/web/src/app/community/[boardCode]/[postId]/modify/PostModifyForm.tsx
    • apps/web/src/app/community/[boardCode]/[postId]/KebabMenu.tsx

์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ์‚ฌํ•ญ

๐Ÿ“‹ ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ฐœ์„ 

  • ์ž…๋ ฅ ํ•„๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋กœ์ง ๊ฐ•ํ™”
  • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ช…ํ™•ํ™”

๐Ÿ”˜ ์งˆ๋ฌธ ํ† ๊ธ€ ๊ธฐ๋Šฅ ๊ฐœ์„ 

  • ํ† ๊ธ€ ์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™”
  • ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ฐœ์„ 

โณ ๋Œ€๊ธฐ UI ํ…์ŠคํŠธ ๋ฐ ์นด์šดํŠธ ๊ฐœ์„ 

  • ๋Œ€๊ธฐ ์ƒํƒœ ๋ฉ”์‹œ์ง€ ๋ช…ํ™•ํ™”
  • ์นด์šดํŠธ ํ‘œ์‹œ ์ •ํ™•์„ฑ ํ–ฅ์ƒ

๐Ÿ–ฑ๏ธ ์ž…๋ ฅ ์ค‘ ์™ธ๋ถ€ ํด๋ฆญ ์ฒ˜๋ฆฌ

  • ์ž…๋ ฅ ํ•„๋“œ ํฌ์ปค์Šค ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ์„ 
  • ์™ธ๋ถ€ ํด๋ฆญ ์‹œ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€

๐Ÿ“ maxLength ์†์„ฑ ์ถ”๊ฐ€

  • ์ž…๋ ฅ ํ•„๋“œ์— ์ ์ ˆํ•œ ์ตœ๋Œ€ ๊ธธ์ด ์ œํ•œ ์ ์šฉ
  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฒ”์œ„ ๋ช…ํ™•ํ™”

๐ŸŽฃ Hook ๋ฐ˜ํ™˜๊ฐ’ ์ตœ์ ํ™”

  • ์ปค์Šคํ…€ ํ›…์˜ ๋ฐ˜ํ™˜๊ฐ’ ๊ตฌ์กฐ ๊ฐœ์„ 
  • ๋ถˆํ•„์š”ํ•œ ์ƒํƒœ ์ œ๊ฑฐ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๊ฒ€์ฆ

  • โœ… ํƒ€์ž… ์ฒดํฌ ํ†ต๊ณผ
  • โœ… ๊ฐ ์ด์Šˆ๋ณ„๋กœ ์›์ž์  ์ปค๋ฐ‹ ์ƒ์„ฑ
  • โœ… ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ด๋ชจ์ง€ ๊ทœ์น™ ์ค€์ˆ˜
  • โœ… ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ์™„๋ฃŒ

๊ด€๋ จ ์ด์Šˆ

Closes #405, Closes #406, Closes #407, Closes #408, Closes #409

@vercel

vercel Bot commented Feb 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
solid-connect-web-admin Error Error Feb 14, 2026 9:34am
solid-connection-web Ready Ready Preview, Comment Feb 14, 2026 9:34am

@coderabbitai

coderabbitai Bot commented Feb 2, 2026

Copy link
Copy Markdown

Walkthrough

์ด PR์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ๋ฉ˜ํ†  ๊ธฐ๋Šฅ์— ๊ฑธ์นœ ๋‹ค์ธต์  ๊ฐœ์„ ์‚ฌํ•ญ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฒŒ์‹œ๋ฌผ ์‚ญ์ œ ๋ฐ ์ˆ˜์ • ์‹œ ISR ๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ด์…˜ ์ถ”๊ฐ€

    • deletePost์™€ patchUpdatePost API๊ฐ€ ์ธ์ฆ ํ† ํฐ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฒŒ์‹œํŒ ํŽ˜์ด์ง€ ISR ๋ฆฌ๋ฐธ๋ฆฌ๋ฐ์ด์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ญ์ œ/์ˆ˜์ • ํ›„ ๋ณด๋“œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง€ ์žฌ๊ฒ€์ฆ์„ ์กฐ๊ฑด๋ถ€๋กœ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์‚ญ์ œ ์•ก์…˜ ํŽ˜์ด๋กœ๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

    • deletePost ๋ฎคํ…Œ์ด์…˜์ด ๋‹จ์ˆœ postId ๋Œ€์‹  { postId, boardCode } ๊ฐ์ฒด๋ฅผ ๋ฐ›๋„๋ก ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ฉ˜ํ†  ๊ธฐ๋Šฅ ๊ด€๋ จ UI ๋ฐ ํƒ€์ž… ๊ฐœ์„ 

    • MentorCardPreview ํƒ€์ž…์— ์„ ํƒ์  passTip ํ•„๋“œ ์ถ”๊ฐ€, ๋ฉ˜ํ†  ์‹ ์ฒญ ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ˆ˜์ •, ๋Œ€๊ธฐ ์ค‘ ๋ฉ”์‹œ์ง€ ํ‘œํ˜„ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  4. ์–‘์‹ ๋ฐ ๊ฒ€์ฆ ๊ฐ•ํ™”

    • ๊ฒŒ์‹œ๋ฌผ ์ˆ˜์ • ์–‘์‹์— ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€, ์•„ํ‹ฐํด ์Šคํ‚ค๋งˆ URL ํ•„๋“œ ์žฌ๊ตฌ์„ฑ, useCallback์„ ํ†ตํ•œ ํ•จ์ˆ˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์•ˆ์ •ํ™”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Estimated code review effort

๐ŸŽฏ 3 (Moderate) | โฑ๏ธ ~25 minutes

Suggested reviewers

  • wibaek
  • enunsnv
  • khwww
๐Ÿšฅ Pre-merge checks | โœ… 5 | โŒ 1
โŒ Failed checks (1 warning)
Check name Status Explanation Resolution
Merge Conflict Detection โš ๏ธ Warning โŒ Merge conflicts detected (39 files):

โš”๏ธ apps/web/biome.json (content)
โš”๏ธ apps/web/src/apis/Admin/api.ts (content)
โš”๏ธ apps/web/src/apis/Admin/getGpaList.ts (content)
โš”๏ธ apps/web/src/apis/Admin/getLanguageTestList.ts (content)
โš”๏ธ apps/web/src/apis/applications/api.ts (content)
โš”๏ธ apps/web/src/apis/applications/getCompetitors.ts (content)
โš”๏ธ apps/web/src/apis/community/api.ts (content)
โš”๏ธ apps/web/src/apis/community/deletePost.ts (content)
โš”๏ธ apps/web/src/apis/community/getBoard.ts (content)
โš”๏ธ apps/web/src/apis/community/getBoardList.ts (content)
โš”๏ธ apps/web/src/apis/community/patchUpdatePost.ts (content)
โš”๏ธ apps/web/src/apis/kakao-api/api.ts (content)
โš”๏ธ apps/web/src/apis/kakao-api/getKakaoInfo.ts (content)
โš”๏ธ apps/web/src/apis/kakao-api/getKakaoUserIds.ts (content)
โš”๏ธ apps/web/src/apis/mentor/api.ts (content)
โš”๏ธ apps/web/src/apis/mentor/getMatchedMentors.ts (content)
โš”๏ธ apps/web/src/apis/universities/api.ts (content)
โš”๏ธ apps/web/src/apis/universities/getByRegionCountry.ts (content)
โš”๏ธ apps/web/src/apis/universities/getIsWish.ts (content)
โš”๏ธ apps/web/src/apis/universities/getSearchFilter.ts (content)
โš”๏ธ apps/web/src/apis/users/api.ts (content)
โš”๏ธ apps/web/src/apis/users/getBlockedUsers.ts (content)
โš”๏ธ apps/web/src/apis/users/getNicknameExists.ts (content)
โš”๏ธ apps/web/src/app/community/[boardCode]/[postId]/KebabMenu.tsx (content)
โš”๏ธ apps/web/src/app/community/[boardCode]/[postId]/modify/PostModifyForm.tsx (content)
โš”๏ธ apps/web/src/app/layout.tsx (content)
โš”๏ธ apps/web/src/app/mentor/modify/_ui/ModifyContent/_hooks/useModifyHookForm.ts (content)
โš”๏ธ apps/web/src/app/mentor/modify/_ui/ModifyContent/index.tsx (content)
โš”๏ธ apps/web/src/app/mentor/waiting/_ui/WaitingContent/index.tsx (content)
โš”๏ธ apps/web/src/app/my/apply-mentor/_components/UniversityScreen/index.tsx (content)
โš”๏ธ apps/web/src/app/my/apply-mentor/_lib/schema.ts (content)
โš”๏ธ apps/web/src/app/my/apply-mentor/page.tsx (content)
โš”๏ธ apps/web/src/app/university/application/ScorePageContent.tsx (content)
โš”๏ธ apps/web/src/components/mentor/ArticleBottomSheetModal/hooks/useArticleSchema.ts (content)
โš”๏ธ apps/web/src/components/mentor/ArticleBottomSheetModal/lib/schema.ts (content)
โš”๏ธ apps/web/src/components/mentor/MentorCard/index.tsx (content)
โš”๏ธ apps/web/src/components/ui/UniverSityCard/index.tsx (content)
โš”๏ธ apps/web/src/styles/globals.css (content)
โš”๏ธ apps/web/src/types/mentor.ts (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
โœ… Passed checks (5 passed)
Check name Status Explanation
Title check โœ… Passed PR ์ œ๋ชฉ์ด 5๊ฐœ ์ด์Šˆ ์ˆ˜์ •์ด๋ผ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์š”์•ฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Description check โœ… Passed PR ์„ค๋ช…์ด ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋ฉฐ ๊ฐ ์ด์Šˆ๋ณ„ ์ˆ˜์ • ๋‚ด์—ญ๊ณผ ํŒŒ์ผ์„ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Linked Issues check โœ… Passed ๋ชจ๋“  5๊ฐœ ์ด์Šˆ(#405~#409)์— ๋Œ€ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.
Out of Scope Changes check โœ… Passed ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด 5๊ฐœ ์ด์Šˆ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Docstring Coverage โœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

โœ๏ธ 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 fix/issues-405-409
โš”๏ธ Resolve merge conflicts (beta)
  • Auto-commit resolved conflicts to branch fix/issues-405-409
  • Create stacked PR with resolved conflicts
  • Post resolved changes as copyable diffs in a comment

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

๐Ÿค– Fix all issues with AI agents
In `@apps/web/src/apis/community/deletePost.ts`:
- Around line 20-34: The revalidation call in revalidateCommunityPage currently
awaits fetch but doesn't check HTTP status, so 4xx/5xx responses silently
succeed; update revalidateCommunityPage to capture the fetch response, check
response.ok, and if false log or throw an error including response.status and
response.statusText (or response.text()) so failed ISR revalidations are
visible; ensure this handling occurs after the fetch and before returning from
revalidateCommunityPage.

In `@apps/web/src/apis/community/patchUpdatePost.ts`:
- Around line 19-33: The fetch in revalidateCommunityPage currently treats all
HTTP responses as success; update the function to check the Response.ok after
the await fetch (in revalidateCommunityPage) and handle non-ok responses by
throwing or logging a descriptive error (include response.status and response
text) so the existing try/catch can surface failures; ensure the
Authorization/header/body logic remains unchanged and that failures end up
logged or rethrown for callers to observe.
๐Ÿงน Nitpick comments (2)
apps/web/src/components/mentor/ArticleBottomSheetModal/hooks/useArticleSchema.ts (2)

109-113: 2. handleModalClose์—์„œ์˜ ์ค‘๋ณต ์ดˆ๊ธฐํ™”

handleModalClose ํ•จ์ˆ˜์—์„œ reset()๊ณผ setImagePreview(null)์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Line 66-69์˜ useEffect๊ฐ€ isOpen์ด false๊ฐ€ ๋  ๋•Œ ์ด๋ฏธ ๋™์ผํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

handleClose()๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ isOpen์„ false๋กœ ์„ค์ •ํ•œ๋‹ค๋ฉด, ์—ฌ๊ธฐ์„œ์˜ reset()๊ณผ setImagePreview(null) ํ˜ธ์ถœ์€ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ •๋ฆฌ๋ฅผ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.

โ™ป๏ธ ๊ฐ„์†Œํ™” ์ œ์•ˆ
  const handleModalClose = () => {
    handleClose();
-   reset();
-   setImagePreview(null);
  };

88-106: โœ… ์ข‹์€ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ mutation ํ›…์— ์ž˜ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

usePostAddArticle๊ณผ usePutModifyArticle ํ›…์„ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, ๋‘ ํ›… ๋ชจ๋‘ onError ์ฝœ๋ฐฑ์—์„œ toast๋ฅผ ํ†ตํ•œ ์—๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ์ด๋ฏธ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Mutation ์„ฑ๊ณต ์‹œ์—๋งŒ ๋ชจ๋‹ฌ์„ ๋‹ซ๊ณ  ํผ์„ ๋ฆฌ์…‹ํ•˜๋„๋ก ๊ฐœ์„ ํ•˜์‹  ๋ถ€๋ถ„๋„ PR ๋ชฉํ‘œ์— ๋งž๊ฒŒ ์ž˜ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ํ•˜๋‚˜์˜ ์ตœ์ ํ™” ์ ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค:

  1. ์ค‘๋ณต reset() ์ œ๊ฑฐ ์ œ์•ˆ
    • onSuccess์—์„œ reset() ํ˜ธ์ถœ ํ›„ handleClose()๊ฐ€ isOpen์„ false๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด, useEffect (line 52-69)๊ฐ€ ๋‹ค์‹œ reset()์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์ž‘์—๋Š” ๋ฌธ์ œ์—†์œผ๋‚˜, useEffect๊ฐ€ ์ด๋ฏธ ๋ชจ๋‹ฌ ๋‹ซํž ๋•Œ ์ƒํƒœ ์ดˆ๊ธฐํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต์ž…๋‹ˆ๋‹ค.
โ™ป๏ธ ๊ฐœ์„  ๋ฐฉ์•ˆ
      putModifyArticle(
        { body: data, articleId },
        {
          onSuccess: () => {
            handleClose();
-           reset();
          },
        }
      );
    } else {
      postAddArticle(data, {
        onSuccess: () => {
          handleClose();
-         reset();
        },
      });
    }

Comment on lines +20 to +34
const revalidateCommunityPage = async (boardCode: string, accessToken: string) => {
try {
if (!accessToken) {
console.warn("Revalidation skipped: No access token available");
return;
}

await fetch("/api/revalidate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ boardCode }),
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸ  Major

ISR revalidate๊ฐ€ โ€˜์กฐ์šฉํžˆ ์‹คํŒจโ€™ํ•  ์ˆ˜ ์žˆ์–ด์š”.
fetch๋Š” 4xx/5xx์—์„œ๋„ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š์•„์„œ, ํ˜„์žฌ๋Š” ์‹คํŒจ๊ฐ€ ๋กœ๊ทธ ์—†์ด ํ†ต๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต ok ์ฒดํฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์„ธ์š”.

๐Ÿ”ง ์ˆ˜์ • ์ œ์•ˆ
-    await fetch("/api/revalidate", {
+    const response = await fetch("/api/revalidate", {
       method: "POST",
       headers: {
         "Content-Type": "application/json",
         Authorization: `Bearer ${accessToken}`,
       },
       body: JSON.stringify({ boardCode }),
     });
+    if (!response.ok) {
+      throw new Error(`Revalidate failed: ${response.status}`);
+    }
๐Ÿค– Prompt for AI Agents
In `@apps/web/src/apis/community/deletePost.ts` around lines 20 - 34, The
revalidation call in revalidateCommunityPage currently awaits fetch but doesn't
check HTTP status, so 4xx/5xx responses silently succeed; update
revalidateCommunityPage to capture the fetch response, check response.ok, and if
false log or throw an error including response.status and response.statusText
(or response.text()) so failed ISR revalidations are visible; ensure this
handling occurs after the fetch and before returning from
revalidateCommunityPage.

Comment on lines +19 to +33
const revalidateCommunityPage = async (boardCode: string, accessToken: string) => {
try {
if (!accessToken) {
console.warn("Revalidation skipped: No access token available");
return;
}

await fetch("/api/revalidate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ boardCode }),
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸ  Major

์—ฌ๊ธฐ๋„ revalidate ์‹คํŒจ๊ฐ€ ์ˆจ๊ฒจ์งˆ ์ˆ˜ ์žˆ์–ด์š”.
fetch๋Š” 4xx/5xx์—์„œ๋„ ์„ฑ๊ณต์œผ๋กœ resolve๋˜๋ฏ€๋กœ, ์‘๋‹ต ok ์ฒดํฌ๋กœ ์‹คํŒจ๋ฅผ ๋ช…์‹œํ•ด ์ฃผ์„ธ์š”.

๐Ÿ”ง ์ˆ˜์ • ์ œ์•ˆ
-    await fetch("/api/revalidate", {
+    const response = await fetch("/api/revalidate", {
       method: "POST",
       headers: {
         "Content-Type": "application/json",
         Authorization: `Bearer ${accessToken}`,
       },
       body: JSON.stringify({ boardCode }),
     });
+    if (!response.ok) {
+      throw new Error(`Revalidate failed: ${response.status}`);
+    }
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const revalidateCommunityPage = async (boardCode: string, accessToken: string) => {
try {
if (!accessToken) {
console.warn("Revalidation skipped: No access token available");
return;
}
await fetch("/api/revalidate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ boardCode }),
});
const revalidateCommunityPage = async (boardCode: string, accessToken: string) => {
try {
if (!accessToken) {
console.warn("Revalidation skipped: No access token available");
return;
}
const response = await fetch("/api/revalidate", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
body: JSON.stringify({ boardCode }),
});
if (!response.ok) {
throw new Error(`Revalidate failed: ${response.status}`);
}
๐Ÿค– Prompt for AI Agents
In `@apps/web/src/apis/community/patchUpdatePost.ts` around lines 19 - 33, The
fetch in revalidateCommunityPage currently treats all HTTP responses as success;
update the function to check the Response.ok after the await fetch (in
revalidateCommunityPage) and handle non-ok responses by throwing or logging a
descriptive error (include response.status and response text) so the existing
try/catch can surface failures; ensure the Authorization/header/body logic
remains unchanged and that failures end up logged or rethrown for callers to
observe.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

๐Ÿค– Fix all issues with AI agents
In `@apps/web/package.json`:
- Line 29: The package.json currently includes an unused dependency
"@vercel/speed-insights"; remove the "@vercel/speed-insights": "^1.3.1" entry
from apps/web package.json if there is no planned usage in this PR, or
alternatively add a brief note in the PR/commit message explaining why
"@vercel/speed-insights" is being introduced and where it will be used; update
package.json accordingly and run dependency install/lockfile update to keep
package-lock/yarn.lock consistent.
๐Ÿงน Nitpick comments (4)
apps/web/src/app/university/application/ScoreSheet.tsx (1)

42-48: ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œ๊ฐ€ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ PR์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์•„๋‹ˆ์ง€๋งŒ, isMine ๊ด€๋ จ ๋กœ์ง์ด ์ฃผ์„์œผ๋กœ ๋‚จ์•„์žˆ๋„ค์š”. ํ–ฅํ›„ ์‚ฌ์šฉ ๊ณ„ํš์ด ์—†๋‹ค๋ฉด ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ฝ”๋“œ ์ •๋ฆฌ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋‹ˆ ํŽธํ•˜์‹ค ๋•Œ ์ •๋ฆฌํ•ด ์ฃผ์„ธ์š”. ๐Ÿ˜Š

apps/web/src/app/community/[boardCode]/[postId]/KebabMenu.tsx (3)

10-26: handler๊ฐ€ ๋งค ๋ Œ๋”๋งˆ๋‹ค ์ƒˆ ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋ฐ˜๋ณต ๋“ฑ๋ก/ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

  1. ํ˜ธ์ถœ๋ถ€(Line 58-60)์—์„œ ์ธ๋ผ์ธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ handler๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์–ด, ๋งค ๋ Œ๋”๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ฐธ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
  2. useEffect์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์— handler๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ Œ๋”๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ๊ฐ€ cleanup โ†’ ์žฌ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.

useRef๋กœ ์ตœ์‹  handler๋ฅผ ์บก์ฒ˜ํ•˜๋ฉด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์žฌ๋“ฑ๋ก์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ™ป๏ธ useRef๋ฅผ ํ™œ์šฉํ•œ ์•ˆ์ •์ ์ธ handler ์ฐธ์กฐ ์˜ˆ์‹œ
-const useClickOutside = (ref: RefObject<HTMLDivElement | null>, handler: (event: MouseEvent | TouchEvent) => void) => {
+const useClickOutside = (ref: RefObject<HTMLDivElement | null>, handler: (event: MouseEvent | TouchEvent) => void) => {
+  const handlerRef = useRef(handler);
+  handlerRef.current = handler;
+
   useEffect(() => {
     const listener = (event: MouseEvent | TouchEvent) => {
       const current = ref.current;
       if (!current) return;
       if (!(event.target instanceof Node)) return;
       if (current.contains(event.target)) return;
-      handler(event);
+      handlerRef.current(event);
     };
     document.addEventListener("mousedown", listener);
     document.addEventListener("touchstart", listener);
     return () => {
       document.removeEventListener("mousedown", listener);
       document.removeEventListener("touchstart", listener);
     };
-  }, [ref, handler]);
+  }, [ref]);
 };

36-38: SVG ์†์„ฑ์— kebab-case ๋Œ€์‹  camelCase ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

  1. stroke-width โ†’ strokeWidth
  2. stroke-linecap โ†’ strokeLinecap
  3. stroke-linejoin โ†’ strokeLinejoin

React JSX์—์„œ๋Š” camelCase๊ฐ€ ๊ด€๋ก€์ด๋ฉฐ, kebab-case๋Š” ์ฝ˜์†” ๊ฒฝ๊ณ ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


28-28: ๋ถˆํ•„์š”ํ•œ ์ฃผ์„์ž…๋‹ˆ๋‹ค.

useClickOutside ํ›…์ด ๋ฐ”๋กœ ์œ„์— ์™„์ „ํžˆ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, "(๊ฐ€์ •)"์ด๋ผ๋Š” ํ‘œํ˜„์ด ์˜คํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•ด ์ฃผ์„ธ์š”.

Comment thread apps/web/package.json
"@tanstack/react-query": "^5.84.1",
"@tanstack/react-query-devtools": "^5.84.1",
"@tanstack/react-virtual": "^3.13.12",
"@vercel/speed-insights": "^1.3.1",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸก Minor

๐Ÿงฉ Analysis chain

๐Ÿ Script executed:

#!/bin/bash
# Search for `@vercel/speed-insights` usage in the codebase
echo "=== Searching for `@vercel/speed-insights` imports ==="
rg "@vercel/speed-insights" --type-list | head -20
rg "speed-insights|SpeedInsights" -i --type ts --type tsx --type js --type jsx 2>/dev/null || echo "No matches found in ts/tsx/js/jsx"

# Check the actual apps/web structure
echo ""
echo "=== Checking apps/web structure ==="
find apps/web -maxdepth 2 -type f -name "*.ts" -o -name "*.tsx" | head -20

Repository: solid-connection/solid-connect-web

Length of output: 827


๐Ÿ Script executed:

#!/bin/bash
# Check for imports in the main app files
echo "=== Searching in apps/web directory ==="
rg -i "vercel|speed.insights|speed-insights" apps/web --type ts --type tsx -A 2 2>/dev/null | head -50

# Also check if there's any configuration or setup
echo ""
echo "=== Checking package.json context ==="
cat apps/web/package.json | grep -A 10 -B 10 "@vercel/speed-insights" || echo "Not in grep output"

Repository: solid-connection/solid-connect-web

Length of output: 890


๐Ÿ Script executed:

#!/bin/bash
# Get file listing to understand the structure
echo "=== Apps/web main files ==="
ls -la apps/web/*.json 2>/dev/null | head -20
ls -la apps/web/src/ 2>/dev/null | head -20

# Search more broadly for any vercel imports
echo ""
echo "=== All vercel related imports ==="
rg "@vercel" apps/web --type ts --type tsx --type json 2>/dev/null

Repository: solid-connection/solid-connect-web

Length of output: 1128


@vercel/speed-insights ์˜์กด์„ฑ์ด ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ์—์„œ ์ž„ํฌํŠธ/์‚ฌ์šฉ ์—†์Œ: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, @vercel/speed-insights๋Š” package.json์—๋งŒ ์ถ”๊ฐ€๋˜์–ด ์žˆ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์–ด๋–ค ํŒŒ์ผ์—์„œ๋„ ์‹ค์ œ๋กœ ์ž„ํฌํŠธ๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  2. PR ๋ฒ”์œ„ ์™ธ ๋ณ€๊ฒฝ: ์ด PR์˜ ๋ชฉ์ ์ธ #405โ€“๋ฉ˜ํ‹ฐ ์‹ ์ฒญํ•˜๊ธฐ -> ๋ฉ˜ํ† ๋ง ์‹ ์ฒญํ•˜๊ธฐย #409 ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ๋Š” ๋ฌด๊ด€ํ•œ ์˜์กด์„ฑ ์ถ”๊ฐ€์ž…๋‹ˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์€ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ์‹ค์ œ ์‚ฌ์šฉ ๊ณ„ํš์ด ์žˆ๋‹ค๋ฉด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋‚˜ PR ์„ค๋ช…์— ์ด์œ ๋ฅผ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”.

๐Ÿค– Prompt for AI Agents
In `@apps/web/package.json` at line 29, The package.json currently includes an
unused dependency "@vercel/speed-insights"; remove the "@vercel/speed-insights":
"^1.3.1" entry from apps/web package.json if there is no planned usage in this
PR, or alternatively add a brief note in the PR/commit message explaining why
"@vercel/speed-insights" is being introduced and where it will be used; update
package.json accordingly and run dependency install/lockfile update to keep
package-lock/yarn.lock consistent.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and canโ€™t be posted inline due to platform limitations.

โš ๏ธ Outside diff range comments (1)
apps/web/src/app/community/[boardCode]/[postId]/modify/PostModifyForm.tsx (1)

19-29: โš ๏ธ Potential issue | ๐ŸŸก Minor

defaultPostCategory ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  1. PostModifyForm.tsx์—์„œ ํƒ€์ž… ์ •์˜ ์ œ๊ฑฐ

    • Line 16์˜ ํƒ€์ž… ์ •์˜์—์„œ defaultPostCategory: string; ์ œ๊ฑฐ
  2. PostModifyForm.tsx์—์„œ ๊ตฌ์กฐ ๋ถ„ํ•ด ์ œ๊ฑฐ

    • Line 25์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด์—์„œ defaultPostCategory ์ œ๊ฑฐ
  3. PostModifyContent.tsx์—์„œ ์ „๋‹ฌ ์ œ๊ฑฐ

    • Line 41์—์„œ defaultPostCategory={post.postCategory} ์ œ๊ฑฐ

ํ˜„์žฌ Line 81์—์„œ postCategory๋Š” isQuestion ์ƒํƒœ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฐ์ •๋˜๊ณ  ์žˆ์–ด์„œ (isQuestion ? "์งˆ๋ฌธ" : "์ž์œ "), ๋” ์ด์ƒ ๊ธฐ๋ณธ๊ฐ’ ์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ๊ฑฐํ•  ์ฝ”๋“œ ์œ„์น˜

PostModifyForm.tsx (Line 16)

 type PostModifyFormProps = {
   boardCode: string;
   postId: number;
   defaultTitle: string;
   defaultContent: string;
   defaultIsQuestion: boolean;
-  defaultPostCategory: string;
 };

PostModifyForm.tsx (Line 25)

 const PostModifyForm = ({
   boardCode,
   postId,
   defaultTitle,
   defaultContent,
   defaultIsQuestion,
-  defaultPostCategory,
 }: PostModifyFormProps) => {

PostModifyContent.tsx (Line 41)

       <PostModifyForm
         boardCode={boardCode}
         postId={postId}
         defaultTitle={post.title}
         defaultContent={post.content}
         defaultIsQuestion={post.isQuestion}
-        defaultPostCategory={post.postCategory}
       />
๐Ÿงน Nitpick comments (1)
apps/web/src/apis/community/patchUpdatePost.ts (1)

19-37: revalidateCommunityPage๊ฐ€ deletePost.ts์™€ ์™„์ „ํžˆ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

  1. ์ค‘๋ณต ์ฝ”๋“œ: ๋™์ผํ•œ ํ•จ์ˆ˜๊ฐ€ deletePost.ts์—๋„ ๊ทธ๋Œ€๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ณตํ†ต ์œ ํ‹ธ๋กœ ์ถ”์ถœํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ๋ถˆํ•„์š”ํ•œ accessToken ์ฒดํฌ (Line 21-24): ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ string ํƒ€์ž…์ธ๋ฐ, ํ˜ธ์ถœ๋ถ€(Line 54)์—์„œ ์ด๋ฏธ truthy ์ฒดํฌ๋ฅผ ํ•˜๊ณ  ์žˆ์–ด ๋‚ด๋ถ€ ์ฒดํฌ๋Š” ๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
โ™ป๏ธ ๊ณตํ†ต ์œ ํ‹ธ๋กœ ์ถ”์ถœํ•˜๋Š” ์ œ์•ˆ

์˜ˆ๋ฅผ ๋“ค์–ด apps/web/src/apis/community/revalidateCommunityPage.ts๋กœ ๋ถ„๋ฆฌ:

export const revalidateCommunityPage = async (boardCode: string, accessToken: string) => {
  try {
    const response = await fetch("/api/revalidate", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${accessToken}`,
      },
      body: JSON.stringify({ boardCode }),
    });
    if (!response.ok) {
      throw new Error(`Revalidate failed: ${response.status}`);
    }
  } catch (error) {
    console.error("Revalidate failed:", error);
  }
};

๊ทธ ํ›„ patchUpdatePost.ts์™€ deletePost.ts ์–‘์ชฝ์—์„œ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

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

Projects

None yet

1 participant