Files
Tornado3_2026Election/INTEGRATION_NOTES_2026-04-15.md
2026-04-20 20:06:18 +09:00

141 lines
6.0 KiB
Markdown

# 2026-04-15 통합 작업 메모
이 문서는 2026-04-15에 시작한 연동 점검 메모를 2026-04-18 기준으로 현행화한 기록이다.
## 0. 작업 요약
- SBS 선거 API 기준 실연동 범위를 `광역단체장(3)`, `기초단체장(4)`, `교육감(11)`으로 정리했다.
- 선거 종류 변경 시 실제 SBS `선거구` 코드 기준으로 지역 목록과 요청 코드가 맞물리도록 보정했다.
- `기초단체장` 지역 옵션 교체 중 발생하던 `ArgumentNullException (key)``ObservableCollection during CollectionChanged` 계열 UI 전환 이슈를 방어 로직으로 정리했다.
- `교육감`, `기초단체장` 사전 방송용 데이터 공백은 저장형 사전데이터(JSON)로 보완했다.
- 사전데이터는 `사전데이터` 페이지에서 조회/수정/저장 가능하게 만들었다.
- `사전_역대당선자*` 계열은 표기 정당과 색상 포맷 정당을 분리해 저장할 수 있게 했다.
- 직함 표기는 광역단체장만이 아니라 `광역단체장`, `교육감`, `기초단체장` 전 컷으로 확대했다.
- 컷 카탈로그는 실제 `.tscn` 이름 기준으로 정리했고, 과거 별칭은 호환용 alias로만 유지한다.
- 컷 썸네일은 `Assets/Thumbnail`에 저장하고, 제어 패널과 컷리스트에서 프리뷰를 표시하도록 정리했다.
## 1. 선거 종류별 연동 결과
### `3` 광역단체장
- 선거구 목록: `sungerInfo/region?type=선거구&sungerType=3`
- 개표 요청: `gaepyo/3/sungergus?ids=<선거구 id>`
- 사전 투표율 요청: `tupyo/3/sidos?ids=<시도 id>`
- 결론:
- 개표 연동 정상
- 사전 투표율 연동 정상
### `4` 기초단체장
- 선거구 목록: `sungerInfo/region?type=선거구&sungerType=4`
- 개표 요청: `gaepyo/4/sungergus?ids=<선거구 id>`
- 결론:
- 개표 연동 정상
- SBS API 사전 투표율은 미지원
- 사전 방송용 역사 데이터는 저장형 사전데이터에서 제공
### `11` 교육감
- 선거구 목록: `sungerInfo/region?type=선거구&sungerType=11`
- 개표 요청: `gaepyo/11/sungergus?ids=<선거구 id>`
- 결론:
- 개표 연동 정상
- SBS API 사전 투표율은 미지원
- 사전 방송용 역사 데이터는 저장형 사전데이터에서 제공
## 2. SBS API 제한 사항
- `tupyo/4/...` 계열은 현재 `기초단체장`에 대해 `400`을 반환한다.
- `tupyo/11/...` 계열은 현재 `교육감`에 대해 `400`을 반환한다.
- 위 두 경우는 앱 오류가 아니라 API 제공 범위 밖으로 본다.
- 실제 운영에서는 저장형 사전데이터로 공백을 메운다.
## 3. 저장형 사전데이터 운영
- 저장 위치: `Tornado3_2026Election/Assets/Data/pre_election_history.json`
- 2026-04-18 기준 저장 건수:
- `광역단체장` 17건
- `교육감` 17건
- `기초단체장` 262건
- 페이지 기능:
- 선거 종류/지역 선택
- 역대 투표율 카드
- 역대 당선자 카드
- 엑셀형 편집
- 저장
- `사전_역대당선자`, `사전_역대당선자_교육감`, `사전_역대당선자_기초단체장``ColorParty`를 저장할 수 있다.
## 4. 지역 선택 / 전환 안정화
- `DistrictName`, `DistrictCode`, `ElectionType`는 내부적으로 null이 아닌 문자열 상태를 유지한다.
- 지역 옵션 교체 중에는 `_isUpdatingDistrictOptions` 플래그로 transient UI 값을 무시한다.
- 사전데이터용 지역 콤보박스도 별도 `_isUpdatingPreElectionHistoryDistrictOptions` 플래그로 같은 문제를 피한다.
- 선택 변경 뒤에는 debounce 후 자동 재조회한다.
## 5. 직함 표기 확대
- 현재 직함 표기는 `광역단체장`, `교육감`, `기초단체장` 전부에 적용한다.
- 적용 대상 변수:
- `선거구명`
- `시도명`
- `RegionName`
- `ElectionDistrictName`
- `DistrictName`
- 예:
- `서울특별시` -> `서울시장`
- `전라남도` -> `전라남도지사`
- `부산광역시` -> `부산광역시교육감`
- `창원시` -> `창원시장`
## 6. 컷 카탈로그 / 실제 씬 파일
- 현재 카탈로그는 실제 존재하는 `.tscn` 파일명 기준으로 정리했다.
- 2026-04-18 기준 canonical 카탈로그:
- Bottom 15컷
- Normal 63컷
- Top 11컷
- 총 89컷
- 기존에 사용되던 `_L`, `_END`, `_7680` 계열은 현재 카탈로그에서 제거했다.
- 다만 저장된 큐/상태 복원을 위해 legacy format alias는 유지한다.
- 전수 감사 기준 실제 씬 누락은 `0건`이다.
## 7. 썸네일
- 저장 위치: `Assets/Thumbnail/<template.Id>.png`
- 제어 패널의 컷 선택 콤보박스에서 프리뷰 표시
- `컷리스트` 페이지에서 전체 현황 확인
- `썸네일 생성` 기능은 Karisma에 씬을 로드해 320x180 PNG로 저장
## 8. 변수 매핑 관련 기록
- Karisma 장면 변수 지원 범위 로깅을 유지한다.
- 다음 alias 매핑을 보강했다.
- `기준시`, `기준시01`, `기준시02`
- `유권자수`, `유권자수01`
- `투표자수`, `투표자수01`
- `득표수바NN`
- `정당원NN`
- `정당색NN`
- 역사 당선자 컷은 저장형 사전데이터의 `ColorParty`와 정당 별칭 정규화를 함께 사용한다.
## 9. 주요 변경 파일
- `Tornado3_2026Election/Services/SbsElectionApiClient.cs`
- `Tornado3_2026Election/ViewModels/DataViewModel.cs`
- `Tornado3_2026Election/ViewModels/MainViewModel.cs`
- `Tornado3_2026Election/ViewModels/ChannelScheduleViewModel.cs`
- `Tornado3_2026Election/Services/PreElectionHistoryService.cs`
- `Tornado3_2026Election/Services/CutThumbnailAssetCatalog.cs`
- `Tornado3_2026Election/Services/KarismaThumbnailGeneratorService.cs`
- `Tornado3_2026Election/Services/FormatCatalogService.cs`
- `Tornado3_2026Election/Services/KarismaTornado3Adapter.cs`
## 10. 현재 체크 결과
- `dotnet build .\\Tornado3_2026Election\\Tornado3_2026Election.csproj` 통과
- 기존 경고는 유지
- `WindowsBase` 참조 충돌
- MSIX 인증서 경고
- `MockTornado3Adapter.ConnectionChanged` 미사용 경고
- 컷 카탈로그 감사 결과 실제 씬 누락 `0건`