프로젝트

일반

사용자정보

새기능 #5818

이호영이(가) 약 한달 전에 변경

## 개요 

 신청기관 명부 엑셀을 올려 기관을 등록하고, 기관마다 Mattermost 채널을 자동으로 만든다. 엑셀 매크로의 M01·M07에 해당하는 부분이다. 

 ## 명부 시드 

 `신유형 신청목록` 시트를 읽어 기관을 upsert한다. 재실행해도 안전하다 — 이미 있는 기관은 갱신, 없는 기관만 생성. 명부가 바뀔 때마다 다시 올리는 운영이라 이 성질이 필요했다. 

 ## 채널 2종 구조 

 기관마다 비공개 채널을 **둘씩** 만든다. 

 | 채널 | 들어가는 사람 | 쓰임새 | 
 |---|---|---| 
 | `NNN_기관명 (문정원)` | 기관담당자 + 문정원 | 업무협의 | 
 | `NNN_기관명 (법률검토)` | 변호사 + 문정원 | 법률검토 | 

 이 구조 덕에 **기관담당자와 변호사가 서로의 대화를 보지 못한다.** 나중에 요구사항으로 올라온 격리 조건이 이미 충족된 상태였다. 

 ## 재실행 안전성 

 1. DB에 채널 ID가 있으면 그대로 쓴다 (CACHED) 
 2. 없으면 Mattermost에서 이름으로 찾아 ID를 복구한다 (RECOVERED) 
 3. 그래도 없으면 새로 만든다 (CREATED) 

 버튼을 여러 번 눌러도 채널이 중복 생성되지 않는다. 

 ## 특이사항 

 - 엑셀 숫자 셀이 `1.0` 식으로 읽혀 연번이 깨졌다. 반올림 문자열로 바꾸고, 수식 셀은 캐시된 결과를 읽도록 처리. 
 - 시드 서비스의 중복 집계가 틀리고 트랜잭션 범위가 좁았다. 좀았다. 파일 안에 같은 연번이 중복된 경우도 두 번째는 갱신으로 세도록 고쳤다. 
 - 채널 프로비저닝에서 DB 저장이 실패해도 예외가 안 넘어오는 구간이 있었다. Mattermost에는 채널이 만들어졌는데 DB에는 ID가 안 남는 상태가 될 수 있어 예외 범위를 넓혔다.

뒤로