Skip to content

Conversation

@jk-kim0
Copy link
Contributor

@jk-kim0 jk-kim0 commented Jan 29, 2026

Summary

page.v1.yaml의 body.view HTML을 활용하여 외부 Confluence 링크에 대해 정확한 pageId 기반 URL을 생성합니다. 또한 코드 구조 개선을 통해 유지보수성과 가독성을 향상시켰습니다.

Description

기능 구현

  • 링크 매핑 빌드: page.v1.yaml의 body.view HTML을 파싱하여 링크 텍스트 → pageId 매핑을 생성하는 build_link_mapping() 함수 추가
  • pageId 기반 URL 생성: <ac:link><ri:page> 처리 로직에서 링크 매핑을 조회하여 정확한 pageId 기반 Confluence URL 생성
  • 외부 Confluence 링크 처리 (변환 범위 외 페이지):
    • pageId 있음: https://querypie.atlassian.net/wiki/spaces/{space_key}/pages/{page_id}
    • pageId 없음 + space_key 있음: https://querypie.atlassian.net/wiki/spaces/{space_key}/overview (기존 동작 유지)
    • 둘 다 없음: #link-error (기존 동작 유지)

코드 구조 개선 (리팩토링)

  • 외부 링크 처리 함수 분리: resolve_external_link(link_text, space_key, target_title) 함수로 추출

    • pageId 조회 및 URL 생성 로직 캡슐화
    • 명확한 fallback 전략 (pageId → space overview → error link)
    • convert_recursively 메서드 복잡도 감소 (18줄 → 3줄)
  • ac:link 변환 메서드 분리: SingleLineParser.convert_ac_link(node) 메서드로 추출

    • ac:link 노드 변환 로직을 독립적인 메서드로 관리
    • 내부 링크, 외부 링크, space 링크 처리 로직 캡슐화
    • convert_recursively 메서드 복잡도 감소 (54줄 → 3줄)

