- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
67 lines
5.3 KiB
Markdown
67 lines
5.3 KiB
Markdown
---
|
|
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]]", "[[auth_rbac]]", "[[architecture/project_map]]", "[[architecture/workflow_data_flow]]"]
|
|
last_updated: 2026-08-08
|
|
source: docs/raw/verification/2026-08-08_verify_project_delete_hard.md
|
|
---
|
|
|
|
# B01_Dashboard — Backend
|
|
|
|
## 세분화 백엔드 위키 명세
|
|
- `[[B01_Dashboard/backend/B01_Dashboard_Router]]`: FastAPI 대시보드 API 엔드포인트 명세
|
|
- `B01_Dashboard_Repository.py`: Raw SQL 회사, 사용자, 프로젝트 CRUD
|
|
- `B01_Dashboard_Schema.py`: Pydantic 요청/응답 검증 모델
|
|
- `common_util_project_delete.py`: 프로젝트 하드 삭제 전용 분리 모듈 (700줄 제한 준수)
|
|
|
|
## 라우터 권한 헬퍼
|
|
| 항목 | 위치(상대 경로) | 역할 |
|
|
|---|---|---|
|
|
| `require_company_admin()` | `B01_Dashboard_Router.py` | ADMIN 또는 SYSTEM_ADMIN 의존성 검사 |
|
|
| `_require_company_id()` | `B01_Dashboard_Router.py` | 세션 회사 ID 필수 검사 |
|
|
| `_same_company()` | `B01_Dashboard_Router.py` | 요청자와 대상의 회사 일치 검사 |
|
|
| `_can_edit_project()` | `B01_Dashboard_Router.py` | 역할·회사 기준 프로젝트 수정 검사 |
|
|
| `_can_manage_automation()` | `B01_Dashboard_Router.py` | 자동화 관리 권한 검사 |
|
|
| `_can_edit_user()` | `B01_Dashboard_Router.py` | 사용자 수정 범위 검사 |
|
|
|
|
상세 권한 규칙은 [[auth_rbac]]에서 1차 정의한다.
|
|
|
|
## 저장소 및 삭제 함수
|
|
| 항목 | 위치 | 역할 |
|
|
| ----------------------------------------------------------------------------- | ----------------------------------------- | -------------------------- |
|
|
| `get_dashboard_me()` / `update_user_profile()` | `B01_Dashboard_Repository.py:47,65` | 내 정보 조회(auth_expires_at 대신 `last_email_verified_at + 90일`로 만료일 동적 계산 표시)·수정 |
|
|
| `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` | 프로젝트 조회·수정·소프트 삭제 |
|
|
| `hard_delete_project()` | `common_util/common_util_project_delete.py:18` | 프로젝트 DB 삭제(ON DELETE CASCADE 연쇄) 및 영구저장소 디스크 통삭제 |
|
|
| `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줄로 프로젝트 단일 파일 제한 초과; 도메인별 저장소 분할 검토 필요 |
|
|
| 물리적 파일 하드 삭제 모듈 분산 | `common_util_project_delete.py` | 700줄 한계 준수를 위해 신규 파일 삭제 모듈은 레포지토리 외부에 위치 |
|