refactor(structure): reorganize app layout

BREAKING CHANGE: root backend/frontend directories and old run/manage entrypoints were removed. Use apps/backend, apps/frontend, and python main.py commands instead.
This commit is contained in:
2026-05-03 16:43:11 +08:00
parent 7e8852877e
commit d4d6f87730
112 changed files with 347 additions and 1596 deletions
+6 -3
View File
@@ -47,9 +47,12 @@ logs/
Thumbs.db Thumbs.db
# 前端 # 前端
frontend/node_modules/ apps/frontend/node_modules/
frontend/dist/ apps/frontend/dist/
frontend/.vite/ apps/frontend/.vite/
apps/new-frontend/node_modules/
apps/new-frontend/dist/
apps/new-frontend/.vite/
.claude .claude
.codex .codex
+9 -13
View File
@@ -37,16 +37,16 @@
python -m venv venv python -m venv venv
venv\Scripts\activate # Windows venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac source venv/bin/activate # Linux/Mac
pip install -r backend/requirements.txt pip install -r apps/backend/requirements.txt
python3 run.py python main.py backend
# 前端 # 前端
cd frontend cd apps/frontend
npm install npm install
npm run dev npm run dev
# 创建管理员 # 创建管理员
python backend/scripts/create_admin.py PYTHONPATH=apps python apps/backend/scripts/create_admin.py
``` ```
### 访问地址 ### 访问地址
@@ -57,15 +57,11 @@ python backend/scripts/create_admin.py
## 进程管理 ## 进程管理
```bash ```bash
# Windows python main.py backend-daemon
manage.bat start [all/backend/fronted] python main.py frontend-daemon
manage.bat stop [all/backend/fronted] python main.py status
manage.bat status python main.py stop [all|backend|frontend]
python main.py frontend-build
# Linux/Mac
./manage.sh start [all/backend/fronted]
./manage.sh stop [all/backend/fronted]
./manage.sh status
``` ```
## 配置 ## 配置
+1 -2
View File
@@ -1,10 +1,9 @@
import os
from pathlib import Path from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import List from typing import List
# 项目根目录 # 项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parents[2]
class Settings(BaseSettings): class Settings(BaseSettings):
+2 -1
View File
@@ -167,9 +167,10 @@ app.include_router(templates.router, prefix=f"{settings.API_PREFIX}/templates",
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
uvicorn.run( uvicorn.run(
"main:app", "backend.main:app",
host="0.0.0.0", host="0.0.0.0",
port=8000, port=8000,
reload=True, reload=True,
reload_dirs=[str(settings.BASE_DIR / "apps" / "backend")],
log_level="info", log_level="info",
) )
@@ -3,18 +3,16 @@
创建管理员用户的脚本 创建管理员用户的脚本
使用方法: 使用方法:
python backend/scripts/create_admin.py PYTHONPATH=apps python apps/backend/scripts/create_admin.py
或使用虚拟环境: 或使用虚拟环境:
./venv/Scripts/python.exe backend/scripts/create_admin.py PYTHONPATH=apps ./venv/bin/python apps/backend/scripts/create_admin.py
""" """
import sys import sys
import os
from pathlib import Path from pathlib import Path
# 添加项目根目录到路径 APPS_DIR = Path(__file__).resolve().parents[2]
BASE_DIR = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(APPS_DIR))
sys.path.insert(0, str(BASE_DIR))
from backend.models import init_db, User from backend.models import init_db, User
from backend.models.database import SessionLocal from backend.models.database import SessionLocal
@@ -7,15 +7,15 @@
- last_failed_login: 最后一次登录失败时间 - last_failed_login: 最后一次登录失败时间
运行方式 运行方式
PYTHONPATH=apps python -m backend.scripts.migrate_add_account_lockout
python -m backend.scripts.migrate_add_account_lockout python -m backend.scripts.migrate_add_account_lockout
""" """
import sys import sys
from pathlib import Path from pathlib import Path
# 添加项目根目录到 Python 路径 APPS_DIR = Path(__file__).resolve().parents[2]
project_root = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(APPS_DIR))
sys.path.insert(0, str(project_root))
from sqlalchemy import text from sqlalchemy import text
from backend.models.database import engine from backend.models.database import engine
@@ -2,7 +2,10 @@
测试新的异常处理系统 测试新的异常处理系统
""" """
import sys import sys
sys.path.insert(0, '..') from pathlib import Path
APPS_DIR = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(APPS_DIR))
from backend.exceptions import ( from backend.exceptions import (
ValidationError, ValidationError,
@@ -94,7 +97,7 @@ def check_old_exception_patterns():
for pattern_name, pattern in patterns.items(): for pattern_name, pattern in patterns.items():
results[pattern_name] = [] results[pattern_name] = []
for root, dirs, files in os.walk('../backend/api'): for root, dirs, files in os.walk(APPS_DIR / 'backend' / 'api'):
for file in files: for file in files:
if file.endswith('.py'): if file.endswith('.py'):
filepath = os.path.join(root, file) filepath = os.path.join(root, file)

Before

Width:  |  Height:  |  Size: 650 B

After

Width:  |  Height:  |  Size: 650 B

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 496 B

After

Width:  |  Height:  |  Size: 496 B

Some files were not shown because too many files have changed in this diff Show More