# BroSister 관리자 페이지

BroSister의 모든 앱(아가노트, 밸런스픽 등)을 관리할 수 있는 웹 기반 관리자 패널입니다.

## 🚀 설치 및 실행

### 1. 서버 시작
```bash
cd D:/source/works/kssoft/flutter_project/app-master-back
npm start
# 또는 개발 모드로
npm run dev
```

서버가 실행되면 다음 주소로 접속할 수 있습니다:
- API: http://localhost:5001
- 관리자 페이지: http://localhost:5001/admin

## 👤 관리자 권한 부여

### 1. 데이터베이스 접속
MySQL에 접속하여 다음 SQL을 실행합니다.

### 2. 관리자 권한 부여
```sql
-- 특정 이메일 사용자를 전체 앱 관리자로 설정
UPDATE users
SET is_admin = TRUE,
    admin_apps = '["all", "babynote", "balancepick"]'
WHERE email = 'your-admin@example.com';
```

**주의**: `your-admin@example.com`을 실제 관리자 이메일로 변경하세요.

### 3. 권한 확인
```sql
SELECT id, email, name, is_admin, admin_apps
FROM users
WHERE is_admin = TRUE;
```

## 📱 주요 기능

### 1. 대시보드
- 전체 통계 확인 (가족 수, 일기 수, 사용자 수, 댓글 수)
- 앱별 통계 조회

### 2. 가족 관리
- 전체 가족 목록 조회
- 가족 검색
- 가족 구성원 확인
- 가족 상세 정보 조회

### 3. 일기 관리
- 전체 일기 목록 조회
- 일기 검색 및 필터링
- 일기 삭제
- 일기 상세 보기

### 4. 일기 작성 (관리자 권한)
- 가족 선택
- 해당 가족 구성원 중 작성자 선택
- 일기 정보 입력:
  - 일기 날짜
  - 마일스톤 (첫 미소, 첫 이유식, 첫 이빨, 첫 말, 첫 걸음마, 생일, 예방접종, 건강검진)
  - 제목
  - 내용
  - 이미지 URL (선택)

## 🔐 로그인 방법

1. http://localhost:5001/admin 접속
2. 관리자 권한이 부여된 이메일 입력
3. 로그인 버튼 클릭

**참고**: 현재는 이메일만으로 로그인합니다. users 테이블에 이미 OAuth로 등록된 사용자만 로그인 가능합니다.

## 🎯 사용 시나리오

### 시나리오 1: 관리자가 특정 가족에 일기 작성하기

1. 좌측 사이드바에서 "일기 작성" 클릭
2. 가족 선택 드롭다운에서 대상 가족 선택
3. 작성자 선택 드롭다운에서 해당 가족 구성원 선택
4. 일기 정보 입력:
   - 일기 날짜 설정
   - 마일스톤 선택 (선택사항)
   - 제목, 내용 입력
   - 이미지 URL 입력 (선택사항)
5. "일기 작성" 버튼 클릭
6. 작성 완료 후 자동으로 일기 관리 페이지로 이동

### 시나리오 2: 특정 가족의 일기 조회하기

1. 좌측 사이드바에서 "가족 관리" 클릭
2. 검색바에서 가족명 또는 초대코드로 검색
3. 해당 가족의 "상세" 버튼 클릭
4. 가족 구성원 및 일기 목록 확인

### 시나리오 3: 부적절한 일기 삭제하기

1. 좌측 사이드바에서 "일기 관리" 클릭
2. 전체 일기 목록 조회
3. 삭제할 일기의 "삭제" 버튼 클릭
4. 확인 팝업에서 "확인" 클릭

## 🔧 API 엔드포인트

### 인증
- POST `/api/admin/login` - 관리자 로그인
- GET `/api/admin/me` - 현재 로그인한 관리자 정보 조회

### 아가노트 관리
- GET `/api/admin/babynote/stats` - 통계 조회
- GET `/api/admin/babynote/dashboard?days=30` - 대시보드 상세 지표(일일 추이/공개 비율/TOP 태그·마일스톤/최근 일기)
- GET `/api/admin/babynote/users` - 사용자 목록(가족 구성/탈퇴요청 포함)
- GET `/api/admin/babynote/users/by-id/:userId` - 사용자 상세(가족 구성/아기정보/탈퇴요청 포함)
- GET `/api/admin/babynote/families` - 가족 목록 조회
- GET `/api/admin/babynote/families/:familyId/members` - 가족 구성원 조회
- GET `/api/admin/babynote/diaries` - 일기 목록 조회
- POST `/api/admin/babynote/diaries` - 일기 작성
- DELETE `/api/admin/babynote/diaries/:diaryId` - 일기 삭제

### 요청 헤더
모든 관리자 API 요청에는 다음 헤더가 필요합니다:
```
Authorization: Bearer <JWT_TOKEN>
```

## 📝 일기 작성 API 예시

```bash
curl -X POST http://localhost:5001/api/admin/babynote/diaries \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "familyId": "05d737ea-f38f-4263-acf0-e5d8822923e5",
    "userId": "user-id-here",
    "eventDate": "2025-01-15",
    "milestone": "first_smile",
    "title": "우리 아기 첫 미소",
    "content": "오늘 처음으로 활짝 웃었어요!",
    "imageUrl": "https://example.com/image.jpg"
  }'
```

## 🛡️ 보안 주의사항

1. **관리자 권한은 신중하게 부여하세요**
   - 필요한 최소한의 사용자에게만 부여
   - 정기적으로 권한 검토

2. **JWT 시크릿 키 변경**
   - `.env` 파일에 `JWT_SECRET` 설정 필요
   - 프로덕션 환경에서는 강력한 시크릿 키 사용

3. **비밀번호 추가 구현 권장**
   - 현재는 이메일만으로 로그인
   - 프로덕션에서는 비밀번호 해싱 추가 필요

## 🐛 트러블슈팅

### 로그인이 안 됩니다
1. users 테이블에 해당 이메일이 존재하는지 확인
2. is_admin이 TRUE로 설정되어 있는지 확인
3. 브라우저 콘솔에서 에러 메시지 확인

### 일기 작성이 안 됩니다
1. 선택한 유저가 해당 가족의 구성원인지 확인
2. babynote_family_members 테이블에 매핑이 있는지 확인
3. 네트워크 탭에서 API 응답 확인

### 관리자 페이지가 로드되지 않습니다
1. 서버가 실행 중인지 확인
2. public/admin 디렉토리에 파일이 있는지 확인
3. server.js에 관리자 라우트가 등록되어 있는지 확인

## 📞 문의

문제가 발생하거나 새로운 기능이 필요한 경우 개발팀에 문의하세요.
