build: 打通 FastAPI 与 Vue 最小工程、依赖与数据库连接

后端入口、配置、Redis 与 Alembic 迁移就位;前端 Vite 工程可安装可构建。
This commit is contained in:
WangShen007 committed 2026-09-22 20:15:00 +08:00
1 parent fb0ddca4de
commit 2aee6286d6
167 files changed
+26082

No files matched your search

@@ -0,0 +1,39 @@
"""auth_sessions table, so sign-out and password changes revoke JWTs
Revision ID: auth_sessions_001
Revises: agent_quick_replies_001
Create Date: 2026-10-12
Tokens issued before this revision carry no session id and stay valid until
they expire, so the deploy signs nobody out.
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision: str = 'auth_sessions_001'
down_revision: Union[str, None] = 'agent_quick_replies_001'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
'auth_sessions',
sa.Column('id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True),
server_default=sa.text('now()'), nullable=True),
sa.Column('revoked_at', sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
)
op.create_index('ix_auth_sessions_user_id', 'auth_sessions', ['user_id'])
def downgrade() -> None:
op.drop_index('ix_auth_sessions_user_id', table_name='auth_sessions')
op.drop_table('auth_sessions')