Skip to content

클래스 이용권 확인 및 재등록 경로 연결 - #52

Merged
Roy-wonji merged 1 commit into
developfrom
feature/class-design-remainder-20261019
Oct 19, 2026
Merged

Roy-wonji merged 1 commit into
developfrom
feature/class-design-remainder-20261019

Conversation

@Roy-wonji

Copy link
Copy Markdown
Contributor

이용권 등록 완료 후 확인 화면이 열리지 않고, 추가 등록 뒤에는 이전 이용 기간이 남을 수 있었습니다. 등록 완료 시 확인 화면을 push하고 추가 등록도 새 입력 화면으로 push하며, 재등록이 성공하면 기존 확인 경로의 기간을 즉시 갱신합니다.

Figma 확정 시안 13244:49243과 402pt 화면 캡처를 대조한 결과와 의도적인 Mock 문구·탭 차이는 docs/class-figma-audit-20261019.md에 기록했습니다. 실제 앱 진입 캡처에서 상단 안전 영역의 약 10~13pt 차이는 후속 확인이 필요합니다.

검증: iPhone 18 Pro iOS 27 시뮬레이터에서 앱 코디네이터·캡처 51개, 재등록 경로 11개, Class 모듈 이용권 8개 테스트가 각각 실패 0건으로 통과했습니다. Claude 교차 점검은 APPROVED이며, 검토자는 테스트 실행과 Figma 원본 확인을 직접 수행하지 못했다고 밝혔습니다.

- 확인 화면과 추가 등록 화면을 코디네이터 push로 연결
- 재등록 후 기존 이용 기간을 갱신하고 경로 제거 응답을 검증
- Figma 대조 기록과 화면 캡처 테스트 추가
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T13:57:26.320772Z 4d2e25d PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

TCA delegate 액션 네이밍 컨벤션 위반(showOverview, addRegistration)이 발견되었습니다. Delegate 액션은 자식 Reducer 내부에서 발생한 이벤트를 설명해야 하며, 의도된 효과(performLogin, loadData, setRecords)를 설명해서는 안 됩니다. 현재 액션명은 부모 Reducer가 특정 작업을 수행하도록 요청하는 '의도된 효과'를 나타내고 있습니다. 이 외의 변경 사항은 프로젝트 가이드라인을 준수합니다.

@CasePathable
public enum DelegateAction: Equatable {
case dismiss
case showOverview(Date, Date)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션은 자식 Reducer에서 발생한 이벤트를 명확히 설명해야 합니다. showOverview는 부모 Reducer에 특정 효과를 요청하는 것으로 해석될 수 있어 TCA 액션 네이밍 컨벤션에 맞지 않습니다. showOverview가 등록 완료 후 확인 화면을 보여주는 용도라면, registrationConfirmed와 같이 이벤트 발생을 알리는 형태로 변경하는 것이 좋습니다.

Suggested change
case showOverview(Date, Date)
case registrationConfirmed(startDate: Date, endDate: Date)

public enum DelegateAction: Equatable {
case dismiss
case showOverview(Date, Date)
case addRegistration

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션은 자식 Reducer에서 발생한 이벤트를 명확히 설명해야 합니다. addRegistration은 부모 Reducer에 특정 효과를 요청하는 것으로 해석될 수 있어 TCA 액션 네이밍 컨벤션에 맞지 않습니다. 추가 등록을 요청하는 의도를 명확히 하려면 addRegistrationRequested와 같이 변경하는 것이 좋습니다.

Suggested change
case addRegistration
case addRegistrationRequested

let registrationStartDate = state.registrationStartDate,
let expirationDate = state.expirationDate
else { return .none }
return .send(.delegate(.showOverview(registrationStartDate, expirationDate)))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 LINE 62를 참조하세요.

Suggested change
return .send(.delegate(.showOverview(registrationStartDate, expirationDate)))
return .send(.delegate(.registrationConfirmed(startDate: registrationStartDate, endDate: expirationDate)))


case .view(.addRegistrationTapped):
guard state.phase == .overview else { return .none }
return .send(.delegate(.addRegistration))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 LINE 63을 참조하세요.

Suggested change
return .send(.delegate(.addRegistration))
return .send(.delegate(.addRegistrationRequested))

state.routes.push(.ticket(.init(instanceID: uuid())))
return .none

case let .routeAction(routeID, action: .ticket(.delegate(.showOverview(startDate, endDate)))):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 62를 참조하세요.

Suggested change
case let .routeAction(routeID, action: .ticket(.delegate(.showOverview(startDate, endDate)))):
case let .routeAction(routeID, action: .ticket(.delegate(.registrationConfirmed(startDate: startDate, endDate: endDate)))):


await store.send(.router(.routeAction(
id: 1,
action: .ticket(.delegate(.showOverview(firstStart, firstEnd)))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 62를 참조하세요.

Suggested change
action: .ticket(.delegate(.showOverview(firstStart, firstEnd)))
action: .ticket(.delegate(.registrationConfirmed(startDate: firstStart, endDate: firstEnd)))


await store.send(.router(.routeAction(
id: 2,
action: .ticket(.delegate(.addRegistration))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 63을 참조하세요.

Suggested change
action: .ticket(.delegate(.addRegistration))
action: .ticket(.delegate(.addRegistrationRequested))

}
await store.send(.router(.routeAction(
id: 3,
action: .ticket(.delegate(.showOverview(secondStart, secondEnd)))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 62를 참조하세요.

Suggested change
action: .ticket(.delegate(.showOverview(secondStart, secondEnd)))
action: .ticket(.delegate(.registrationConfirmed(startDate: secondStart, endDate: secondEnd)))

let store = TestStore(initialState: state) { ClassTicketFeature() }

await store.send(.view(.confirmTapped))
await store.receive(\.delegate, .showOverview(start, end))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 62를 참조하세요.

Suggested change
await store.receive(\.delegate, .showOverview(start, end))
await store.receive(\.delegate, .registrationConfirmed(startDate: start, endDate: end))

#expect(store.state.navigationTitle == "클래스 이용권")
#expect(store.state.periodText == "2026.10.09 – 2027.04.08")
await store.send(.view(.addRegistrationTapped))
await store.receive(\.delegate, .addRegistration)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 [P3] Minor

Delegate 액션의 네이밍 컨벤션에 따라 액션을 수정해야 합니다. 관련 수정 제안은 ClassTicketFeature.swift LINE 63을 참조하세요.

Suggested change
await store.receive(\.delegate, .addRegistration)
await store.receive(\.delegate, .addRegistrationRequested)

@Roy-wonji
Roy-wonji merged commit 456554b into develop Oct 19, 2026
5 checks passed
@Roy-wonji
Roy-wonji deleted the feature/class-design-remainder-20261019 branch October 19, 2026 13:57
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