feat: HR Portal - Complete Multi-Tenant System with Redis Session Storage
Major Features: - ✅ Multi-tenant architecture (tenant isolation) - ✅ Employee CRUD with lifecycle management (onboarding/offboarding) - ✅ Department tree structure with email domain management - ✅ Company info management (single-record editing) - ✅ System functions CRUD (permission management) - ✅ Email account management (multi-account per employee) - ✅ Keycloak SSO integration (auth.lab.taipei) - ✅ Redis session storage (10.1.0.254:6379) - Solves Cookie 4KB limitation - Cross-system session sharing - Sliding expiration (8 hours) - Automatic token refresh Technical Stack: Backend: - FastAPI + SQLAlchemy - PostgreSQL 16 (10.1.0.20:5433) - Keycloak Admin API integration - Docker Mailserver integration (SSH) - Alembic migrations Frontend: - Next.js 14 (App Router) - NextAuth 4 with Keycloak Provider - Redis session storage (ioredis) - Tailwind CSS Infrastructure: - Redis 7 (10.1.0.254:6379) - Session + Cache - Keycloak 26.1.0 (auth.lab.taipei) - Docker Mailserver (10.1.0.254) Architecture Highlights: - Session管理由 Keycloak + Redis 統一控制 - 支援多系統 (HR/WebMail/Calendar/Drive/Office) 共享 session - Token 自動刷新,異質服務整合 - 未來可無縫遷移到雲端 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
107
backend/app/schemas/__init__.py
Normal file
107
backend/app/schemas/__init__.py
Normal file
@@ -0,0 +1,107 @@
|
||||
"""
|
||||
Schemas 模組
|
||||
匯出所有 Pydantic Schemas
|
||||
"""
|
||||
|
||||
# Base
|
||||
from app.schemas.base import (
|
||||
BaseSchema,
|
||||
TimestampSchema,
|
||||
PaginationParams,
|
||||
PaginatedResponse,
|
||||
)
|
||||
|
||||
# Employee
|
||||
from app.schemas.employee import (
|
||||
EmployeeBase,
|
||||
EmployeeCreate,
|
||||
EmployeeUpdate,
|
||||
EmployeeInDB,
|
||||
EmployeeResponse,
|
||||
EmployeeListItem,
|
||||
EmployeeDetail,
|
||||
)
|
||||
|
||||
# Business Unit
|
||||
from app.schemas.business_unit import (
|
||||
BusinessUnitBase,
|
||||
BusinessUnitCreate,
|
||||
BusinessUnitUpdate,
|
||||
BusinessUnitInDB,
|
||||
BusinessUnitResponse,
|
||||
BusinessUnitListItem,
|
||||
)
|
||||
|
||||
# Department
|
||||
from app.schemas.department import (
|
||||
DepartmentBase,
|
||||
DepartmentCreate,
|
||||
DepartmentUpdate,
|
||||
DepartmentResponse,
|
||||
DepartmentListItem,
|
||||
DepartmentTreeNode,
|
||||
)
|
||||
|
||||
# Employee Identity
|
||||
from app.schemas.employee_identity import (
|
||||
EmployeeIdentityBase,
|
||||
EmployeeIdentityCreate,
|
||||
EmployeeIdentityUpdate,
|
||||
EmployeeIdentityInDB,
|
||||
EmployeeIdentityResponse,
|
||||
EmployeeIdentityListItem,
|
||||
)
|
||||
|
||||
# Network Drive
|
||||
from app.schemas.network_drive import (
|
||||
NetworkDriveBase,
|
||||
NetworkDriveCreate,
|
||||
NetworkDriveUpdate,
|
||||
NetworkDriveInDB,
|
||||
NetworkDriveResponse,
|
||||
NetworkDriveListItem,
|
||||
NetworkDriveQuotaUpdate,
|
||||
)
|
||||
|
||||
# Audit Log
|
||||
from app.schemas.audit_log import (
|
||||
AuditLogBase,
|
||||
AuditLogCreate,
|
||||
AuditLogInDB,
|
||||
AuditLogResponse,
|
||||
AuditLogListItem,
|
||||
AuditLogFilter,
|
||||
)
|
||||
|
||||
# Email Account
|
||||
from app.schemas.email_account import (
|
||||
EmailAccountBase,
|
||||
EmailAccountCreate,
|
||||
EmailAccountUpdate,
|
||||
EmailAccountInDB,
|
||||
EmailAccountResponse,
|
||||
EmailAccountListItem,
|
||||
EmailAccountQuotaUpdate,
|
||||
)
|
||||
|
||||
# Permission
|
||||
from app.schemas.permission import (
|
||||
PermissionBase,
|
||||
PermissionCreate,
|
||||
PermissionUpdate,
|
||||
PermissionInDB,
|
||||
PermissionResponse,
|
||||
PermissionListItem,
|
||||
PermissionBatchCreate,
|
||||
PermissionFilter,
|
||||
VALID_SYSTEMS,
|
||||
VALID_ACCESS_LEVELS,
|
||||
)
|
||||
|
||||
# Response
|
||||
from app.schemas.response import (
|
||||
ResponseModel,
|
||||
ErrorResponse,
|
||||
MessageResponse,
|
||||
SuccessResponse,
|
||||
)
|
||||
Reference in New Issue
Block a user