This commit is contained in:
2026-07-15 18:33:33 +09:00
parent 6b1583103f
commit f533082537
201 changed files with 19776 additions and 563 deletions
+59
View File
@@ -0,0 +1,59 @@
---
type: page-api
status: stable
page_id: B01_Dashboard
related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_db]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B01_Dashboard_Router.py 실 코드 직접 확인 (2026-07-12)
---
# B01_Dashboard — API
기본 prefix: `/api/dashboard` (`B01_Dashboard_Router.py:57`). 공통 인증·오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]] 참조.
## 사용자·회사
| 항목 | 위치 | 역할 |
|---|---|---|
| `GET /me` | `B01_Dashboard_Router.py:101` | 로그인 사용자 대시보드 정보 조회 |
| `PATCH /me` | `B01_Dashboard_Router.py:109` | 내 기본정보 수정 |
| `GET /user/projects` | `B01_Dashboard_Router.py:118` | 내 프로젝트와 workflow 상태 조회 |
| `GET /user/company` | `B01_Dashboard_Router.py:123` | 소속 회사 조회 |
| `GET /user/companies` | `B01_Dashboard_Router.py:128` | 가입 대상 회사 검색 |
| `POST /user/company/create` | `B01_Dashboard_Router.py:137` | 회사 생성 후 생성자 연결 |
| `POST /user/company/join` | `B01_Dashboard_Router.py:146` | 회사 가입 신청 |
## 회사 관리자
| 항목 | 위치 | 역할 |
|---|---|---|
| `GET /admin/members` | `B01_Dashboard_Router.py:155` | 회사 팀원 목록 |
| `POST /admin/members` | `B01_Dashboard_Router.py:163` | 이메일로 팀원 추가 |
| `DELETE /admin/members/{user_id}` | `B01_Dashboard_Router.py:174` | 팀원 회사 연결 해제 |
| `GET /admin/join-requests` | `B01_Dashboard_Router.py:183` | 회사 가입 신청 목록 |
| `PATCH /admin/join-requests/{request_id}` | `B01_Dashboard_Router.py:188` | 가입 신청 승인·거절 |
| `GET /admin/projects` | `B01_Dashboard_Router.py:206` | 회사 프로젝트 목록 |
## 프로젝트·자동화
| 항목 | 위치 | 역할 |
|---|---|---|
| `PUT /projects/{project_id}` | `B01_Dashboard_Router.py:214` | 프로젝트 기본정보 수정 |
| `DELETE /projects/{project_id}` | `B01_Dashboard_Router.py:230` | SYSTEM_ADMIN 프로젝트 소프트 삭제 |
| `GET /projects/{project_id}/automations` | `B01_Dashboard_Router.py:366` | 자동화 목록; USER 차단 |
| `POST /projects/{project_id}/automations` | `B01_Dashboard_Router.py:379` | 자동화 생성 |
| `PUT /automations/{automation_id}` | `B01_Dashboard_Router.py:396` | 자동화 수정 |
| `DELETE /automations/{automation_id}` | `B01_Dashboard_Router.py:414` | 자동화 삭제 |
| `POST /automations/{automation_id}/execute` | `B01_Dashboard_Router.py:429` | 자동화 실행시각 기록 |
## 시스템 관리자
| 항목 | 위치 | 역할 |
|---|---|---|
| `GET /admin/companies` | `B01_Dashboard_Router.py:255` | 전체 회사 조회 |
| `POST /admin/companies` | `B01_Dashboard_Router.py:261` | 시스템 관리자 회사 생성 |
| `GET /admin/users` | `B01_Dashboard_Router.py:270` | 전체 사용자 조회 |
| `PATCH /admin/users/{user_id}/role` | `B01_Dashboard_Router.py:276` | 역할 변경과 마지막 ADMIN 보호 |
| `PUT /admin/users/{user_id}` | `B01_Dashboard_Router.py:294` | 사용자 관리정보 수정 |
| `PATCH /admin/users/{user_id}/company` | `B01_Dashboard_Router.py:313` | 사용자 회사 배정·해제 |
| `GET /admin/join-requests-all` | `B01_Dashboard_Router.py:325` | 전체 가입 신청 조회 |
| `PATCH /admin/join-requests/{request_id}/approve` | `B01_Dashboard_Router.py:331` | 시스템 관리자 가입 승인 |
| `GET /admin/audit-logs` | `B01_Dashboard_Router.py:341` | 시스템 감사 로그 페이지 조회 |
| `GET /admin/resources` | `B01_Dashboard_Router.py:351` | 1~90일 리소스 통계 조회 |
| `GET /admin/projects-all` | `B01_Dashboard_Router.py:360` | 전체 프로젝트 조회 |
@@ -0,0 +1,58 @@
---
type: page-backend
status: stable
page_id: B01_Dashboard
related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_api]]", "[[B01_Dashboard/B01_db]]", "[[B01_Dashboard/B01_dependencies]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B01_Dashboard 실 코드 직접 확인 (2026-07-12)
---
# B01_Dashboard — Backend
## 라우터 권한 헬퍼
| 항목 | 위치 | 역할 |
|---|---|---|
| `require_company_admin()` | `B01_Dashboard_Router.py:60` | ADMIN 또는 SYSTEM_ADMIN 의존성 검사 |
| `_require_company_id()` | `B01_Dashboard_Router.py:68` | 세션 회사 ID 필수 검사 |
| `_same_company()` | `B01_Dashboard_Router.py:75` | 요청자와 대상의 회사 일치 검사 |
| `_can_edit_project()` | `B01_Dashboard_Router.py:79` | 역할·회사 기준 프로젝트 수정 검사 |
| `_can_manage_automation()` | `B01_Dashboard_Router.py:87` | 자동화 관리 권한 검사 |
| `_can_edit_user()` | `B01_Dashboard_Router.py:93` | 사용자 수정 범위 검사 |
상세 권한 규칙은 [[../../concepts/auth_rbac]]에서 1차 정의한다.
## 저장소 함수
| 항목 | 위치 | 역할 |
| ----------------------------------------------------------------------------- | ----------------------------------------- | -------------------------- |
| `get_dashboard_me()` / `update_user_profile()` | `B01_Dashboard_Repository.py:47,65` | 내 정보 조회·수정 |
| `get_workflow_states_for_projects()` | `B01_Dashboard_Repository.py:83` | 여러 프로젝트의 workflow 상태 배치 조회 |
| `list_user_projects()` / `list_company_projects()` / `list_all_projects()` | `B01_Dashboard_Repository.py:144,165,188` | 역할 범위별 프로젝트 목록 조회 |
| `get_project()` / `update_project()` / `soft_delete_project()` | `B01_Dashboard_Repository.py:210,222,253` | 프로젝트 조회·수정·소프트 삭제 |
| `get_user_company()` / `search_companies()` | `B01_Dashboard_Repository.py:273,293` | 소속 회사와 회사 검색 |
| `create_company()` / `create_system_company()` | `B01_Dashboard_Repository.py:307,347` | 사용자·시스템 관리자 회사 생성 |
| `join_company()` | `B01_Dashboard_Repository.py:378` | 회사 가입 신청과 사용자 상태 전이 |
| `list_company_members()` / `add_company_member()` / `remove_company_member()` | `B01_Dashboard_Repository.py:401,416,439` | 회사 팀원 관리 |
| `list_join_requests()` / `process_join_request()` | `B01_Dashboard_Repository.py:453,471` | 가입 신청 조회·승인·거절 |
| `list_all_companies()` / `list_all_users()` | `B01_Dashboard_Repository.py:507,522` | 시스템 관리자 전체 목록 |
| `change_user_role()` / `get_user_admin_target()` / `update_admin_user()` | `B01_Dashboard_Repository.py:538,547,562` | 사용자 역할·관리정보 변경 |
| `count_company_admins()` / `assign_user_company()` | `B01_Dashboard_Repository.py:584,596` | 마지막 관리자 보호와 회사 배정 |
| `list_audit_logs()` / `get_system_resources()` | `B01_Dashboard_Repository.py:609,624` | 감사 로그와 리소스 통계 조회 |
| `list_project_automations()` / `create_project_automation()` | `B01_Dashboard_Repository.py:682,696` | 자동화 목록·생성 |
| `get_project_automation()` / `update_project_automation()` | `B01_Dashboard_Repository.py:722,735` | 자동화 단건 조회·수정 |
| `delete_project_automation()` / `mark_project_automation_executed()` | `B01_Dashboard_Repository.py:758,779` | 자동화 삭제·실행시각 기록 |
## 요청 스키마
| 항목 | 위치 | 역할 |
|---|---|---|
| `UpdateUserRequest` | `B01_Dashboard_Schema.py:6` | 내 정보 수정 검증 |
| `CreateCompanyRequest` | `B01_Dashboard_Schema.py:13` | 회사 생성 검증 |
| `JoinCompanyRequest` / `AddMemberRequest` | `B01_Dashboard_Schema.py:20,24` | 회사 가입·팀원 추가 검증 |
| `ProcessJoinRequest` / `ChangeUserRoleRequest` | `B01_Dashboard_Schema.py:28,33` | 가입 처리·역할 변경 검증 |
| `AssignCompanyRequest` / `UpdateProjectRequest` | `B01_Dashboard_Schema.py:37,41` | 회사 배정·프로젝트 수정 검증 |
| `AdminUpdateUserRequest` / `AutomationRequest` | `B01_Dashboard_Schema.py:51,57` | 관리자 사용자 수정·자동화 검증 |
## 기술부채
| 항목 | 위치 | 역할 |
|---|---|---|
| 레거시 상태 추론 | `B01_Dashboard_Repository.py:20` | `_stage_from_status()``project_workflow_stages` 미조회 시 보조값 생성 |
| 700줄 초과 | `B01_Dashboard_Repository.py:1` | 790줄로 프로젝트 단일 파일 제한 초과; 도메인별 저장소 분할 검토 필요 |
+32
View File
@@ -0,0 +1,32 @@
---
type: page-db
status: stable
page_id: B01_Dashboard
related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_api]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B01_Dashboard_Repository.py 실 코드 직접 확인 (2026-07-12)
---
# B01_Dashboard — DB 사용 관계
공유 테이블의 정의는 concepts에만 둔다. 이 문서는 B01의 사용 목적과 실제 접근 위치만 기록한다.
| 항목 | 위치 | 역할 |
|---|---|---|
| `users` | `B01_Dashboard_Repository.py:47` | 내 정보·팀원·전체 사용자·역할·회사 연결 관리 → [[db_schema/users_auth]] |
| `companies` | `B01_Dashboard_Repository.py:273` | 소속·검색·생성·전체 회사 조회 → [[db_schema/users_auth]] |
| `join_requests` | `B01_Dashboard_Repository.py:378` | 회사 가입 신청·승인·거절 → [[db_schema/users_auth]] |
| `projects` | `B01_Dashboard_Repository.py:144` | 역할 범위별 목록·수정·소프트 삭제 → [[db_schema/projects]] |
| `project_workflow_stages` | `B01_Dashboard_Repository.py:83` | 프로젝트 목록의 7단계 상태 배치 조회 → [[workflow_state]] |
| `project_automations` | `B01_Dashboard_Repository.py:682` | 자동화 CRUD와 실행시각 기록 → [[db_schema/projects]] |
| `system_audit_logs` | `B01_Dashboard_Repository.py:245` | 프로젝트·회사·자동화 관리 행위 기록·조회 → [[db_schema/logs_monitoring]] |
| `system_resources` | `B01_Dashboard_Repository.py:624` | 기간별 CPU·메모리·디스크 시계열 조회 → [[db_schema/logs_monitoring]] |
## 트랜잭션 경계
| 항목 | 위치 | 역할 |
|---|---|---|
| 회사 생성 | `B01_Dashboard_Repository.py:307` | 회사 INSERT, 사용자 연결, 감사 로그를 한 트랜잭션으로 처리 |
| 가입 신청 처리 | `B01_Dashboard_Repository.py:471` | `FOR UPDATE`로 신청 행 잠금 후 신청·사용자 상태 동시 변경 |
| 프로젝트 수정·삭제 | `B01_Dashboard_Repository.py:222,253` | 프로젝트 변경과 감사 로그를 같은 트랜잭션으로 처리 |
> B01 코드가 직접 기록하는 감사 테이블은 `audit_logs`가 아니라 `system_audit_logs`다.
@@ -0,0 +1,29 @@
---
type: page-dependencies
status: stable
page_id: B01_Dashboard
related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_backend]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B01_Dashboard import 구문 직접 확인 (2026-07-12)
---
# B01_Dashboard — Dependencies
외부 라이브러리의 1차 정의는 [[../../concepts/dependencies]]에 둔다.
| 항목 | 위치 | 역할 |
|---|---|---|
| FastAPI | `B01_Dashboard_Router.py:5` | APIRouter·Depends·HTTPException 제공 |
| Pydantic | `B01_Dashboard_Schema.py:3` | 요청 모델 타입·범위 검증 |
| aiomysql | `B01_Dashboard_Repository.py:10` | MariaDB 비동기 Raw SQL 접근 |
| psutil | `B01_Dashboard_Repository.py:11` | 현재 CPU·메모리 사용률 측정 |
| `shutil` | `B01_Dashboard_Repository.py:6` | 저장소 디스크 사용량 측정 |
| TypeScript DOM | `B01_Dashboard_UI_Page.ts:81` | 역할별 대시보드와 이벤트 구성 |
## 프로젝트 공통 모듈
| 항목 | 위치 | 역할 |
|---|---|---|
| `common_util_auth` | `B01_Dashboard_Router.py:10` | 세션·SYSTEM_ADMIN 권한 의존성 → [[../../concepts/auth_rbac]] |
| `config_db.get_db_pool` | `B01_Dashboard_Repository.py:13` | MariaDB 커넥션 풀 획득 |
| `ui_template_elements` | `B01_Dashboard_UI_Resources.ts:2` | 공통 선형 차트 생성 → [[../../concepts/ui_templates]] |
| `ui_template_locale` | `B01_Dashboard_UI_Resources.ts:1` | 한·영 UI 문자열 선택 → [[../../concepts/ui_templates]] |
@@ -0,0 +1,55 @@
---
type: page-frontend
status: stable
page_id: B01_Dashboard
related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_api]]", "[[B01_Dashboard/B01_db]]"]
last_updated: 2026-07-12
source: 상위 프로젝트 B01_Dashboard 실 코드 직접 확인 (2026-07-12)
---
# B01_Dashboard — Frontend
## 파일과 진입점
| 항목 | 위치 | 역할 |
|---|---|---|
| `renderB01Dashboard()` | `B01_Dashboard_UI_Page.ts:81` | 사용자 역할과 회사 상태에 맞는 대시보드 렌더링 |
| `request()` | `B01_Dashboard_Api_Fetch.ts:171` | 쿠키 포함 요청과 공통 오류 처리 |
| `buildResourcePanel()` | `B01_Dashboard_UI_Resources.ts:13` | CPU·메모리·디스크 현황과 추이 차트 생성 |
| `B01_Dashboard_UI_Style.css` | `B01_Dashboard_UI_Style.css:1` | 대시보드·표·워크플로우·모달 스타일 |
## UI 권한 헬퍼
| 항목 | 위치 | 역할 |
|---|---|---|
| `canEditProject()` | `B01_Dashboard_UI_Helper.ts:3` | 프로젝트 수정 버튼 표시 판단 |
| `canDeleteProject()` | `B01_Dashboard_UI_Helper.ts:9` | SYSTEM_ADMIN 삭제 버튼 표시 판단 |
| `canAddUser()` | `B01_Dashboard_UI_Helper.ts:15` | ADMIN 이상 팀원 추가 표시 판단 |
| `canChangeRole()` | `B01_Dashboard_UI_Helper.ts:19` | SYSTEM_ADMIN 역할 변경 표시 판단 |
| `canDeleteUser()` | `B01_Dashboard_UI_Helper.ts:24` | 사용자 제거 표시 판단 |
| `canManageAutomation()` | `B01_Dashboard_UI_Helper.ts:30` | ADMIN 이상 자동화 관리 표시 판단 |
> UI 헬퍼는 표시만 제어한다. 최종 권한 검증은 백엔드가 수행한다. 상세: [[../../concepts/auth_rbac]].
## 모달
| 항목 | 위치 | 역할 |
|---|---|---|
| `openEditProjectModal()` | `B01_Dashboard_UI_Modals.ts:75` | 프로젝트 기본정보 수정 |
| `openDeleteProjectModal()` | `B01_Dashboard_UI_Modals.ts:127` | 프로젝트 삭제 확인 |
| `openEditUserModal()` | `B01_Dashboard_UI_Modals.ts:138` | 사용자 정보 수정 |
| `openChangeRoleModal()` | `B01_Dashboard_UI_Modals.ts:183` | 사용자 역할 변경 |
| `openDeleteUserModal()` | `B01_Dashboard_UI_Modals.ts:199` | 사용자 제거 확인 |
| `openCreateCompanyModal()` | `B01_Dashboard_UI_Modals.ts:210` | 회사 생성 |
| `openFindCompanyModal()` | `B01_Dashboard_UI_Modals.ts:235` | 회사 검색·가입 신청 |
| `openAddMemberModal()` | `B01_Dashboard_UI_Modals.ts:273` | 회사 팀원 추가 |
| `openAutomationModal()` | `B01_Dashboard_UI_Modals.ts:286` | 프로젝트 자동화 조회·관리 |
## 공유 자원 연결
| 항목 | 위치 | 역할 |
|---|---|---|
| 인증·역할 | `B01_Dashboard_UI_Page.ts:81` | 역할별 섹션 제어 → [[../../concepts/auth_rbac]] |
| workflow 상태 | `B01_Dashboard_Api_Fetch.ts:370` | 프로젝트 카드 단계 표시 → [[../../concepts/workflow_state]] |
| 공통 UI | `B01_Dashboard_UI_Resources.ts:2` | `createLineChart()` 사용 → [[../../concepts/ui_templates]] |
## 기술부채
| 항목 | 위치 | 역할 |
|---|---|---|
| 700줄 초과 | `B01_Dashboard_UI_Page.ts:1` | 739줄로 프로젝트 단일 파일 제한 초과; 기능별 분할 검토 필요 |