feat(m0): 后端骨架 + Web/安卓前端骨架 + 设计文档

- backend: FastAPI 应用工厂、统一错误信封、JWT、短信登录、工作区/成员/邀请、幂等中间件
- alembic 0001: workspace/member/invitation/audit_log/app_user + RLS 策略 + 双角色 GRANT
- tests: 认证/工作区/租户隔离/幂等 四组用例(尚未在本机执行)
- web: React18+Vite 骨架(登录、工作区、邀请落地页)
- android: Compose 骨架(登录、工作区列表)
- 2.Design: PRODUCT-PLAN / ROADMAP-M0-M1 / NAMING / DEVELOPMENT
This commit is contained in:
Steven
2026-10-28 02:38:53 +08:00
commit 0c53aa7062
72 changed files with 5320 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
backend:
runs-on: ubuntu-latest
services:
postgres:
image: pgvector/pgvector:pg16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres_dev_pw
POSTGRES_DB: dadaotask
ports: ["5433:5432"]
options: >-
--health-cmd "pg_isready -U postgres -d dadaotask"
--health-interval 5s --health-timeout 3s --health-retries 20
env:
ENV: test
DATABASE_URL: postgresql+asyncpg://dadao_app:dadao_dev_pw@127.0.0.1:5433/dadaotask
MIGRATION_DATABASE_URL: postgresql+asyncpg://dadao_owner:dadao_dev_pw@127.0.0.1:5433/dadaotask
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
# 关键:先建角色再跑迁移。应用角色必须是受限角色,否则 RLS 测试会"假通过"。
- name: 创建数据库角色
run: |
PGPASSWORD=postgres_dev_pw psql -h 127.0.0.1 -p 5433 -U postgres -d dadaotask \
-v ON_ERROR_STOP=1 -f deploy/postgres/init/01-roles.sql
- name: 安装依赖
working-directory: backend
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Lint
working-directory: backend
run: |
ruff check .
ruff format --check .
- name: 迁移
working-directory: backend
run: alembic upgrade head
- name: 测试
working-directory: backend
run: pytest -q