Skip to content

feat: Pro 과목 관리와 풀이 기록 표시 개편 - #30

Merged
hyesngy merged 2 commits into
developfrom
feat/pro-subject-history
Oct 16, 2026
Merged

hyesngy merged 2 commits into
developfrom
feat/pro-subject-history

Conversation

@hyesngy

@hyesngy hyesngy commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

관련 이슈

Closes #29

변경사항

  • 상세 풀이의 고정 프리셋 이름을 제거하고, Pro 기록에서 과목 지정·변경 버튼을 제공합니다.
  • Pro 사용자가 과목을 만들고 이름을 바꾸거나 삭제하며, 기록을 날짜별·과목별로 볼 수 있습니다. 과목 삭제 시 기록과 이미지는 유지됩니다.
  • 기존 수학·자격시험 기록은 최초 실행 시 subjects.json의 편집 가능한 과목으로 이전하고, 일반 기록과 새 풀이는 미분류로 둡니다. 기존 history.json 형식은 유지합니다.
  • 무료는 날짜별 최신 10개만 검색·열람하고 메뉴 표시 개수도 최대 10개로 제한합니다. 기록과 이미지는 최대 100개까지 계속 보관하며 Pro에서 다시 볼 수 있습니다.
  • Pro 기능은 서버가 확인한 serverTier == .pro에만 열고, 권한이 없어지면 과목 편집과 범위 밖의 기록 상세를 닫습니다. 과목 이름은 AI 요청에 넣지 않습니다.

변경·영향 범위

담당 주 영역: 앱 기능 (Storage / UI)

  • 앱 기능 (Capture / AI / Storage / UI)
  • StoreKit·사용량 정책
  • API·프록시
  • 앱 설정·권한·릴리스
  • 테스트·CI·개발 도구
  • 규칙·문서 (AGENTS.md, docs/)
  • 기타:

PR 분류

  • 일반 변경
  • Critical Path 변경

서버 사용량·StoreKit·프록시 계약·설정 파일은 변경하지 않았습니다. 앱은 기존 서버 tier를 기록 화면의 접근 기준으로 사용합니다.

사전 예측

  • 예상 소요·기대 효과: 로컬 과목 분류와 무료/Pro 기록 범위를 구현하고, 기록을 삭제하지 않은 채 혜택을 명확히 안내합니다.
  • 예상 병목·리스크: 기존 프리셋 기록의 일회성 이전과 구독 상태 변경 시 오래된 기록 노출 방지.
  • 담당 영역 밖 확인 사항: 서버 tier 응답과 App Store 구독 상품은 기존 계약을 그대로 사용합니다.

실제 결과·트러블슈팅

  • 실제 소요·반영 결과: subjects.json으로 과목과 기록 ID의 관계를 분리하고, 무료 10개/Pro 100개 보기 및 과목별 묶음을 구현했습니다.
  • 실제 병목·해결 과정: 기록 저장소가 날짜순으로 복원하므로 테스트의 입력 순서 가정을 수정했습니다. 표시 제한도 입력 배열 순서와 무관하게 날짜순으로 적용했습니다.
  • 배운 점·후속 작업: Pro 계정과 구독 전환을 통한 실제 창 조작 확인은 리뷰 환경에서 수행해야 합니다.

검증 결과

  • 검증 내용: xcrun swift-format lint --recursive --strict Paxo PaxoTests 통과; macOS Debug xcodebuild ... CODE_SIGNING_ALLOWED=NO build 통과; macOS xcodebuild ... CODE_SIGNING_ALLOWED=NO test 83개 통과. 기존 기록 이전·중복 이전 방지, 과목 생성·이름 변경·재지정·삭제·재시작 후 복원, 무료/Pro 검색 범위, 구독 하향 시 열린 기록의 접근 범위, 과목별 묶음과 기록·이미지 보존을 자동 테스트했습니다. 실제 Pro 계정에서의 UI 수동 조작은 이 작업 환경에 해당 계정이 없어 실행하지 못했습니다.
  • API Contract 앱·프록시 양쪽 반영 여부: 해당 없음. 서버 API와 프록시를 변경하지 않았습니다.
  • 시크릿 포함 여부: 없음. 변경 파일만 명시적으로 스테이징했고 시크릿 패턴 검사 및 Paxo/Secrets.swift gitignore 상태를 확인했습니다.

- 기존 프리셋 기록을 로컬 과목으로 이전하고 과목 생성·수정·삭제·지정을 지원

- 무료 최신 10개, Pro 최대 100개와 과목별 보기 적용

- 기록 보존 및 접근 제한 테스트와 도메인 문서 갱신
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

AI 사전 코드 리뷰 (파일럿)

검토 SHA: 2608e25ad112 · 방식: 증분
상태: 미해결 0 · 해결 0 · 오탐 2 · 위험 수용 0
AI 호출: 2/20

HistoryBrowser에 `shouldClose` 헬퍼 메서드를 추가하여 AppState의 히스토리 접근 제어(닫기 처리) 로직을 순수 함수로 분리하고, 이에 대한 단위 테스트를 작성한 refactoring PR입니다. 기존 동작과 동일하며 추가적인 문제점은 없습니다.

ID 심각도 확신·구분 위치 문제 상태
AX-09ce21693308 critical high · confirmed Paxo/Storage/SubjectStore\.swift:22 SubjectPreset 열거형에 정의되지 않은 .licenseExam 케이스를 참조하여 빌드 오류가 발생합니다. false-positive
AX-a03bc3e2d3be critical high · confirmed PaxoTests/SubjectHistoryTests\.swift:13 테스트 코드에서 존재하지 않는 SubjectPreset.licenseExam을 참조하여 테스트 빌드가 실패합니다. false-positive

Finding 상세

  • AX-09ce21693308 판정: false-positive — SubjectPreset.licenseExam은 Paxo/Models.swift 47행에 이미 정의되어 있으며 동일 SHA의 macOS 빌드와 테스트가 통과했습니다.
  • AX-a03bc3e2d3be 판정: false-positive — 테스트가 참조하는 SubjectPreset.licenseExam은 Paxo/Models.swift 47행에 정의되어 있고 동일 SHA의 전체 테스트 82개가 통과했습니다.

사람의 판정: /ai-review false-positive AX-... 이유(10자 이상), /ai-review accepted-risk AX-... 이유(10자 이상), /ai-review reopen AX-...
AI 결과는 승인이나 머지 조건을 대체하지 않습니다.

@hyesngy hyesngy self-assigned this Oct 16, 2026
@hyesngy

hyesngy commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

/ai-review false-positive AX-09ce21693308 SubjectPreset.licenseExam은 Paxo/Models.swift 47행에 이미 정의되어 있으며 동일 SHA의 macOS 빌드와 테스트가 통과했습니다.

@hyesngy

hyesngy commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

/ai-review false-positive AX-a03bc3e2d3be 테스트가 참조하는 SubjectPreset.licenseExam은 Paxo/Models.swift 47행에 정의되어 있고 동일 SHA의 전체 테스트 82개가 통과했습니다.

@hyesngy
hyesngy merged commit d01b12f into develop Oct 16, 2026
7 checks passed
@hyesngy
hyesngy deleted the feat/pro-subject-history branch October 16, 2026 06:32
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.

docs: 풀이 기록 과목 분류 도메인 기록

1 participant