# InsuWiki 관리자 — "최근 사용일자" 실제 활동 추적 (Phase 2)

## 선행 작업
task-1818 (Phase 1)에서 관리자 페이지에 "최근 사용일자" 컬럼 UI가 추가됨.
현재는 Firebase Auth의 lastSignInTime을 사용 중 → 이를 **실제 사용자 활동 기반**으로 교체.

## 문제
lastSignInTime은 로그인 시점일 뿐, 실제 서비스 사용 여부를 반영하지 않음.
로그인 후 아무것도 안 하고 나갈 수 있음.

## 구현

### 1. Firestore users 컬렉션에 lastActiveAt 필드 추가

**프로젝트**: `/home/jay/projects/insuwiki/`

Firestore `users/{uid}` 문서에 `lastActiveAt: Timestamp` 필드를 추가.

### 2. 주요 활동 시 lastActiveAt 갱신

InsuWiki 서비스에서 **사용자가 실제 활동**할 때 lastActiveAt를 갱신:
- 문서 조회 (document view)
- 문서 편집/저장 (document edit/save)
- 검색 (search)
- 카드 생성/편집 (card create/edit)
- review 페이지 접근 (승인/거절)

**구현 방식** (2가지 중 선택):

**방식 A (권장)**: 미들웨어/API 레벨
- Next.js API route에서 인증된 요청이 올 때마다 lastActiveAt 갱신
- 단, 모든 요청마다 Firestore write하면 비용 과다 → **5분 디바운스** 적용
  - 현재 lastActiveAt이 5분 이내면 스킵
  - 5분 이상 지났으면 갱신

**방식 B**: 클라이언트 측
- 프론트엔드에서 주기적으로(5분마다) heartbeat API 호출
- API가 lastActiveAt 갱신

방식 A가 서버 측에서 확실하게 추적 가능하므로 권장.

### 3. 관리자 API에서 lastActiveAt 조회

task-1818에서 추가한 관리자 사용자 목록 API를 수정:
- Firebase Auth `lastSignInTime` 대신 Firestore `users/{uid}.lastActiveAt` 사용
- lastActiveAt이 없으면 lastSignInTime 폴백 → 그것도 없으면 "-"

### 4. 프론트엔드 표시

task-1818에서 추가한 "최근 사용일자" 컬럼:
- 데이터 소스만 변경 (lastSignIn → lastActive)
- 포맷은 동일 ("2026. 3. 21." 형식)

## 주의사항
- Firestore write 비용 최소화: 5분 디바운스 필수
- 기존 유저는 lastActiveAt이 없으므로 폴백 처리 필요
- Firestore Rules에서 users/{uid} 문서의 lastActiveAt 쓰기 권한 확인

## 검증 시나리오
1. **활동 추적**: InsuWiki에서 문서 조회 → Firestore users/{uid}.lastActiveAt 갱신 확인
2. **디바운스**: 1분 내 연속 조회 → Firestore write 1회만 발생 확인
3. **관리자 표시**: 관리자 페이지에서 실제 활동 시각이 정확히 표시
4. **폴백**: lastActiveAt 없는 유저 → lastSignInTime 또는 "-" 표시
5. **기존 기능**: InsuWiki 서비스 전체 기능 정상 동작 (성능 저하 없음)
