Repository navigation
Conversation
국내 독립·예술영화관 다수가 공용으로 사용하는 디트릭스(Dtryx) 예매 플랫폼 어댑터를 추가합니다. 기존 CGV·롯데시네마·메가박스로는 조회되지 않던 예술영화 전용관 22곳의 상영 정보를 조회할 수 있습니다. - MCP 도구 3종: dtryx_list_cinemas / dtryx_list_now_showing / dtryx_get_remaining_seats - GET API 3종: /api/dtryx/cinemas, /api/dtryx/movies, /api/dtryx/seats - 공개 엔드포인트로 직접 호출하므로 Zyte 를 경유하지 않고 API 키도 필요 없습니다. - PlaySDT 는 YYYY-MM-DD 로만 동작하고 YYYYMMDD 는 조용히 0건을 반환하므로 클라이언트에서 항상 변환합니다. - 극장 목록 반환 엔드포인트가 없어 확인된 극장을 catalog.ts 상수로 관리합니다. - src/index.ts 가 이미 449줄이어서 서비스 추가 시 450줄 제한을 넘기므로 도메인 라우트 등록을 registerServiceRoutes.ts 로 분리했습니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CGV·롯데시네마·메가박스가 모두 location.ts 를 쓰고 있어 파일명을 맞췄습니다. 디트릭스 응답에는 극장 좌표가 없어 좌표 기반 근접 검색 대신 극장명 매칭만 제공한다는 점을 헤더 주석에 남겼습니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Author
|
극장 좌표가 없어 근접 검색을 넣지 못한다고 적었는데, 주소는 확인이 가능해서 정리해 둡니다. 나중에 좌표 테이블을 붙이거나 지역 필터를 넣을 때 참고가 될 것 같습니다. 출처는 디트릭스 극장 페이지(
지역 분포는 서울 7, 경기 3, 인천 1, 충청 3, 영남 5, 호남 3 입니다. 한 가지 참고로, 낭만극장과 허리우드클래식은 주소가 같습니다(종로 낙원상가 건물). 좌표 기반 근접 검색을 넣게 되면 두 극장이 같은 지점으로 나오는 점을 고려해야 할 것 같습니다. 주소를 |
극장 목록에 광역 지역명과 도로명 주소를 담고, 지역으로 조회 범위를 좁히는 필터를 추가했습니다. 전국 22개 극장을 모두 조회하지 않고 서울·경기 등 특정 지역만 훑을 수 있습니다. - DtryxCinema 에 region, address 필드 추가 (극장 22곳) - findCinemasByRegion() 추가 - dtryx_list_cinemas, dtryx_get_remaining_seats 에 region 파라미터 추가 - GET /api/dtryx/cinemas, /api/dtryx/seats 에 region 쿼리 추가 주소는 디트릭스 극장 페이지의 안내 정보를 기준으로 정리했습니다. 좌표는 제공되지 않아 포함하지 않았고, 근접 검색도 그대로 제외되어 있습니다. 낭만극장과 허리우드클래식은 같은 건물이라 주소가 동일합니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Author
|
위 주소 표를
실제 동작입니다. 주소를 코드에 두는 것이 부담스러우시면 되돌리고 지역 필드만 남기는 것도 가능합니다. |
Owner
|
오...디트릭스 예술영화관..!! 감사합니다 퇴근하면 바로 볼게요 |
Coverage 게이트(100%)를 통과하지 못해 보완했습니다. - 앱 통합 테스트(tests/app/app-api-dtryx.test.ts)를 추가해 라우트 등록을 검증합니다. 기존 메가박스·롯데시네마와 같은 방식입니다. - 기본값 대입, 정렬 동률, 극장 해석 분기 등 남은 경로를 tests/services/dtryx/ coverage.test.ts 로 채웠습니다. - 좌석 조회 핸들러의 try/catch 를 제거했습니다. Promise.allSettled 로 극장별 실패를 흡수하므로 예외가 전파되지 않아 도달할 수 없는 코드였습니다. 개별 실패는 기존대로 failedCinemas 로 보고합니다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
변경 요약
dtryx_list_cinemas/dtryx_list_now_showing/dtryx_get_remaining_seats)과 GET API 3종(/api/dtryx/cinemas,/api/dtryx/movies,/api/dtryx/seats)을 추가했습니다.region파라미터로 조회 범위를 좁힐 수 있게 했습니다. 전국 22곳을 모두 훑지 않고 서울·경기만 조회하는 경로가 생깁니다.src/index.ts가 이미 449줄이어서 서비스를 추가하면 450줄 제한을 넘기므로, 도메인 라우트 등록을src/api/routes/registerServiceRoutes.ts로 분리했습니다.관련 이슈
체크리스트
npm run format:check통과npm run lint통과npm run typecheck통과npm test통과문서는 서비스 목록 표기 방식에 맞춰 수정하는 편이 좋을 것 같아 아직 손대지 않았습니다. 원하시는 위치를 알려주시면 반영하겠습니다.
테스트 방법
테스트는 49개를 추가했습니다(
1644 → 1693). 모두 mock 기반이라 네트워크에 의존하지 않습니다.tests/services/dtryx/client.test.ts— 날짜 변환, 좌석 계산, HTTP 오류, 타임아웃tests/services/dtryx/location.test.ts— 코드 중복, 브랜드 유효성, 키워드·지역 검색, 주소와 지역 표기 정합성tests/services/dtryx/index.test.ts— 프로바이더 메타데이터, 도구 등록tests/services/dtryx/tools/dtryxTools.test.ts— 도구 3종 정상·에러 경로tests/api/dtryx-handlers.test.ts— GET API 3종, 404/500 처리실제 응답으로 확인한 결과입니다.
참고 사항
리뷰에서 봐주시면 좋을 지점들입니다.
1. 폴더명을 브랜드명이 아니라 플랫폼명(
dtryx)으로 두었습니다.BrandCd3종이 모두 공개 브랜드가 아니어서입니다.etc는 미분류 버킷이고,spacedog는 라이카시네마의 사업자명이며,indieart는 극장 페이지에 노출되지 않는 내부 분류 코드로 보입니다. 브랜드 단위로 나누면etc/폴더가 생기고 클라이언트가 3중 중복됩니다. 다른 배치를 원하시면 맞추겠습니다.2.
findNearbyTheaters는 넣지 않았습니다.디트릭스 응답에 극장 좌표가 없어서 위치 기반 검색을 만들 수 없었습니다. 좌표를 임의로 채우는 것은 피하고, 대신 극장명 키워드로 찾는
dtryx_list_cinemas를 두었습니다. 좌표 테이블을 하드코딩하는 방향을 원하시면 알려주세요.3. 극장 목록을
location.ts상수로 관리합니다.브랜드/극장 목록을 반환하는 공개 엔드포인트를 찾지 못했습니다. 상영시간표 응답의
CinemaNm으로 확인된 22곳만 담았고,indieart/000068과etc/000086은 상영 가능 날짜는 있으나 편성 회차가 없어 극장명을 확인하지 못해 제외했습니다. 카탈로그에 없는 극장도brandCode와 함께 지정하면 조회됩니다. 다른 영화관 서비스와 파일명을 맞추려고location.ts에 두었지만, 좌표가 없어 근접 검색 대신 극장명·지역 매칭만 담당한다는 점을 헤더 주석에 적어두었습니다. 지역과 주소는 디트릭스 극장 페이지의 안내 정보를 기준으로 채웠고, 낭만극장과 허리우드클래식은 같은 건물이라 주소가 동일합니다.4.
PlaySDT날짜 형식이 함정입니다.YYYY-MM-DD로만 동작하고YYYYMMDD는 오류 없이RecordCount: 0을 반환합니다. 클라이언트에서 항상 변환하고 테스트로 고정했습니다.5. 운영 비용에는 영향이 없습니다.
src/services/lottecinema/client.ts처럼fetch로 직접 호출하므로 Zyte 를 경유하지 않고 API 키 발급·관리도 없습니다.6. CLI 명령은 포함하지 않았습니다.
메가박스도 서버 측만 제공하고 있어 같은 범위로 맞췄습니다. 필요하시면 후속 PR 로
dtryx-*명령을 추가하겠습니다.7. Windows 환경 참고사항 (이 PR 과 무관)
tests/app/cli.test.ts의직접 실행 여부를 올바르게 판별한다는 Windows 에서 실패합니다.fileURLToPath('file:///tmp/test.js')가 드라이브 문자가 없어File URL path must be absolute를 던지기 때문입니다. 이 브랜치 이전 커밋에서도 동일하게 재현되어 별도 사안으로 두었습니다. 위1686집계는 이 1건을 제외한 수치입니다.