Files
Aislo/.agent/plan_register_split_validation.md
T

16 KiB

B01_Dashboard 구현 검증 계획

상태: 구현 전 설계 검증 단계 참고: 완료된 검증은 .agent/complete_and_old/plan_register_split_validation_COMPLETED.md 참조


📋 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 확장
    [ ] 역할별 섹션 제목 및 버튼 문구
    [ ] 회사 관리, 팀원 관리, 가입 요청 관련 문구
    [ ] 시스템 로그, 리소스 모니터링 관련 문구

기능 상세 검증 항목

프로젝트 리스트 및 워크플로우 표시 (USER, ADMIN 공통)

UI 검증 포인트:

  • 프로젝트 테이블 정상 렌더링 (프로젝트명, 지역, 진행도, 워크플로우, 수정일)
  • 각 프로젝트별 진행도 정상 계산 (완료 단계 수 / 6 × 100%)
  • 진행도 시각화 [●●●○○○] 정상 표시
  • 워크플로우 단계 버튼 활성화/비활성화:
    • 완료된 단계 (파란색): 클릭 가능 → 해당 페이지로 이동
    • 진행 중 단계 (주황색): 강조 표시, 클릭해도 현재 페이지 유지
    • 미진행 단계 (회색): 클릭 불가 (비활성화 상태)
  • [+ 신규 프로젝트] 버튼 클릭 시 B02_ProjRegister로 이동

데이터 검증 포인트:

  • projects.status 값이 올바르게 매핑되는지 확인
    • NEW → B03 단계
    • FILE_UPLOADED → B03 완료, B04 시작
    • WF1_ANALYZING → B04 진행 중
    • WF1_COMPLETE → B04 완료, B05 시작
    • (계속...)
  • 프로젝트명, 지역, 수정일 정상 표시
  • 사용자의 프로젝트만 조회되는지 확인 (projects.user_id 필터링)

회사 프로젝트 조회 (ADMIN용)

검증 포인트:

  • ADMIN 계정에서 "회사 프로젝트" 섹션 표시 여부
  • 회사에 속한 모든 프로젝트 조회 (본인이 생성하지 않은 프로젝트 포함)
  • 프로젝트명, 소유자, 지역, 진행도, 상태 정상 표시
  • 프로젝트 클릭 시 해당 페이지로 이동 (USER 프로젝트도 접근 가능한지 확인)

회사 상태 섹션 (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() → 재인증 모달 표시

구현 완료 현황

완료된 항목

DB 마이그레이션

  • users.role (ENUM: SYSTEM_ADMIN, ADMIN, USER) 추가
  • users.is_master (BOOLEAN) 추가
  • users.status (ENUM: PENDING_EMAIL, NO_COMPANY, PENDING, ACTIVE, INACTIVE, REJECTED) 추가
  • users.department (TEXT) 추가
  • users.last_login (DATETIME) 추가
  • users.auth_expires_at (DATETIME) 추가
  • join_requests 테이블 생성 + review_comment 컬럼 추가
  • system_audit_logs 테이블 생성
  • system_resources 테이블 생성
  • 기존 데이터 변환 (MASTER → ADMIN, MEMBER → USER)

백엔드 API

  • B01_Dashboard_Router.py 구현
  • B01_Dashboard_Repository.py 구현
  • B01_Dashboard_Schema.py 구현
  • 공통 API (GET/PATCH /api/dashboard/me)
  • USER 역할 API (프로젝트, 회사 관련)
  • ADMIN 역할 API (팀원, 가입 요청 관련)
  • SYSTEM_ADMIN 역할 API (전체 조회/관리)
  • main.py에 라우터 등록

프론트엔드 UI

  • B01_Dashboard_UI_Page.ts (역할별 섹션 조건부 렌더링)
  • B01_Dashboard_Api_Fetch.ts (API 클라이언트)
  • B01_Dashboard_UI_Style.css (스타일링)
  • ui_template_locale.ts 확장 (다국어 문구)
  • router.ts 업데이트 (B01 라우팅)

인증/세션

  • PENDING 상태 사용자도 B01 대시보드 접근 허용
  • auth_expires_at을 이메일 인증 완료 시 3개월 뒤로 설정
  • 로그인 시 last_login, auth_expires_at 갱신
  • 기본 역할을 USER로 표준화

코드 검증

  • TypeScript 검사 통과
  • Python Ruff 검사 통과
  • DB 마이그레이션 적용 확인
  • 폴더 정리 (B01_AccountDetail 삭제, B01_Dashboard 통합)

남은 항목

브라우저 실제 검증 필요

  • 로그인 후 B01_Dashboard 페이지 렌더링 확인
  • 역할별 섹션 정상 표시 (USER, ADMIN, SYSTEM_ADMIN)
  • 각 기능별 실제 동작 테스트 (아래 시나리오 참고)

통합 테스트 시나리오 (다음 단계)

시나리오 1: 회사 생성 (USER → ADMIN 전환)

前提:

python main.py

테스트 단계:

  1. 새로 가입한 계정으로 로그인 → B01_Dashboard 진입
  2. 회사 상태: "회사 미연결" 표시 확인
  3. [회사 생성] 클릭 → 모달 팝업 노출
  4. 회사 정보 입력:
    회사명: "테스트회사"
    사업자등록번호: "123-45-67890"
    주소: "서울시 강남구"
    대표자명: "김테스트"
    
  5. [생성] 클릭 → API 호출
  6. 성공 메시지 → 페이지 자동 새로고침

검증:

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):

SELECT * FROM join_requests WHERE user_id = 2;
  • status = 'PENDING'
SELECT status FROM users WHERE id = 2;
  • status = 'PENDING'
  1. 계정2로 B02_ProjRegister 접속 시도 → B01_Dashboard로 리다이렉트 (회사 승인 대기 알림)

관리자 승인 (계정1):

  1. 계정1로 로그인 → B01_Dashboard
  2. "가입 요청" 섹션 → 계정2의 신청 표시
  3. [승인] 클릭

검증 (계정2):

SELECT status FROM users WHERE id = 2;
  • status = 'ACTIVE'
  • company_id = 1
  1. 계정2로 B02_ProjRegister 접속 가능

시나리오 3: 팀원 추가 (ADMIN만 접근 가능)

전제: 계정1이 회사 생성 완료, 계정2와 계정3이 회원가입 완료

테스트 단계:

  1. 계정1 (ADMIN)로 로그인 → B01_Dashboard
  2. "팀원 관리" 섹션 → [+ 팀원 추가]
  3. 계정2의 이메일 입력 → [검색]
  4. 계정2 선택 → [추가]

검증:

SELECT company_id FROM users WHERE id = 3;  -- 계정2
  • company_id = 1 (회사ID)
  1. 팀원 리스트에 계정2 표시
  2. 계정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 구현