새기능 #5818
이호영이(가) 약 한달 전에 변경
## 개요
신청기관 명부 엑셀을 올려 기관을 등록하고, 기관마다 Mattermost 채널을 자동으로 만든다. 엑셀 매크로의 M01·M07에 해당하는 부분이다.
## 명부 시드
`신유형 신청목록` 시트를 읽어 기관을 upsert한다. 재실행해도 안전하다 — 이미 있는 기관은 갱신, 없는 기관만 생성. 명부가 바뀔 때마다 다시 올리는 운영이라 이 성질이 필요했다.
## 채널 2종 구조
기관마다 비공개 채널을 **둘씩** 만든다.
| 채널 | 들어가는 사람 | 쓰임새 |
|---|---|---|
| `NNN_기관명 (문정원)` | 기관담당자 + 문정원 | 업무협의 |
| `NNN_기관명 (법률검토)` | 변호사 + 문정원 | 법률검토 |
이 구조 덕에 **기관담당자와 변호사가 서로의 대화를 보지 못한다.** 나중에 요구사항으로 올라온 격리 조건이 이미 충족된 상태였다.
## 재실행 안전성
1. DB에 채널 ID가 있으면 그대로 쓴다 (CACHED)
2. 없으면 Mattermost에서 이름으로 찾아 ID를 복구한다 (RECOVERED)
3. 그래도 없으면 새로 만든다 (CREATED)
버튼을 여러 번 눌러도 채널이 중복 생성되지 않는다.
## 특이사항
- 엑셀 숫자 셀이 `1.0` 식으로 읽혀 연번이 깨졌다. 반올림 문자열로 바꾸고, 수식 셀은 캐시된 결과를 읽도록 처리.
- 시드 서비스의 중복 집계가 틀리고 트랜잭션 범위가 좁았다. 좀았다. 파일 안에 같은 연번이 중복된 경우도 두 번째는 갱신으로 세도록 고쳤다.
- 채널 프로비저닝에서 DB 저장이 실패해도 예외가 안 넘어오는 구간이 있었다. Mattermost에는 채널이 만들어졌는데 DB에는 ID가 안 남는 상태가 될 수 있어 예외 범위를 넓혔다.
뒤로