Skip to content

refactor: [Refactor] SonarCloud 코드 품질 개선 - Props ReadOnly 및 접근성 이슈 수정 (#1243)#1244

Closed
dooohun wants to merge 1 commit intodevelopfrom
refactor/issue-1243-refactor-sonarcloud-코드-품질-개선-props-reado

Hidden character warning

The head ref may contain hidden characters: "refactor/issue-1243-refactor-sonarcloud-\ucf54\ub4dc-\ud488\uc9c8-\uac1c\uc120-props-reado"
Closed

refactor: [Refactor] SonarCloud 코드 품질 개선 - Props ReadOnly 및 접근성 이슈 수정 (#1243)#1244
dooohun wants to merge 1 commit intodevelopfrom
refactor/issue-1243-refactor-sonarcloud-코드-품질-개선-props-reado

Conversation

@dooohun
Copy link
Copy Markdown
Contributor

@dooohun dooohun commented May 4, 2026

Summary

SonarCloud에서 검출된 20개 코드 품질 이슈를 수정합니다.

Changes

파일 수정 내용
src/components/CampusInfo/index.tsx ShopIconPropsReadonly<{...}>
src/components/Callvan/components/CallvanRestrictionModal/index.tsx props readonly 추가, <div role="dialog"><dialog open>
src/components/Callvan/components/AddPostForm/index.tsx 중첩 삼항 연산자 → convertTo24Hour 헬퍼 함수 추출
src/components/Callvan/components/CallvanPageLayout/index.tsx 부정 조건 반전 (!== 'ALL'=== 'ALL')
src/components/Callvan/utils/callvanQuery.ts 중첩 삼항 → 2단계 분리
src/components/TimetablePage/components/MainTimetable/index.tsx props readonly 추가, 중복 isSemesterAndTimetableExistvalidateSemesterAndTimetable 공유 함수 추출
src/components/TimetablePage/components/TimetableGridPlaceholder/index.tsx props readonly 추가
src/pages/room/[id]/index.tsx RoomDetailPageProps props readonly 추가
src/pages/timetable/index.tsx getServerSideProps Cognitive Complexity 19 → 5 (prefetchTimetableWithToken 추출)
src/utils/ts/withCacheControl.ts querystringnode:querystring, call-signature 전용 interfacetype
src/api/articles/queries.ts number | string | null 유니온 → ChatroomParamId 타입 알리아스
src/api/bus/queries.ts 불필요한 as Depart, as Arrival 타입 단언 제거

SonarCloud Issues Fixed

  • [MINOR × 6] React 컴포넌트 props ReadOnly 누락
  • [MAJOR] role="dialog"<dialog> 요소로 접근성 개선
  • [CRITICAL] getServerSideProps Cognitive Complexity 19 → 15 이하로 감소
  • [MINOR × 2] withCacheControl.ts: node:querystring 사용, call-signature interface → function type
  • [MAJOR] MainTimetable 동일 구현 중복 함수 제거
  • [MAJOR × 3] 중첩 삼항 연산자 독립 구문으로 추출
  • [MINOR] 예상치 못한 부정 조건 수정
  • [MINOR] union type → type alias 추출
  • [MINOR × 2] 불필요한 타입 단언 제거

Test Plan

  • yarn lint 통과 확인
  • yarn tsc --noEmit 타입 오류 없음 확인
  • CallvanRestrictionModal 모달 노출/닫기 동작 확인
  • 시간표 페이지 SSR 정상 동작 확인

Related

Closes #1243

Summary by CodeRabbit

릴리스 노트

  • Chores

    • 타입 안정성 및 코드 유지보수성 향상을 위한 내부 개선 작업
    • 중복된 로직 추출 및 헬퍼 함수 통합으로 코드 최적화
    • 불변성 타입 선언 강화 및 타입 정의 방식 개선
  • 기타 개선사항

    • 접근성 향상을 위해 제한 사항 모달의 기본 HTML 요소 개선

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

Walkthrough

이 PR은 SonarCloud 코드 품질 개선을 위해 컴포넌트 props에 readonly 수식어를 추가하고, 접근성 개선(<dialog> 요소로 변경), 타입 정의 정리, 헬퍼 함수 추출을 수행하는 리팩토링 변경사항들입니다.

Changes

코드 품질 및 타입 정리

Layer / File(s) Summary
Type System Updates
src/api/articles/queries.ts, src/utils/ts/withCacheControl.ts
ChatroomParamId 타입 별칭 추가로 반복되는 union 타입 제거; GetServerSidePropsWithCacheControlWithCacheControlinterface 기반에서 type 함수 alias로 변환.
Props Readonly 마킹
src/components/CampusInfo/index.tsx, src/components/Callvan/components/CallvanRestrictionModal/index.tsx, src/pages/room/[id]/index.tsx, src/components/TimetablePage/components/MainTimetable/index.tsx, src/components/TimetablePage/components/TimetableGridPlaceholder/index.tsx
ShopIconProps, CallvanRestrictionModalProps, RoomDetailPageProps, MainTimetableLayoutProps, TimetableGridPlaceholderProps에서 props를 readonly로 마킹하여 불변성 명시.
접근성 개선
src/components/Callvan/components/CallvanRestrictionModal/index.tsx
모달 container를 div role="dialog"에서 시맨틱 <dialog> 요소로 변경; openaria-* 속성 적용.
로직 리팩토링 및 최적화
src/components/Callvan/components/AddPostForm/index.tsx, src/components/Callvan/components/CallvanPageLayout/index.tsx, src/components/Callvan/utils/callvanQuery.ts, src/components/TimetablePage/components/MainTimetable/index.tsx, src/api/bus/queries.ts, src/pages/timetable/index.tsx
시간 변환 로직을 convertTo24Hour 헬퍼로 추출; author 필터 조건식을 명확하게 정리; joined 쿼리 파싱을 tri-state 로직으로 개선; 중복된 유효성 검사를 validateSemesterAndTimetable 헬퍼로 통합; timetable 서버 사이드 프리페칭을 prefetchTimetableWithToken 함수로 추출; bus 쿼리에서 불필요한 타입 캐스트 제거.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • PR #1227: src/utils/ts/withCacheControl.ts의 타입 정의 변경사항이 공통으로 영향을 미침
  • PR #1186: src/pages/timetable/index.tsx의 서버 사이드 프리페칭 로직 리팩토링과 직접 관련
  • PR #1202: src/api/bus/queries.ts의 route query 구현 수정사항 관련

Suggested labels

🔨 Refactor

Suggested reviewers

  • JeongWon-CHO
  • ff1451
  • hyejun0228
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 SonarCloud 품질 개선을 위한 Props ReadOnly 추가 및 접근성 이슈 수정이라는 주요 변경 내용을 명확히 설명하고 있습니다.
Linked Issues check ✅ Passed PR이 연결된 이슈 #1243의 모든 주요 목표(Props ReadOnly 추가, dialog 접근성 개선, 코드 중복 제거, 타입 개선)를 충족합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 이슈 #1243의 범위 내에 있으며, 제외 대상(테스트 커버리지, 버그 수정)이 포함되지 않았습니다.

✏️ 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/issue-1243-refactor-sonarcloud-코드-품질-개선-props-reado

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

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

@dooohun dooohun assigned dooohun and unassigned dooohun May 4, 2026
@dooohun dooohun added the 🔨 Refactor 코드 리팩토링 label May 4, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/BCSDLab/KOIN_WEB_RECODE/issues/comments/4372444009","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- walkthrough_start -->\n\n## Walkthrough\n\n이 PR은 SonarCloud 코드 품질 개선을 위해 컴포넌트 props에 `readonly` 수식어를 추가하고, 접근성 개선(`<dialog>` 요소로 변경), 타입 정의 정리, 헬퍼 함수 추출을 수행하는 리팩토링 변경사항들입니다.\n\n## Changes\n\n**코드 품질 및 타입 정리**\n\n|Layer / File(s)|Summary|\n|---|---|\n|**Type System Updates** <br> `src/api/articles/queries.ts`, `src/utils/ts/withCacheControl.ts`|`ChatroomParamId` 타입 별칭 추가로 반복되는 union 타입 제거; `GetServerSidePropsWithCacheControl`과 `WithCacheControl`을 `interface` 기반에서 `type` 함수 alias로 변환.|\n|**Props Readonly 마킹** <br> `src/components/CampusInfo/index.tsx`, `src/components/Callvan/components/CallvanRestrictionModal/index.tsx`, `src/pages/room/[id]/index.tsx`, `src/components/TimetablePage/components/MainTimetable/index.tsx`, `src/components/TimetablePage/components/TimetableGridPlaceholder/index.tsx`|`ShopIconProps`, `CallvanRestrictionModalProps`, `RoomDetailPageProps`, `MainTimetableLayoutProps`, `TimetableGridPlaceholderProps`에서 props를 `readonly`로 마킹하여 불변성 명시.|\n|**접근성 개선** <br> `src/components/Callvan/components/CallvanRestrictionModal/index.tsx`|모달 container를 `div role=\"dialog\"`에서 시맨틱 `<dialog>` 요소로 변경; `open` 및 `aria-*` 속성 적용.|\n|**로직 리팩토링 및 최적화** <br> `src/components/Callvan/components/AddPostForm/index.tsx`, `src/components/Callvan/components/CallvanPageLayout/index.tsx`, `src/components/Callvan/utils/callvanQuery.ts`, `src/components/TimetablePage/components/MainTimetable/index.tsx`, `src/api/bus/queries.ts`, `src/pages/timetable/index.tsx`|시간 변환 로직을 `convertTo24Hour` 헬퍼로 추출; author 필터 조건식을 명확하게 정리; `joined` 쿼리 파싱을 tri-state 로직으로 개선; 중복된 유효성 검사를 `validateSemesterAndTimetable` 헬퍼로 통합; timetable 서버 사이드 프리페칭을 `prefetchTimetableWithToken` 함수로 추출; bus 쿼리에서 불필요한 타입 캐스트 제거.|\n\n## Estimated code review effort\n\n🎯 2 (Simple) | ⏱️ ~12 minutes\n\n## Possibly related PRs\n\n- PR `#1227`: `src/utils/ts/withCacheControl.ts`의 타입 정의 변경사항이 공통으로 영향을 미침\n- PR `#1186`: `src/pages/timetable/index.tsx`의 서버 사이드 프리페칭 로직 리팩토링과 직접 관련\n- PR `#1202`: `src/api/bus/queries.ts`의 route query 구현 수정사항 관련\n\n## Suggested labels\n\n`🔨 Refactor`\n\n## Suggested reviewers\n\n- JeongWon-CHO\n- ff1451\n- hyejun0228\n\n<!-- walkthrough_end -->\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n### ❌ Failed checks (1 warning)\n\n|     Check name     | Status     | Explanation                                                                          | Resolution                                                                         |\n| :----------------: | :--------- | :----------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                           |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                           |\n|         Title check        | ✅ Passed | PR 제목은 SonarCloud 품질 개선을 위한 Props ReadOnly 추가 및 접근성 이슈 수정이라는 주요 변경 내용을 명확히 설명하고 있습니다. |\n|     Linked Issues check    | ✅ Passed | PR이 연결된 이슈 `#1243의` 모든 주요 목표(Props ReadOnly 추가, dialog 접근성 개선, 코드 중복 제거, 타입 개선)를 충족합니다. |\n| Out of Scope Changes check | ✅ Passed | 모든 변경사항이 이슈 `#1243의` 범위 내에 있으며, 제외 대상(테스트 커버리지, 버그 수정)이 포함되지 않았습니다.                     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>📝 Generate docstrings</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> Create stacked PR\n- [ ] <!-- {\"checkboxId\": \"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98\"} --> Commit on current branch\n\n</details>\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `refactor/issue-1243-refactor-sonarcloud-코드-품질-개선-props-reado`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- announcements_start -->\n\n> [!TIP]\n> <details>\n> <summary>💬 Introducing Slack Agent: The best way for teams to turn conversations into code.</summary>\n> \n> [Slack Agent](https://www.coderabbit.ai/agent) is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.\n> \n> - Generate code and open pull requests\n> - Plan features and break down work\n> - Investigate incidents and troubleshoot customer tickets together\n> - Automate recurring tasks and respond to alerts with triggers\n> - Summarize progress and report instantly\n> \n> Built for teams:\n> \n> - **Shared memory** across your entire org—no repeating context\n> - **Per-thread sandboxes** to safely plan and execute work\n> - **Governance built-in**—scoped access, auditability, and budget controls\n> \n> One agent for your entire SDLC. Right inside Slack.\n> \n> 👉 [Get started](https://agent.coderabbit.ai/)\n> \n> </details>\n\n<!-- announcements_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=BCSDLab/KOIN_WEB_RECODE&utm_content=1244)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n<!-- review_rate_limit_status_start -->\n<sub>Review rate limit: 0/1 reviews remaining, refill in 60 minutes.</sub>\n<!-- review_rate_limit_status_end -->\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"signal":{},"retryCount":3,"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/BCSDLab/KOIN_WEB_RECODE/issues/comments/4372444009","status":500,"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset","content-length":"0","content-security-policy":"default-src 'none'","content-type":"application/json; charset=utf-8","date":"Mon, 04 May 2026 15:59:28 GMT","referrer-policy":"origin-when-cross-origin, strict-origin-when-cross-origin","server":"github.com","strict-transport-security":"max-age=31536000; includeSubdomains; preload","vary":"Accept-Encoding, Accept, X-Requested-With","x-accepted-github-permissions":"issues=write; pull_requests=write","x-content-type-options":"nosniff","x-frame-options":"deny","x-github-api-version-selected":"2022-11-28","x-github-media-type":"github.v3; format=json","x-github-request-id":"4321:27DFF0:1B9DD04:6DE750E:69F8C25E","x-ratelimit-limit":"12500","x-ratelimit-remaining":"12430","x-ratelimit-reset":"1777911700","x-ratelimit-resource":"core","x-ratelimit-used":"70","x-xss-protection":"0"},"data":""}}

@dooohun dooohun closed this May 4, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":502,"request":{"method":"PATCH","url":"https://api.github.com/repos/BCSDLab/KOIN_WEB_RECODE/issues/comments/4372444009","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> Failed to post review comments\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n## Walkthrough\n\n이 PR은 SonarCloud 코드 품질 개선을 위해 컴포넌트 props에 `readonly` 수식어를 추가하고, 접근성 개선(`<dialog>` 요소로 변경), 타입 정의 정리, 헬퍼 함수 추출을 수행하는 리팩토링 변경사항들입니다.\n\n## Changes\n\n**코드 품질 및 타입 정리**\n\n|Layer / File(s)|Summary|\n|---|---|\n|**Type System Updates** <br> `src/api/articles/queries.ts`, `src/utils/ts/withCacheControl.ts`|`ChatroomParamId` 타입 별칭 추가로 반복되는 union 타입 제거; `GetServerSidePropsWithCacheControl`과 `WithCacheControl`을 `interface` 기반에서 `type` 함수 alias로 변환.|\n|**Props Readonly 마킹** <br> `src/components/CampusInfo/index.tsx`, `src/components/Callvan/components/CallvanRestrictionModal/index.tsx`, `src/pages/room/[id]/index.tsx`, `src/components/TimetablePage/components/MainTimetable/index.tsx`, `src/components/TimetablePage/components/TimetableGridPlaceholder/index.tsx`|`ShopIconProps`, `CallvanRestrictionModalProps`, `RoomDetailPageProps`, `MainTimetableLayoutProps`, `TimetableGridPlaceholderProps`에서 props를 `readonly`로 마킹하여 불변성 명시.|\n|**접근성 개선** <br> `src/components/Callvan/components/CallvanRestrictionModal/index.tsx`|모달 container를 `div role=\"dialog\"`에서 시맨틱 `<dialog>` 요소로 변경; `open` 및 `aria-*` 속성 적용.|\n|**로직 리팩토링 및 최적화** <br> `src/components/Callvan/components/AddPostForm/index.tsx`, `src/components/Callvan/components/CallvanPageLayout/index.tsx`, `src/components/Callvan/utils/callvanQuery.ts`, `src/components/TimetablePage/components/MainTimetable/index.tsx`, `src/api/bus/queries.ts`, `src/pages/timetable/index.tsx`|시간 변환 로직을 `convertTo24Hour` 헬퍼로 추출; author 필터 조건식을 명확하게 정리; `joined` 쿼리 파싱을 tri-state 로직으로 개선; 중복된 유효성 검사를 `validateSemesterAndTimetable` 헬퍼로 통합; timetable 서버 사이드 프리페칭을 `prefetchTimetableWithToken` 함수로 추출; bus 쿼리에서 불필요한 타입 캐스트 제거.|\n\n## Estimated code review effort\n\n🎯 2 (Simple) | ⏱️ ~12 minutes\n\n## Possibly related PRs\n\n- PR `#1227`: `src/utils/ts/withCacheControl.ts`의 타입 정의 변경사항이 공통으로 영향을 미침\n- PR `#1186`: `src/pages/timetable/index.tsx`의 서버 사이드 프리페칭 로직 리팩토링과 직접 관련\n- PR `#1202`: `src/api/bus/queries.ts`의 route query 구현 수정사항 관련\n\n## Suggested labels\n\n`🔨 Refactor`\n\n## Suggested reviewers\n\n- JeongWon-CHO\n- ff1451\n- hyejun0228\n\n<!-- walkthrough_end -->\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n### ❌ Failed checks (1 warning)\n\n|     Check name     | Status     | Explanation                                                                          | Resolution                                                                         |\n| :----------------: | :--------- | :----------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                           |\n| :------------------------: | :------- | :------------------------------------------------------------------------------------ |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                           |\n|         Title check        | ✅ Passed | PR 제목은 SonarCloud 품질 개선을 위한 Props ReadOnly 추가 및 접근성 이슈 수정이라는 주요 변경 내용을 명확히 설명하고 있습니다. |\n|     Linked Issues check    | ✅ Passed | PR이 연결된 이슈 `#1243의` 모든 주요 목표(Props ReadOnly 추가, dialog 접근성 개선, 코드 중복 제거, 타입 개선)를 충족합니다. |\n| Out of Scope Changes check | ✅ Passed | 모든 변경사항이 이슈 `#1243의` 범위 내에 있으며, 제외 대상(테스트 커버리지, 버그 수정)이 포함되지 않았습니다.                     |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>📝 Generate docstrings</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> Create stacked PR\n- [ ] <!-- {\"checkboxId\": \"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98\"} --> Commit on current branch\n\n</details>\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `refactor/issue-1243-refactor-sonarcloud-코드-품질-개선-props-reado`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- announcements_start -->\n\n> [!TIP]\n> <details>\n> <summary>💬 Introducing Slack Agent: The best way for teams to turn conversations into code.</summary>\n> \n> [Slack Agent](https://www.coderabbit.ai/agent) is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.\n> \n> - Generate code and open pull requests\n> - Plan features and break down work\n> - Investigate incidents and troubleshoot customer tickets together\n> - Automate recurring tasks and respond to alerts with triggers\n> - Summarize progress and report instantly\n> \n> Built for teams:\n> \n> - **Shared memory** across your entire org—no repeating context\n> - **Per-thread sandboxes** to safely plan and execute work\n> - **Governance built-in**—scoped access, auditability, and budget controls\n> \n> One agent for your entire SDLC. Right inside Slack.\n> \n> 👉 [Get started](https://agent.coderabbit.ai/)\n> \n> </details>\n\n<!-- announcements_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=BCSDLab/KOIN_WEB_RECODE&utm_content=1244)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n<!-- review_rate_limit_status_start -->\n<sub>Review rate limit: 0/1 reviews remaining, refill in 60 minutes.</sub>\n<!-- review_rate_limit_status_end -->\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}},"response":{"url":"https://api.github.com/repos/BCSDLab/KOIN_WEB_RECODE/issues/comments/4372444009","status":502,"headers":{"content-length":"32","content-type":"application/json","date":"Mon, 04 May 2026 16:01:57 GMT","etag":"\"69f8a3f7-20\"","server":"github.com","vary":"Accept-Encoding, Accept, X-Requested-With","x-github-request-id":"8085:6B9BA:1B6E569:6D46E42:69F8C2EA","x-ratelimit-limit":"12500","x-ratelimit-remaining":"12405","x-ratelimit-reset":"1777911700","x-ratelimit-resource":"core","x-ratelimit-used":"95"},"data":{"message":"Server Error"}}}

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

Labels

🔨 Refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] SonarCloud 코드 품질 개선 - Props ReadOnly 및 접근성 이슈 수정

1 participant