5d2bced39f
- PROGRESS.md: update to 2026-05-29 with security hardening (T-005), 4-frontend architecture, AI provider refactoring, discovery features, landing page/referral/quota, desktop layout, admin AI management - AGENTS.md: add AI provider list (Alibaba/NVIDIA, removed Claude/DeepL/Local), DB-driven config, CSRF/rate-limit/CORS notes, admin_ai reload quirk - .env.example: sync with actual config, replace deprecated providers with current Sensenova/OpencodeGo/NVIDIA/Spark/Alibaba - docs/PROJECT_STATUS.md: archive (fully superseded by PROGRESS.md) - Remove generated JS files (_bing_search.js, _batch_search.js) - Remove empty directories (data/corpus, data/models) - Remove backend/.coverage (test artifact) - Fix services/.gitignore to cover _bing_search.js - Include pending AI provider DB admin feature (admin_ai, AIProvider model, AIProviders.vue, migration) and T-008 test report
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""add ai_providers table
|
|
|
|
Revision ID: add_ai_providers
|
|
Revises: 0798c5c09c8c
|
|
Create Date: 2026-05-27
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
|
import uuid
|
|
|
|
revision = 'add_ai_providers'
|
|
down_revision = '0798c5c09c8c'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
op.create_table(
|
|
'ai_providers',
|
|
sa.Column('id', UUID(as_uuid=True), primary_key=True, default=uuid.uuid4),
|
|
sa.Column('name', sa.String(100), nullable=False),
|
|
sa.Column('provider_type', sa.String(50), nullable=False),
|
|
sa.Column('api_key', sa.Text(), nullable=True),
|
|
sa.Column('api_secret', sa.Text(), nullable=True),
|
|
sa.Column('base_url', sa.String(500), nullable=True),
|
|
sa.Column('model_name', sa.String(100), nullable=False),
|
|
sa.Column('extra_config', JSONB(), default={}),
|
|
sa.Column('priority', sa.Integer(), default=0),
|
|
sa.Column('enabled', sa.Boolean(), default=True),
|
|
sa.Column('created_at', sa.DateTime(), default=sa.func.now()),
|
|
sa.Column('updated_at', sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
|
|
)
|
|
|
|
|
|
def downgrade():
|
|
op.drop_table('ai_providers')
|