# 084 마이그레이션 — COMPANY_MNG 라이프사이클 컬럼 추가

작성일: 2026-04-24
작성자: gbpark
관련: 회사 관리 화면 비활성화/템플릿 트래킹 기능

## 목적

회사 관리 화면의 "비활성화 + 템플릿 탭 + 라이프사이클 이벤트" 지원을 위해
`COMPANY_MNG` 에 메타 필드 3 개 추가.

## 추가 컬럼

| 컬럼 | 타입 | 기본값 | 용도 |
|---|---|---|---|
| `INSTALLED_GROUPS` | `JSONB` | `'[]'::jsonb` | 프로비저닝 시 설치된 `TableGroup` id 배열 (예: `["SCREEN","CONTROL","BATCH","DASHBOARD"]`). 템플릿 탭 렌더에 사용 |
| `DEACTIVATED_AT` | `TIMESTAMP` | `NULL` | `DB_STATUS='suspended'` 가 된 시각. 재활성화 시 NULL 로 리셋 |
| `DEACTIVATION_REASON` | `VARCHAR(200)` | `NULL` | SUPER_ADMIN 이 입력한 비활성화 사유 (감사 로그와 별개로 COMPANY_MNG 에도 즉시 조회용) |

## SQL

```sql
-- 084: 회사 라이프사이클 메타 컬럼
ALTER TABLE COMPANY_MNG
  ADD COLUMN IF NOT EXISTS INSTALLED_GROUPS    JSONB         DEFAULT '[]'::jsonb,
  ADD COLUMN IF NOT EXISTS DEACTIVATED_AT      TIMESTAMP,
  ADD COLUMN IF NOT EXISTS DEACTIVATION_REASON VARCHAR(200);
```

## 실행 (메타 DB 만)

```bash
psql -h 183.99.177.40 -U postgres -d invyone <<'SQL'
ALTER TABLE COMPANY_MNG
  ADD COLUMN IF NOT EXISTS INSTALLED_GROUPS    JSONB         DEFAULT '[]'::jsonb,
  ADD COLUMN IF NOT EXISTS DEACTIVATED_AT      TIMESTAMP,
  ADD COLUMN IF NOT EXISTS DEACTIVATION_REASON VARCHAR(200);
SQL
```

## 기존 회사 row 백필 (선택)

기존에 이미 프로비저닝된 회사 row 는 `INSTALLED_GROUPS` 가 빈 배열로 남음.
프로비저닝 로직이 지금은 선택 그룹 정보를 버리므로 소급 복원 불가 → 빈 배열 유지.
템플릿 탭은 "정보 없음" 으로 표시.

정확한 값이 필요하면 `TableGroup.values()` 의 required=true 3개(SCREEN, CONTROL, BATCH) 는
모든 회사에 필수로 들어갔으므로 최소 백필 가능:

```sql
UPDATE COMPANY_MNG
   SET INSTALLED_GROUPS = '["SCREEN","CONTROL","BATCH"]'::jsonb
 WHERE INSTALLED_GROUPS = '[]'::jsonb
   AND DB_STATUS = 'active';
```

## 롤백

```sql
ALTER TABLE COMPANY_MNG
  DROP COLUMN IF EXISTS INSTALLED_GROUPS,
  DROP COLUMN IF EXISTS DEACTIVATED_AT,
  DROP COLUMN IF EXISTS DEACTIVATION_REASON;
```
