# Agent Meeting: Admin Features & Drive Integration

*   **Date**: 2026-02-13
*   **Topic**: Implementation Strategy for User Group Management and Google Drive Integration
*   **Participants**: PM, Planner, Backend, Frontend, Data, QA

## 1. Agenda
1.  **User Group Management**: Distinguishing Internal (Incar) vs External Users.
2.  **Google Drive Integration**: Using Admin's specific Google Drive folder (5TB) for file storage.

## 2. Discussion

### 🧑‍💼 PM (Project Manager)
*   사용자 요청에 따라 두 가지 기능의 우선순위와 스펙을 정해야 합니다.
*   **Group Management**: 현재 구글 로그인 시 누구나 접근 가능한 구조(Closed Policy 적용 전제)인데, '우리 조직'과 '외부인'을 명확히 구분해야 합니다.
*   **Drive Integration**: 서버 스토리지 비용 절감을 위해 관리자의 대용량 구글 드라이브를 활용하고자 합니다.

### 📝 Planner
*   **Group Management**:
    *   `Role`: `Admin` (관리자), `Member` (정회원/조직원), `Guest` (외부인/준회원).
    *   기본적으로 가입 시 `Guest` 상태. 관리자가 승인하면 `Member`로 승격.
    *   접근 권한: `Guest`는 Public 문서만 열람 가능? 혹은 아예 접근 불가? -> *User Decision Needed*. (일단 'Closed Group' 정책상 승인 전에는 접근 불가로 하는 것이 안전)
*   **Drive Integration**:
    *   지식 카드(문서) 하단에 '첨부파일' 섹션 추가.
    *   업로드 시: 사용자는 일반 파일 업로드처럼 보임 -> 실제로는 관리자 Drive에 저장.
    *   다운로드 시: Drive 링크 제공.

### 🔧 Backend
*   **Group Management**:
    *   Firebase Auth `Custom Claims` 사용 추천. (`admin: true`, `member: true`)
    *   JWT 토큰에 역할 정보가 포함되므로 보안 규칙(Firestore Rules) 설정이 용이함.
    *   API: `POST /api/admin/approve` (유저 승격).
*   **Drive Integration**:
    *   **Google Drive API** 사용.
    *   **Service Account** (서비스 계정) 필수.
    *   관리자가 본인의 5TB 드라이브 폴더를 해당 서비스 계정 이메일(`...@...iam.gserviceaccount.com`)에 '편집자' 권한으로 공유.
    *   서버는 서비스 계정 권한으로 해당 폴더에 파일 업로드/삭제 수행.
    *   *Issue*: Next.js API Route(Vercel)의 실행 시간 제한(10초~60초). 대용량 파일 업로드 시 타임아웃 가능성 있음.
    *   *Solution*: **Pre-signed URL** 방식은 S3용이라 Drive엔 불가. 대신 **Resumable Upload** API 구현 필요. 혹은 클라이언트에서 직접 Drive로 올리는 방법은 보안상(Access Token 노출) 위험. Vercel Pro가 아니면 스트리밍 업로드 한계가 명확함. -> *일단 작은 파일(10MB 이하) 위주로 먼저 구현하고, 대용량은 추후 고려.*

### 🎨 Frontend
*   **Admin Page**:
    *   `/admin/users`: 회원 목록, 승인/반려 버튼, 등급 변경 드롭다운.
*   **File UI**:
    *   `ReflectEditor` 내부에 파일 블록 추가 or 문서 하단 별도 영역?
    *   사용 편의성을 위해 문서 하단 '첨부파일' 섹션을 별도로 두는 것이 구현이 빠름.

### 🛡️ QA & Security
*   **Drive**: 서비스 계정 키(JSON) 관리가 매우 중요. Vercel Env Var에 확실히 등록해야 함.
*   **Role**: 관리자 페이지(` /admin/**`)에 대한 Middleware단 접근 통제 필수.

## 3. Conclusion & Action Items

### A. User Group Management (우선순위 높음)
1.  **Schema**: `users` 컬렉션에 `role` 필드 추가 (`guest` | `member` | `admin`).
2.  **Auth**: 가입 시 기본 `guest`.
3.  **UI**: 관리자용 유저 관리 페이지 구현.

### B. Google Drive Integration (난이도 높음)
1.  **Setup**: Google Cloud Project 생성 -> Drive API Enable -> Service Account 생성.
2.  **Share**: 관리자 사용자가 본인 Drive 폴더를 서비스 계정에 공유.
3.  **Dev**: 파일 업로드 API 구현 (Multer or Web Streams).

## 4. Question to User
1.  **가입 승인제**: 가입 직후(`Guest`)에는 **아예 아무것도 못 보게(로그인 전과 동일)** 할까요, 아니면 **Public 문서는 보게** 할까요? (Closed Policy상 전자가 맞을 듯)
2.  **드라이브 용량**: 업로드할 파일의 일반적인 크기는 어느 정도인가요? (Vercel 타임아웃 고려)
