fix: 技术债务修复 - Domain层依赖优化 #49
@@ -0,0 +1,85 @@
|
||||
# =======================
|
||||
# 生产环境配置
|
||||
# =======================
|
||||
APP_ENV=production
|
||||
APP_NAME=xiaoxia-saas
|
||||
APP_VERSION=0.1.0
|
||||
DEBUG=false
|
||||
|
||||
# =======================
|
||||
# API 服务配置
|
||||
# =======================
|
||||
API_HOST=0.0.0.0
|
||||
API_PORT=8000
|
||||
API_PREFIX=/api/v1
|
||||
|
||||
# =======================
|
||||
# Web 前端配置
|
||||
# =======================
|
||||
WEB_PORT=3000
|
||||
WEB_URL=https://xiaoxiajianji.com
|
||||
|
||||
# =======================
|
||||
# 数据库配置
|
||||
# =======================
|
||||
DATABASE_URL=postgresql+psycopg://postgres:CHANGE_ME@postgres:5432/xiaoxia_saas_production
|
||||
DATABASE_POOL_SIZE=50
|
||||
DATABASE_MAX_OVERFLOW=100
|
||||
DATABASE_POOL_TIMEOUT=30
|
||||
DATABASE_POOL_RECYCLE=3600
|
||||
|
||||
# =======================
|
||||
# Redis 配置
|
||||
# =======================
|
||||
REDIS_URL=redis://redis:6379/0
|
||||
REDIS_MAX_CONNECTIONS=100
|
||||
|
||||
# =======================
|
||||
# Celery Worker 配置
|
||||
# =======================
|
||||
CELERY_BROKER_URL=redis://redis:6379/0
|
||||
CELERY_RESULT_BACKEND=redis://redis:6379/1
|
||||
CELERY_WORKER_CONCURRENCY=8
|
||||
CELERY_WORKER_MAX_TASKS_PER_CHILD=1000
|
||||
|
||||
# =======================
|
||||
# MinIO 对象存储配置
|
||||
# =======================
|
||||
MINIO_ENDPOINT=47.98.113.167:9000
|
||||
MINIO_ACCESS_KEY=CHANGE_ME_PRODUCTION
|
||||
MINIO_SECRET_KEY=CHANGE_ME_PRODUCTION
|
||||
MINIO_BUCKET=xiaoxia-assets
|
||||
MINIO_SECURE=false
|
||||
MINIO_PUBLIC_URL=http://47.98.113.167:9000
|
||||
|
||||
# =======================
|
||||
# 日志配置
|
||||
# =======================
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FORMAT=json
|
||||
LOG_FILE=/var/log/xiaoxia-saas/app.log
|
||||
|
||||
# =======================
|
||||
# CORS 配置
|
||||
# =======================
|
||||
CORS_ORIGINS=https://xiaoxiajianji.com,https://api.xiaoxiajianji.com
|
||||
CORS_ALLOW_CREDENTIALS=true
|
||||
|
||||
# =======================
|
||||
# 文件上传限制
|
||||
# =======================
|
||||
MAX_UPLOAD_SIZE_MB=2000
|
||||
ALLOWED_FILE_TYPES=video/mp4,video/quicktime,video/x-msvideo,audio/mpeg,audio/wav,image/jpeg,image/png,image/gif
|
||||
|
||||
# =======================
|
||||
# 安全配置
|
||||
# =======================
|
||||
SECRET_KEY=CHANGE_ME_TO_RANDOM_STRING_AT_LEAST_32_CHARS_IN_PRODUCTION
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=60
|
||||
REFRESH_TOKEN_EXPIRE_DAYS=7
|
||||
|
||||
# =======================
|
||||
# 监控与追踪(可选)
|
||||
# =======================
|
||||
# SENTRY_DSN=
|
||||
# PROMETHEUS_PORT=9090
|
||||
@@ -11,7 +11,7 @@ import jwt as pyjwt
|
||||
|
||||
from packages.adapters.redis import get_session_store
|
||||
from packages.adapters.redis.session_store import SessionStore
|
||||
from packages.domain.auth import jwt_service, password_hasher
|
||||
from packages.application.auth import jwt_service, password_hasher
|
||||
|
||||
LEGACY_SHA256_HEX_LENGTH = 64
|
||||
|
||||
@@ -170,7 +170,7 @@ class RefreshTokenUseCase:
|
||||
self.user_repository = user_repository
|
||||
self.session_store = session_store or get_session_store()
|
||||
# Import jwt_service for token creation
|
||||
from packages.domain.auth import jwt_service as jwt_svc_module
|
||||
from packages.application.auth import jwt_service as jwt_svc_module
|
||||
self.jwt_service = jwt_svc_module
|
||||
self._jwt_secret_key = jwt_svc_module.config.SECRET_KEY
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
|
||||
from packages.adapters.smtp import get_email_service
|
||||
from packages.domain.auth import password_hasher, password_validator
|
||||
from packages.application.auth import password_hasher, password_validator
|
||||
|
||||
|
||||
class RequestPasswordResetRequest:
|
||||
|
||||
@@ -8,7 +8,7 @@ from typing import Optional
|
||||
from uuid import uuid4
|
||||
|
||||
from packages.adapters.smtp import get_email_service
|
||||
from packages.domain.auth import password_hasher, password_validator
|
||||
from packages.application.auth import password_hasher, password_validator
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ from app.config import settings
|
||||
from packages.adapters.smtp import NoopEmailService
|
||||
from packages.application.auth.login_use_case import LoginRequest, LoginUseCase
|
||||
from packages.application.auth.register_user_use_case import RegisterUserRequest, RegisterUserUseCase
|
||||
from packages.domain.auth import password_hasher
|
||||
from packages.application.auth import password_hasher
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ if str(API_ROOT) not in sys.path:
|
||||
from app.config import settings
|
||||
from app.middleware.auth import get_current_user, get_current_user_optional, require_workspace_access
|
||||
|
||||
from packages.domain.auth import password_hasher
|
||||
from packages.application.auth import password_hasher
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ from packages.application.auth import (
|
||||
LogoutRequest,
|
||||
LogoutUseCase,
|
||||
)
|
||||
from packages.domain.auth import password_hasher
|
||||
from packages.application.auth import password_hasher
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from packages.application.workspace.create_workspace_use_case import CreateWorks
|
||||
from packages.application.workspace.invite_member_use_case import InviteMemberRequest, InviteMemberUseCase
|
||||
from packages.application.workspace.list_members_use_case import ListMembersRequest, ListMembersUseCase
|
||||
from packages.application.workspace.list_workspaces_use_case import ListWorkspacesRequest, ListWorkspacesUseCase
|
||||
from packages.domain.auth import password_hasher
|
||||
from packages.application.auth import password_hasher
|
||||
from packages.domain.entities import User
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user