사요자 대시보드 추가
This commit is contained in:
+123
-6
@@ -1,6 +1,6 @@
|
||||
# DB 스키마 (테이블 및 열 목록)
|
||||
|
||||
## 1. 사용자 & 인증 그룹
|
||||
## 1. 사용자 & 인증 & 조직 그룹
|
||||
|
||||
### 1-1. users 테이블
|
||||
```
|
||||
@@ -12,12 +12,25 @@ users
|
||||
├── position (TEXT) — 직급 (예: 과장, 대리, 사원)
|
||||
├── department (TEXT) — 부서명 (예: 설계팀, 영업팀)
|
||||
├── phone (TEXT) — 연락처 (예: 010-1234-5678)
|
||||
├── company_id (INT, FK → companies.id) — 소속 회사
|
||||
├── company_id (INT, FK → companies.id, NULL) — 소속 회사
|
||||
├── role (ENUM) — 역할: SYSTEM_ADMIN, ADMIN, USER (기본값: USER)
|
||||
├── is_master (BOOLEAN) — 회사 마스터 여부 (기본값: FALSE)
|
||||
├── status (ENUM) — 상태: PENDING_EMAIL, NO_COMPANY, PENDING, ACTIVE, INACTIVE, REJECTED
|
||||
├── last_login (DATETIME, NULL) — 마지막 로그인 시간
|
||||
├── auth_expires_at (DATETIME, NULL) — 인증 유효 만료 시간 (3개월 주기)
|
||||
├── created_at (TIMESTAMP) — 가입일
|
||||
├── updated_at (TIMESTAMP) — 수정일
|
||||
└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete)
|
||||
```
|
||||
|
||||
**상태 생명주기:**
|
||||
- PENDING_EMAIL: 회원가입 후 이메일 인증 전
|
||||
- NO_COMPANY: 이메일 인증 완료, 회사 미연결 (로그인 가능, B02~B11 차단)
|
||||
- PENDING: 회사 참여 신청 후 관리자 승인 대기
|
||||
- ACTIVE: 회사 연결 완료, 모든 기능 접근 가능
|
||||
- INACTIVE: 퇴사/계정 비활성화
|
||||
- REJECTED: 회사 참여 신청 거부
|
||||
|
||||
### 1-2. companies 테이블
|
||||
```
|
||||
companies
|
||||
@@ -26,13 +39,117 @@ companies
|
||||
├── business_registration_number (TEXT, UNIQUE) — 사업자등록번호
|
||||
├── business_address (TEXT) — 사업장 주소
|
||||
├── business_owner (TEXT) — 사업주 이름
|
||||
├── business_status (TEXT) — 기업 상태 (예: 활동중, 폐업, 휴업)
|
||||
├── created_by (INT, FK → users.id) — 회사 생성자
|
||||
├── business_status (TEXT, ENUM) — 기업 상태: 활동중, 폐업, 휴업 (기본값: 활동중)
|
||||
├── created_by (INT, FK → users.id) — 회사 생성자 (첫 ADMIN)
|
||||
├── created_at (TIMESTAMP) — 생성일
|
||||
├── updated_at (TIMESTAMP) — 수정일
|
||||
└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete)
|
||||
```
|
||||
|
||||
### 1-3. join_requests 테이블 (신규)
|
||||
```
|
||||
join_requests
|
||||
├── id (INT, PK) — 요청 고유 번호
|
||||
├── user_id (INT, FK → users.id) — 신청한 사용자
|
||||
├── company_id (INT, FK → companies.id) — 신청 대상 회사
|
||||
├── requested_at (TIMESTAMP) — 신청 시간
|
||||
├── status (ENUM) — 상태: PENDING, APPROVED, REJECTED (기본값: PENDING)
|
||||
├── reviewed_by (INT, FK → users.id, NULL) — 검토한 관리자
|
||||
├── reviewed_at (TIMESTAMP, NULL) — 검토 시간
|
||||
└── UNIQUE KEY (user_id, company_id) — 중복 신청 방지
|
||||
```
|
||||
|
||||
**동작:**
|
||||
- 사용자 가입 신청 → status = PENDING 생성
|
||||
- 관리자 승인 → status = APPROVED, users.status = ACTIVE, users.company_id 세팅
|
||||
- 관리자 거부 → status = REJECTED, 이메일 발송
|
||||
|
||||
### 1-4. system_audit_logs 테이블 (신규)
|
||||
```
|
||||
system_audit_logs
|
||||
├── id (INT, PK) — 로그 고유 번호
|
||||
├── user_id (INT, FK → users.id) — 행동 수행자
|
||||
├── action (VARCHAR(50)) — 행동: LOGIN, LOGOUT, USER_CREATE, USER_UPDATE, COMPANY_CREATE, ROLE_CHANGE, etc
|
||||
├── resource_type (VARCHAR(50)) — 대상 타입: user, company, project, join_request
|
||||
├── resource_id (INT, NULL) — 대상 ID
|
||||
├── timestamp (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP) — 기록 시간
|
||||
├── ip_address (VARCHAR(50), NULL) — IP 주소 (선택사항)
|
||||
├── user_agent (TEXT, NULL) — 브라우저/OS 정보 (선택사항)
|
||||
├── INDEX (timestamp) — 조회 성능 최적화
|
||||
└── INDEX (user_id) — 사용자별 조회 최적화
|
||||
```
|
||||
|
||||
### 1-5. system_resources 테이블 (신규)
|
||||
```
|
||||
system_resources
|
||||
├── id (INT, PK) — 기록 고유 번호
|
||||
├── timestamp (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP) — 기록 시간
|
||||
├── cpu_usage_percent (FLOAT) — CPU 사용률 (%)
|
||||
├── memory_usage_percent (FLOAT) — 메모리 사용률 (%)
|
||||
├── disk_usage_percent (FLOAT) — 디스크 사용률 (%)
|
||||
├── active_user_count (INT) — 활성 사용자 수
|
||||
├── active_project_count (INT) — 활성 프로젝트 수
|
||||
├── total_storage_mb (FLOAT) — 전체 저장소 사용량 (MB)
|
||||
└── INDEX (timestamp) — 시계열 조회 최적화
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 테이블 관계도 (조직 & 인증 그룹)
|
||||
|
||||
```
|
||||
users (사용자)
|
||||
├── id (PK)
|
||||
├── email
|
||||
├── password_hash
|
||||
├── role (SYSTEM_ADMIN | ADMIN | USER)
|
||||
├── is_master (마스터 여부)
|
||||
├── status (생명주기)
|
||||
├── company_id (FK) ──→ companies.id
|
||||
├── last_login
|
||||
└── auth_expires_at
|
||||
|
||||
companies (회사)
|
||||
├── id (PK)
|
||||
├── name
|
||||
├── business_registration_number
|
||||
├── business_address
|
||||
├── business_owner
|
||||
├── business_status
|
||||
├── created_by (FK) ──→ users.id
|
||||
├── created_at
|
||||
└── updated_at
|
||||
|
||||
join_requests (가입 신청)
|
||||
├── id (PK)
|
||||
├── user_id (FK) ──→ users.id
|
||||
├── company_id (FK) ──→ companies.id
|
||||
├── requested_at
|
||||
├── status (PENDING | APPROVED | REJECTED)
|
||||
├── reviewed_by (FK) ──→ users.id
|
||||
└── reviewed_at
|
||||
|
||||
system_audit_logs (시스템 로그)
|
||||
├── id (PK)
|
||||
├── user_id (FK) ──→ users.id
|
||||
├── action
|
||||
├── resource_type
|
||||
├── resource_id
|
||||
├── timestamp
|
||||
├── ip_address
|
||||
└── user_agent
|
||||
|
||||
system_resources (리소스 모니터링)
|
||||
├── id (PK)
|
||||
├── timestamp
|
||||
├── cpu_usage_percent
|
||||
├── memory_usage_percent
|
||||
├── disk_usage_percent
|
||||
├── active_user_count
|
||||
├── active_project_count
|
||||
└── total_storage_mb
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 프로젝트 그룹
|
||||
@@ -586,8 +703,8 @@ ORDER BY timestamp DESC;
|
||||
- `processed_file_path / converted_file_path`: 변환된 파일 위치
|
||||
- `*_file_path`: 각 워크플로우 단계별 산출물 위치
|
||||
|
||||
### 총 18개 테이블:
|
||||
1. **사용자/회사**: users, companies (2개)
|
||||
### 총 23개 테이블:
|
||||
1. **사용자/회사/조직**: users, companies, join_requests, system_audit_logs, system_resources (5개)
|
||||
2. **프로젝트**: projects, project_versions (2개)
|
||||
3. **입력 데이터**: input_files, processed_point_cloud (2개)
|
||||
4. **지표면 분석**: surface_models, terrain_layers (2개)
|
||||
|
||||
Reference in New Issue
Block a user