문서화

  • 링크 유형별 예시 추가: convert_ac_link 메서드의 docstring에 6가지 링크 유형별 상세 예시 추가
    • Internal Page Link: [User Guide](../../user-guide)
    • External Page Link with pageId: [QueryPie Architecture](https://querypie.atlassian.net/wiki/spaces/QCP/pages/400064797)
    • External Page Link without pageId: [Unknown Page](https://querypie.atlassian.net/wiki/spaces/QCP/overview)
    • Space Link: [Confluence Space](https://querypie.atlassian.net/wiki/spaces/QCP/overview)
    • Link with Anchor Fragment: [My Dashboard | section-name](../../my-dashboard#section-name)
    • Error Case: [Missing Page](#link-error)

Background

#576에서 구현한 외부 링크 처리는 space overview URL만 생성했습니다.
page.xhtml에는 pageId가 포함되지 않지만, page.v1.yaml의 body.view HTML에는
data-linked-resource-id 속성으로 pageId가 포함되어 있어 이를 활용합니다.

Implementation Details

  1. 링크 매핑 빌드: build_link_mapping() 함수가 page.v1.yaml의 body.view HTML을 파싱
  2. 전역 변수 저장: GLOBAL_LINK_MAPPING에 링크 텍스트 → pageId 딕셔너리 저장
  3. 매핑 조회: 외부 링크 처리 시 resolve_external_link() 함수가 링크 텍스트로 pageId 조회
  4. URL 생성: pageId가 있으면 정확한 페이지 URL 생성, 없으면 기존 fallback 로직 사용

Code Quality Improvements

  • 관심사 분리: 각 기능이 독립적인 함수/메서드로 관리
  • 코드 가독성: 복잡한 조건문이 명확한 함수 호출로 대체
  • 유지보수성: 변경 사항 발생 시 해당 함수/메서드만 수정
  • 테스트 용이성: 함수/메서드 단위로 테스트 작성 가능
  • 문서화: 상세한 docstring으로 사용법 및 예시 명시

Test plan

  • 테스트 케이스 1844969501로 검증 완료
    • ✓ QueryPie Architecture → pages/400064797
    • ✓ Advanced Environment Setup → pages/887947577
    • ✓ Advanced Integration Guide → pages/841449834
    • ✓ 릴리스 버전 별 문서 → pages/841351486
    • ✓ Troubleshooting → pages/920486841
  • 기존 pytest 테스트 통과 확인 (55 passed)
  • expected.mdx 업데이트 완료
  • 리팩토링 후 출력 결과 동일성 확인

Related tickets & links

🤖 Generated with Claude Code

## Description
- page.v1.yaml의 body.view HTML을 파싱하여 링크 텍스트 → pageId 매핑을 생성하는 `build_link_mapping` 함수 추가
- `<ac:link><ri:page>` 처리 로직에서 링크 매핑을 조회하여 정확한 pageId 기반 Confluence URL 생성
- 외부 Confluence 링크(변환 범위 외 페이지)에 대해 space overview URL 대신 특정 페이지 URL 생성
  - pageId 있음: `https://querypie.atlassian.net/wiki/spaces/{space_key}/pages/{page_id}`
  - pageId 없음 + space_key 있음: `https://querypie.atlassian.net/wiki/spaces/{space_key}/overview` (기존 동작 유지)
  - 둘 다 없음: `#link-error` (기존 동작 유지)

### Background
#576에서 구현한 외부 링크 처리는 space overview URL만 생성했습니다.
page.xhtml에는 pageId가 포함되지 않지만, page.v1.yaml의 body.view HTML에는
`data-linked-resource-id` 속성으로 pageId가 포함되어 있어 이를 활용합니다.

### Test Results
테스트 케이스 1844969501:
- ✓ QueryPie Architecture → pages/400064797
- ✓ Advanced Environment Setup → pages/887947577
- ✓ Advanced Integration Guide → pages/841449834
- ✓ 릴리스 버전 별 문서 → pages/841351486
- ✓ Troubleshooting → pages/920486841

## Related tickets & links
- #577

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Jan 29, 2026

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

Project Deployment Review Updated (UTC)
querypie-docs Ready Ready Preview, Comment Jan 29, 2026 4:07am

Request Review

## Description
- 외부 링크 URL 생성 로직을 `resolve_external_link` 함수로 추출하여 코드 간결성 향상
- `convert_recursively` 메서드의 복잡도 감소 (18줄 → 3줄)
- 링크 생성 로직의 재사용성 및 테스트 용이성 개선

### Changes
- `resolve_external_link(link_text, space_key, target_title)` 함수 추가
  - pageId 조회 및 URL 생성 로직 캡슐화
  - 명확한 fallback 전략 (pageId → space overview → error link)
- `convert_recursively`에서 외부 링크 처리 부분 간소화

### Benefits
- 코드 가독성 향상
- 단일 책임 원칙 적용
- 유지보수 용이성 증가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link
Contributor

@keIIy-kim keIIy-kim left a comment

Choose a reason for hiding this comment

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

🚀

## Description
- SingleLineParser 클래스에 `convert_ac_link` 메서드 추가
- `convert_recursively` 메서드의 ac:link 처리 블록을 독립적인 메서드로 추출
- 코드 복잡도 감소 및 가독성 향상 (54줄 → 3줄)

### Changes
- `convert_ac_link(node: Tag) -> str` 메서드 추가
  - ac:link 노드를 markdown 링크 형식으로 변환
  - 내부 링크, 외부 링크, space 링크 처리 로직 캡슐화
  - anchor fragment 처리 포함
- `convert_recursively`에서 ac:link 처리 부분 간소화

### Benefits
- **관심사 분리**: ac:link 처리 로직이 독립적인 메서드로 관리됨
- **코드 가독성**: convert_recursively 메서드가 더욱 간결하고 이해하기 쉬워짐
- **유지보수성**: ac:link 관련 수정 시 한 곳만 변경
- **테스트 용이성**: 메서드 단위 테스트 작성 가능

### Test Results
- ✅ 테스트 케이스 1844969501 검증 완료 (출력 동일)
- ✅ pytest 전체 테스트 통과 (55 passed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Description
- `convert_ac_link` 메서드의 docstring에 6가지 링크 유형별 상세 예시 추가
- 각 유형별로 입력 XHTML과 출력 Markdown을 명확하게 문서화

### 추가된 예시
1. **Internal Page Link**: pages.yaml에 있는 페이지 → 상대 경로
2. **External Page Link with pageId**: page.v1.yaml에서 pageId 조회 성공 → 정확한 페이지 URL
3. **External Page Link without pageId**: pageId 조회 실패 → space overview URL
4. **Space Link**: ri:space 태그 → space overview URL
5. **Link with Anchor Fragment**: anchor 속성 포함 → fragment 추가
6. **Error Case**: space key 없음 → #link-error

### Benefits
- 코드 사용자가 각 링크 유형의 변환 결과를 명확하게 이해 가능
- 유지보수 시 예상 동작을 쉽게 파악
- 새로운 개발자의 온보딩 용이성 향상

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jk-kim0 jk-kim0 merged commit 16c7985 into main Jan 29, 2026
7 checks passed
@jk-kim0 jk-kim0 deleted the feat/use-pageid-from-page-v1-yaml branch January 29, 2026 04:12
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.

xhtml-to-mdx: markdown 변환 로직 재검토

3 participants