사요자 대시보드 추가
This commit is contained in:
@@ -1,127 +1,400 @@
|
||||
# 회원가입 플로우 개편 검증 보고서
|
||||
# B01_Dashboard 구현 검증 계획
|
||||
|
||||
## 구현 완료 항목
|
||||
|
||||
### 1. DB 변경
|
||||
- ✅ `db_management/003_register_split.sql` 생성
|
||||
- `users.status` ENUM에 `'NO_COMPANY'` 추가
|
||||
- 회원가입 시 회사 정보 NULL로 시작하도록 변경
|
||||
|
||||
### 2. 백엔드 변경
|
||||
- ✅ `A07_Register_Schema.py` 수정
|
||||
- `RegisterRequest` 필드: `email`, `password`, `password_confirm`, `name`, `position`, `phone`, `terms_agreed`, `privacy_agreed`, `marketing_agreed`, `terms_version`
|
||||
- 회사 관련 필드 전부 제거
|
||||
- `password_confirm` 검증 추가
|
||||
|
||||
- ✅ `common_util_auth_repository.py` 수정
|
||||
- `create_registration()`: 회사/join_request 생성 로직 제거, users INSERT만 수행
|
||||
- `complete_registration()`: 무조건 `status = 'NO_COMPANY'`로 변경
|
||||
|
||||
- ✅ `A07_Register_Router.py` 수정
|
||||
- `request_registration()`: `password_confirm` 제외 처리
|
||||
|
||||
- ✅ `A06_Login_Router.py` 수정
|
||||
- `request_login()`: `status not in ("ACTIVE", "NO_COMPANY")` 체크로 변경
|
||||
- `current_session()`: 응답에 `company_id`, `is_master` 추가
|
||||
|
||||
- ✅ `common_util_auth.py` 수정
|
||||
- `require_company()` dependency 추가
|
||||
|
||||
- ✅ `main.py` 수정
|
||||
- B03~B06 라우터에 `require_company` 의존성 추가
|
||||
|
||||
### 3. 리소스 파일
|
||||
- ✅ `resources/legal/terms_of_service.txt` 생성
|
||||
- ✅ `resources/legal/privacy_policy.txt` 생성
|
||||
- ✅ `resources/legal/marketing_consent.txt` 생성
|
||||
|
||||
### 4. 프론트엔드 변경
|
||||
- ✅ `A07_Register_Api_Fetch.ts` 수정
|
||||
- `RegisterPayload` 필드 축소
|
||||
|
||||
- ✅ `A07_Register_UI_Auth_Page.ts` 전면 재작성
|
||||
- 필드: name, position, email, phone, password, passwordConfirm, terms/privacy/marketing (아코디언)
|
||||
- 약관 텍스트 파일 로드 기능
|
||||
- OTP 입력 창 기존 로직 유지
|
||||
|
||||
- ✅ `A00_Common/router.ts` 수정
|
||||
- B02~B11 라우트: company_id 없으면 B01로 리다이렉트
|
||||
|
||||
- ✅ `ui_template_locale.ts` 수정
|
||||
- `A07_Register_Field_Position`, `A07_Register_Field_Phone`, `A07_Register_Field_PasswordConfirm`
|
||||
- `A07_Register_Error_PasswordMismatch` 추가
|
||||
|
||||
- ✅ `A07_Register_UI_Style.css` 수정
|
||||
- `.a07-register__agreement` 아코디언 스타일 추가
|
||||
|
||||
- ✅ `A06_Login_Api_Fetch.ts` 수정
|
||||
- `SessionUser` 인터페이스에 `company_id`, `is_master` 추가
|
||||
|
||||
## 검증 방법
|
||||
|
||||
### 1차 검증: 가입 및 이메일 인증
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
브라우저에서:
|
||||
1. `/#/a07-register` 접속
|
||||
2. 필드 확인: name, position, email, phone, password, passwordConfirm, 약관(3개)
|
||||
3. 약관 체크박스 옆 라벨 클릭 → `<details>` 펼쳐서 내용 표시 확인
|
||||
4. 모든 필드 입력 후 "회원가입" 버튼 클릭
|
||||
5. → 폼 하단에 OTP 입력 칸 노출 확인
|
||||
6. 콘솔 로그 또는 메일에서 OTP 확인하여 입력
|
||||
7. "이메일 인증 완료" 버튼 클릭
|
||||
8. → 로그인 페이지로 리다이렉트 확인
|
||||
|
||||
### 2차 검증: DB 상태 확인
|
||||
```sql
|
||||
SELECT id, email, status, company_id, role, is_master FROM users WHERE email = 'test@example.com';
|
||||
```
|
||||
예상 결과:
|
||||
- `status` = 'NO_COMPANY'
|
||||
- `company_id` = NULL
|
||||
- `role` = 'MEMBER'
|
||||
- `is_master` = FALSE
|
||||
|
||||
### 3차 검증: 로그인 및 상태
|
||||
1. 가입한 계정으로 로그인 시도 → 성공 확인 (기존에는 status != ACTIVE로 실패했을 부분)
|
||||
2. 로그인 후 B02_PROJ_REGISTER (`/#/b02-proj-register`) 접속 시도 → B01_ACCOUNT로 리다이렉트 확인
|
||||
|
||||
### 4차 검증: 회사 없이 B02+ 접근 차단
|
||||
B01_ACCOUNT 페이지는 아직 구현되지 않았으므로, 라우팅 가드만 동작 확인:
|
||||
- `/#/b03-file-input` 직접 접속 → B01로 리다이렉트되거나 403 응답 확인 (백엔드 require_company 에러)
|
||||
|
||||
## 향후 구현 필요 항목
|
||||
|
||||
1. **B01_AccountDetail 백엔드 구현** (예정)
|
||||
- `GET /api/account/me` — 현재 계정 상세
|
||||
- `PATCH /api/account/me` — 이름/직급/전화번호 수정
|
||||
- `POST /api/account/company/create` — 신규 회사 생성
|
||||
- `POST /api/account/company/join` — 기존 회사 참여 신청
|
||||
|
||||
2. **B01_AccountDetail 프론트엔드 구현** (예정)
|
||||
- 계정 정보 표시/수정 폼
|
||||
- "회사 생성" 섹션
|
||||
- "회사 검색·연결" 섹션
|
||||
|
||||
3. **라우팅 가드 최종 테스트** (기준 마련 후)
|
||||
- 회사 연결 후 B02~B11 접근 가능 확인
|
||||
|
||||
## 완료 상태
|
||||
|
||||
🟢 **계획서 기반 구현 완료 (1단계~3단계)**
|
||||
- DB 마이그레이션
|
||||
- 백엔드 로직 수정
|
||||
- 프론트엔드 UI/라우팅
|
||||
|
||||
🟡 **B01_AccountDetail 백엔드/프론트엔드는 별도 태스크 (4단계)**
|
||||
|
||||
🟢 **최종 검증 가능 (3차까지)**
|
||||
- 회원가입, 이메일 인증, NO_COMPANY 상태 확인
|
||||
- 로그인 가능 (NO_COMPANY 상태)
|
||||
- B02+ 접근 차단 동작 확인
|
||||
**상태:** 구현 전 설계 검증 단계
|
||||
**참고:** 완료된 검증은 `.agent/complete_and_old/plan_register_split_validation_COMPLETED.md` 참조
|
||||
|
||||
---
|
||||
|
||||
**마지막 업데이트:** 2026-01-07
|
||||
**상태:** 1단계 구현 완료, B01_AccountDetail은 별도 작업
|
||||
## 📋 B01_Dashboard 구현 체크리스트
|
||||
|
||||
B01_Dashboard 페이지는 로그인 후 메인 랜딩 페이지로, 역할에 따라 다양한 섹션을 동적으로 표시합니다.
|
||||
|
||||
### 현재 상태
|
||||
|
||||
- ✅ 기본 설계 완료
|
||||
- ❌ **백엔드 API 미구현** (역할별 엔드포인트)
|
||||
- ❌ **프론트엔드 UI 미구현** (역할별 컴포넌트)
|
||||
- ❌ **DB 스키마 업데이트 미실행** (사용자/회사/조직 테이블)
|
||||
|
||||
### 구현 필요 항목
|
||||
|
||||
#### DB 스키마 업데이트
|
||||
```
|
||||
[ ] users 테이블 컬럼 추가
|
||||
[ ] role (ENUM: SYSTEM_ADMIN, ADMIN, USER)
|
||||
[ ] is_master (BOOLEAN)
|
||||
[ ] status (ENUM: PENDING_EMAIL, NO_COMPANY, PENDING, ACTIVE, INACTIVE, REJECTED)
|
||||
[ ] last_login (DATETIME)
|
||||
[ ] auth_expires_at (DATETIME)
|
||||
|
||||
[ ] 신규 테이블 생성
|
||||
[ ] join_requests 테이블
|
||||
[ ] system_audit_logs 테이블
|
||||
[ ] system_resources 테이블
|
||||
```
|
||||
|
||||
#### 백엔드 (B01_Dashboard)
|
||||
```
|
||||
[ ] B01_Dashboard_Router.py 신규 생성
|
||||
# 공통 API
|
||||
[ ] GET /api/dashboard/me
|
||||
[ ] PATCH /api/dashboard/me
|
||||
|
||||
# USER 역할 API
|
||||
[ ] GET /api/dashboard/user/projects
|
||||
[ ] GET /api/dashboard/user/company
|
||||
[ ] GET /api/dashboard/user/companies?q=
|
||||
[ ] POST /api/dashboard/user/company/create
|
||||
[ ] POST /api/dashboard/user/company/join
|
||||
|
||||
# ADMIN 역할 API
|
||||
[ ] GET /api/dashboard/admin/members
|
||||
[ ] POST /api/dashboard/admin/members
|
||||
[ ] DELETE /api/dashboard/admin/members/{user_id}
|
||||
[ ] GET /api/dashboard/admin/join-requests
|
||||
[ ] PATCH /api/dashboard/admin/join-requests/{request_id}
|
||||
[ ] GET /api/dashboard/admin/projects
|
||||
|
||||
# SYSTEM_ADMIN 역할 API
|
||||
[ ] GET /api/dashboard/admin/companies
|
||||
[ ] GET /api/dashboard/admin/users
|
||||
[ ] PATCH /api/dashboard/admin/users/{user_id}/role
|
||||
[ ] PATCH /api/dashboard/admin/users/{user_id}/company
|
||||
[ ] GET /api/dashboard/admin/join-requests-all
|
||||
[ ] PATCH /api/dashboard/admin/join-requests/{request_id}/approve
|
||||
[ ] GET /api/dashboard/admin/audit-logs
|
||||
[ ] GET /api/dashboard/admin/resources
|
||||
|
||||
[ ] B01_Dashboard_Schema.py 신규 생성
|
||||
[ ] UpdateUserRequest
|
||||
[ ] CreateCompanyRequest
|
||||
[ ] JoinCompanyRequest
|
||||
[ ] AddMemberRequest
|
||||
[ ] ProcessJoinRequest
|
||||
[ ] ChangeUserRoleRequest
|
||||
[ ] AssignCompanyRequest
|
||||
|
||||
[ ] B01_Dashboard_Repository.py 신규 생성
|
||||
[ ] 사용자 정보 조회/수정 SQL
|
||||
[ ] 회사 조회/생성 SQL
|
||||
[ ] 팀원 조회/추가/제거 SQL
|
||||
[ ] 가입 신청 조회/승인/거절 SQL
|
||||
[ ] 시스템 로그 조회 SQL
|
||||
[ ] 리소스 모니터링 SQL
|
||||
```
|
||||
|
||||
#### 프론트엔드 (B01_Dashboard)
|
||||
```
|
||||
[ ] B01_Dashboard_UI_Page.ts 신규 생성
|
||||
[ ] 역할별 섹션 조건부 렌더링
|
||||
[ ] ProjectListSection (USER, ADMIN)
|
||||
[ ] CompanyInfoSection (USER, ADMIN)
|
||||
[ ] TeamMembersSection (ADMIN)
|
||||
[ ] JoinRequestsSection (ADMIN)
|
||||
[ ] ResourceStatusSection (SYSTEM_ADMIN)
|
||||
[ ] CompanyManagementSection (SYSTEM_ADMIN)
|
||||
[ ] UserManagementSection (SYSTEM_ADMIN)
|
||||
[ ] JoinRequestsManagementSection (SYSTEM_ADMIN)
|
||||
[ ] SystemAuditLogsSection (SYSTEM_ADMIN)
|
||||
[ ] SystemResourcesGraphSection (SYSTEM_ADMIN)
|
||||
[ ] ProfileSection (모든 역할)
|
||||
|
||||
[ ] B01_Dashboard_Api_Fetch.ts 신규 생성
|
||||
[ ] fetchDashboardMe()
|
||||
[ ] updateUserProfile()
|
||||
[ ] fetchUserProjects()
|
||||
[ ] fetchUserCompany()
|
||||
[ ] searchCompanies()
|
||||
[ ] createCompany()
|
||||
[ ] joinCompany()
|
||||
[ ] fetchCompanyMembers()
|
||||
[ ] addCompanyMember()
|
||||
[ ] removeCompanyMember()
|
||||
[ ] fetchCompanyJoinRequests()
|
||||
[ ] processJoinRequest()
|
||||
[ ] fetchCompanyProjects()
|
||||
[ ] fetchAllCompanies()
|
||||
[ ] fetchAllUsers()
|
||||
[ ] changeUserRole()
|
||||
[ ] assignUserToCompany()
|
||||
[ ] fetchAllJoinRequests()
|
||||
[ ] systemApproveJoinRequest()
|
||||
[ ] fetchAuditLogs()
|
||||
[ ] fetchSystemResources()
|
||||
|
||||
[ ] B01_Dashboard_UI_Style.css 신규 생성
|
||||
[ ] 역할별 섹션 레이아웃
|
||||
[ ] 프로젝트 리스트 테이블 스타일
|
||||
[ ] 워크플로우 진행도 시각화
|
||||
[ ] 팝업 모달 스타일
|
||||
[ ] 그래프/차트 영역 스타일
|
||||
|
||||
[ ] ui_template_locale.ts 확장
|
||||
[ ] 역할별 섹션 제목 및 버튼 문구
|
||||
[ ] 회사 관리, 팀원 관리, 가입 요청 관련 문구
|
||||
[ ] 시스템 로그, 리소스 모니터링 관련 문구
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 기능 상세 검증 항목
|
||||
|
||||
### 프로젝트 리스트 워크플로우 표시
|
||||
|
||||
**UI 검증 포인트:**
|
||||
- [ ] 각 프로젝트별 진행도 정상 계산 (B03~B09 단계 기준)
|
||||
- [ ] 워크플로우 단계 버튼 활성화/비활성화 정상 작동
|
||||
- [ ] 완료된 단계 클릭 시 해당 페이지로 이동
|
||||
- [ ] 진행 중 단계 클릭 시 현재 진행 상태 표시
|
||||
- [ ] 미진행 단계 클릭 시 반응 없음 (비활성화 상태 유지)
|
||||
|
||||
**데이터 검증 포인트:**
|
||||
- [ ] projects.status 값이 올바르게 매핑되는지 확인
|
||||
- [ ] 프로젝트명, 지역, 수정일 정상 표시
|
||||
- [ ] [+ 신규 프로젝트] 버튼 클릭 시 B02_ProjRegister로 이동
|
||||
|
||||
### 회사 상태 섹션 (USER 역할)
|
||||
|
||||
**상태별 UI 검증:**
|
||||
- [ ] `status = 'NO_COMPANY'`: "회사 미연결" + [회사 생성] [회사 찾기] 버튼
|
||||
- [ ] `status = 'PENDING'`: "가입 승인 대기 중 (회사명)" 표시
|
||||
- [ ] `status = 'ACTIVE'`: "회사명 (ACTIVE)" + [회사 변경] 버튼
|
||||
|
||||
**회사 생성 팝업 검증:**
|
||||
- [ ] [회사 생성] 클릭 시 모달 팝업 노출
|
||||
- [ ] 회사 정보 입력 (이름, 사업자등록번호, 주소, 대표자명)
|
||||
- [ ] [생성] 클릭 시 API 호출 (로딩 오버레이 표시)
|
||||
- [ ] 성공 메시지 표시 후 페이지 자동 새로고침
|
||||
- [ ] DB 확인: users.role = 'ADMIN', is_master = TRUE, status = 'ACTIVE'
|
||||
|
||||
**회사 검색/신청 팝업 검증:**
|
||||
- [ ] [회사 찾기] 클릭 시 모달 팝업 노출
|
||||
- [ ] 검색어 입력 → [검색] 클릭
|
||||
- [ ] 회사 리스트 표시 (회사명, 사업자번호)
|
||||
- [ ] 회사 선택 후 [신청] 클릭
|
||||
- [ ] DB 확인: join_requests 생성, users.status = 'PENDING'
|
||||
|
||||
### 팀원 관리 섹션 (ADMIN 역할)
|
||||
|
||||
**팀원 추가 검증:**
|
||||
- [ ] [+ 팀원 추가] 클릭 시 모달 팝업 노출
|
||||
- [ ] 기가입 사용자 이메일 입력 → [검색]
|
||||
- [ ] 사용자 정보 표시 (이메일, 이름, 직급)
|
||||
- [ ] [추가] 클릭 시 API 호출
|
||||
- [ ] DB 확인: users.company_id 업데이트
|
||||
- [ ] 중복 추가 시 "이미 팀원입니다" 오류 메시지
|
||||
|
||||
**팀원 리스트 표시:**
|
||||
- [ ] 현재 회사의 모든 팀원 조회 (테이블)
|
||||
- [ ] 이메일, 이름, 직급, 부서, 역할, 상태 정상 표시
|
||||
- [ ] [제거] 버튼 클릭 시 팀원 제거
|
||||
|
||||
### 가입 요청 섹션 (ADMIN 역할)
|
||||
|
||||
**가입 요청 리스트 검증:**
|
||||
- [ ] 이 회사에 신청한 사용자 리스트 표시
|
||||
- [ ] 신청자 이메일, 신청일, 상태 정상 표시
|
||||
- [ ] [승인] 클릭 시 join_requests.status = 'APPROVED'
|
||||
- [ ] [거절] 클릭 시 join_requests.status = 'REJECTED'
|
||||
- [ ] 사용자에게 결과 이메일 발송
|
||||
|
||||
### 시스템 관리 섹션 (SYSTEM_ADMIN 역할)
|
||||
|
||||
**리소스 현황 검증:**
|
||||
- [ ] CPU, 메모리, 디스크 사용률 실시간 표시
|
||||
- [ ] 활성 사용자 수, 활성 프로젝트 수 표시
|
||||
|
||||
**회사 관리 검증:**
|
||||
- [ ] 전체 회사 리스트 조회 (테이블)
|
||||
- [ ] 회사명, 사업자번호, 상태, 사용자 수 정상 표시
|
||||
- [ ] [+ 회사 추가] 버튼 (회사 신규 생성)
|
||||
|
||||
**사용자 관리 검증:**
|
||||
- [ ] 전체 사용자 리스트 조회 (테이블)
|
||||
- [ ] 이메일, 이름, 역할, 회사, 상태 정상 표시
|
||||
- [ ] [역할 변경] 클릭 시 역할 선택 팝업
|
||||
- [ ] [회사 할당] 클릭 시 회사 선택 팝업
|
||||
|
||||
**시스템 로그 검증:**
|
||||
- [ ] 전체 로그 조회 (테이블)
|
||||
- [ ] 사용자, 행동(LOGIN, USER_CREATE 등), 대상, 타임스탬프 정상 표시
|
||||
- [ ] 기간, 사용자, 행동 유형별 필터링 정상 작동
|
||||
|
||||
**리소스 모니터링 그래프:**
|
||||
- [ ] CPU 사용량 그래프 (시간대별)
|
||||
- [ ] 메모리 사용량 그래프
|
||||
- [ ] 디스크 사용량 그래프
|
||||
- [ ] 동시 접속자 수 추이 그래프
|
||||
|
||||
### 인증 갱신 검증
|
||||
|
||||
**로그인 기반 인증 갱신:**
|
||||
- [ ] 로그인 성공 시 users.last_login 업데이트
|
||||
- [ ] users.auth_expires_at = NOW() + 3개월 설정
|
||||
- [ ] 유효한 인증: auth_expires_at > NOW() → 바로 대시보드 이동
|
||||
- [ ] 만료된 인증: auth_expires_at <= NOW() → 재인증 모달 표시
|
||||
|
||||
---
|
||||
|
||||
## 통합 테스트 시나리오 (다음 단계)
|
||||
|
||||
### 시나리오 1: 회사 생성 (USER → ADMIN 전환)
|
||||
|
||||
**前提:**
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
**테스트 단계:**
|
||||
1. 새로 가입한 계정으로 로그인 → B01_Dashboard 진입
|
||||
2. 회사 상태: "회사 미연결" 표시 확인
|
||||
3. [회사 생성] 클릭 → 모달 팝업 노출
|
||||
4. 회사 정보 입력:
|
||||
```
|
||||
회사명: "테스트회사"
|
||||
사업자등록번호: "123-45-67890"
|
||||
주소: "서울시 강남구"
|
||||
대표자명: "김테스트"
|
||||
```
|
||||
5. [생성] 클릭 → API 호출
|
||||
6. 성공 메시지 → 페이지 자동 새로고침
|
||||
|
||||
**검증:**
|
||||
```sql
|
||||
SELECT id, email, company_id, role, is_master, status
|
||||
FROM users
|
||||
WHERE email = 'test@example.com';
|
||||
```
|
||||
|
||||
**예상 결과:**
|
||||
- `company_id` = 생성된 회사 ID
|
||||
- `role` = 'ADMIN'
|
||||
- `is_master` = TRUE
|
||||
- `status` = 'ACTIVE'
|
||||
|
||||
**라우팅 확인:**
|
||||
- B02_ProjRegister 접속 가능 ✅
|
||||
- 팀원 관리, 가입 요청 섹션 표시 ✅
|
||||
|
||||
---
|
||||
|
||||
### 시나리오 2: 회사 참여 신청 (USER → PENDING → ACTIVE)
|
||||
|
||||
**전제:** 계정1이 회사 생성 완료 (시나리오 1 수행)
|
||||
|
||||
**테스트 단계:**
|
||||
1. 새로 가입한 계정2로 로그인 → B01_Dashboard 진입
|
||||
2. 회사 상태: "회사 미연결" + [회사 찾기] 클릭
|
||||
3. 검색 팝업 → "테스트회사" 검색
|
||||
4. 회사 선택 → [신청] 클릭 → API 호출
|
||||
|
||||
**검증 (계정2):**
|
||||
```sql
|
||||
SELECT * FROM join_requests WHERE user_id = 2;
|
||||
```
|
||||
- `status` = 'PENDING'
|
||||
|
||||
```sql
|
||||
SELECT status FROM users WHERE id = 2;
|
||||
```
|
||||
- `status` = 'PENDING'
|
||||
|
||||
5. 계정2로 B02_ProjRegister 접속 시도 → B01_Dashboard로 리다이렉트 (회사 승인 대기 알림)
|
||||
|
||||
**관리자 승인 (계정1):**
|
||||
1. 계정1로 로그인 → B01_Dashboard
|
||||
2. "가입 요청" 섹션 → 계정2의 신청 표시
|
||||
3. [승인] 클릭
|
||||
|
||||
**검증 (계정2):**
|
||||
```sql
|
||||
SELECT status FROM users WHERE id = 2;
|
||||
```
|
||||
- `status` = 'ACTIVE'
|
||||
- `company_id` = 1
|
||||
|
||||
4. 계정2로 B02_ProjRegister 접속 가능 ✅
|
||||
|
||||
---
|
||||
|
||||
### 시나리오 3: 팀원 추가 (ADMIN만 접근 가능)
|
||||
|
||||
**전제:** 계정1이 회사 생성 완료, 계정2와 계정3이 회원가입 완료
|
||||
|
||||
**테스트 단계:**
|
||||
1. 계정1 (ADMIN)로 로그인 → B01_Dashboard
|
||||
2. "팀원 관리" 섹션 → [+ 팀원 추가]
|
||||
3. 계정2의 이메일 입력 → [검색]
|
||||
4. 계정2 선택 → [추가]
|
||||
|
||||
**검증:**
|
||||
```sql
|
||||
SELECT company_id FROM users WHERE id = 3; -- 계정2
|
||||
```
|
||||
- `company_id` = 1 (회사ID)
|
||||
|
||||
5. 팀원 리스트에 계정2 표시 ✅
|
||||
6. 계정2로 로그인 → B02_ProjRegister 접속 가능 ✅
|
||||
|
||||
---
|
||||
|
||||
### 시나리오 4: 시스템 관리자 기능 (SYSTEM_ADMIN만 접근)
|
||||
|
||||
**전제:** SYSTEM_ADMIN 계정 준비 (DB에서 직접 역할 설정)
|
||||
|
||||
**테스트 단계:**
|
||||
1. SYSTEM_ADMIN 계정으로 로그인 → B01_Dashboard
|
||||
2. "리소스 현황" 섹션 → CPU/MEM/DISK 사용률 표시 확인
|
||||
3. "회사 관리" 섹션 → 전체 회사 리스트 조회 ✅
|
||||
4. "사용자 관리" 섹션 → 전체 사용자 리스트 조회 ✅
|
||||
5. "사용자 역할 변경" → 계정2를 ADMIN으로 전환
|
||||
6. "가입 요청 관리" → 전체 가입 신청 조회/승인 ✅
|
||||
7. "시스템 로그" → 로그인/계정 생성 이력 필터링 조회 ✅
|
||||
8. "리소스 모니터링" → 그래프 표시 ✅
|
||||
|
||||
---
|
||||
|
||||
## 최종 체크리스트
|
||||
|
||||
### 구현 단계
|
||||
```
|
||||
✅ DB 스키마 설계 완료 (사용자/회사/조직 5개 테이블)
|
||||
✅ 백엔드 API 설계 완료 (역할별 엔드포인트)
|
||||
✅ 프론트엔드 구조 설계 완료 (역할별 컴포넌트)
|
||||
|
||||
⏳ DB 마이그레이션 (다음 AI 작업)
|
||||
⏳ 백엔드 API 구현 (다음 AI 작업)
|
||||
⏳ 프론트엔드 UI 구현 (다음 AI 작업)
|
||||
```
|
||||
|
||||
### 검증 단계
|
||||
```
|
||||
[ ] 시나리오 1: 회사 생성 (USER → ADMIN 전환)
|
||||
[ ] 시나리오 2: 회사 참여 신청 (USER → PENDING → ACTIVE)
|
||||
[ ] 시나리오 3: 팀원 추가 (ADMIN)
|
||||
[ ] 시나리오 4: 시스템 관리자 기능 (SYSTEM_ADMIN)
|
||||
[ ] 인증 갱신 로직 검증 (로그인 기반 3개월 연장)
|
||||
```
|
||||
|
||||
### 라우팅 가드 검증
|
||||
```
|
||||
[ ] NO_COMPANY 상태 → B02 접근 시 B01으로 리다이렉트
|
||||
[ ] PENDING 상태 → B02 접근 시 B01으로 리다이렉트
|
||||
[ ] ACTIVE 상태 → B02~B11 정상 접근
|
||||
[ ] 역할별 대시보드 섹션 정상 표시
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 예상 완료 일정
|
||||
|
||||
- **계획/설계:** ✅ 완료
|
||||
- **DB 마이그레이션:** 다음 세션 (코더 AI 담당)
|
||||
- **백엔드 API 구현:** 다음 세션 (코더 AI 담당)
|
||||
- **프론트엔드 UI 구현:** 다음 세션 (코더 AI 담당)
|
||||
- **통합 테스트 및 검증:** 다음 세션 (사용자 검증)
|
||||
|
||||
---
|
||||
|
||||
**마지막 업데이트:** 2025-07-08 (설계 완료)
|
||||
**다음 단계:** DB 마이그레이션 및 백엔드 API 구현
|
||||
|
||||
Reference in New Issue
Block a user