revamping frontend logging system and reorganising documentation
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
"""initial_schema_with_proper_relationships
|
||||
"""Initial migration - all tables
|
||||
|
||||
Revision ID: 6fe45d3d84c4
|
||||
Revision ID: 4951b2e50581
|
||||
Revises:
|
||||
Create Date: 2025-10-07 22:11:56.036486
|
||||
Create Date: 2025-10-27 22:28:33.137564
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
@@ -12,7 +12,7 @@ import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '6fe45d3d84c4'
|
||||
revision: str = '4951b2e50581'
|
||||
down_revision: Union[str, None] = None
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
@@ -92,6 +92,112 @@ def upgrade() -> None:
|
||||
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
|
||||
op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True)
|
||||
op.create_table('admin_audit_logs',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('admin_user_id', sa.Integer(), nullable=False),
|
||||
sa.Column('action', sa.String(length=100), nullable=False),
|
||||
sa.Column('target_type', sa.String(length=50), nullable=False),
|
||||
sa.Column('target_id', sa.String(length=100), nullable=False),
|
||||
sa.Column('details', sa.JSON(), nullable=True),
|
||||
sa.Column('ip_address', sa.String(length=45), nullable=True),
|
||||
sa.Column('user_agent', sa.Text(), nullable=True),
|
||||
sa.Column('request_id', sa.String(length=100), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['admin_user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_admin_audit_logs_action'), 'admin_audit_logs', ['action'], unique=False)
|
||||
op.create_index(op.f('ix_admin_audit_logs_admin_user_id'), 'admin_audit_logs', ['admin_user_id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_audit_logs_id'), 'admin_audit_logs', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_audit_logs_target_id'), 'admin_audit_logs', ['target_id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_audit_logs_target_type'), 'admin_audit_logs', ['target_type'], unique=False)
|
||||
op.create_table('admin_notifications',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('type', sa.String(length=50), nullable=False),
|
||||
sa.Column('priority', sa.String(length=20), nullable=True),
|
||||
sa.Column('title', sa.String(length=200), nullable=False),
|
||||
sa.Column('message', sa.Text(), nullable=False),
|
||||
sa.Column('is_read', sa.Boolean(), nullable=True),
|
||||
sa.Column('read_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('read_by_user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('action_required', sa.Boolean(), nullable=True),
|
||||
sa.Column('action_url', sa.String(length=500), nullable=True),
|
||||
sa.Column('notification_metadata', sa.JSON(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['read_by_user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_admin_notifications_action_required'), 'admin_notifications', ['action_required'], unique=False)
|
||||
op.create_index(op.f('ix_admin_notifications_id'), 'admin_notifications', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_notifications_is_read'), 'admin_notifications', ['is_read'], unique=False)
|
||||
op.create_index(op.f('ix_admin_notifications_priority'), 'admin_notifications', ['priority'], unique=False)
|
||||
op.create_index(op.f('ix_admin_notifications_type'), 'admin_notifications', ['type'], unique=False)
|
||||
op.create_table('admin_sessions',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('admin_user_id', sa.Integer(), nullable=False),
|
||||
sa.Column('session_token', sa.String(length=255), nullable=False),
|
||||
sa.Column('ip_address', sa.String(length=45), nullable=False),
|
||||
sa.Column('user_agent', sa.Text(), nullable=True),
|
||||
sa.Column('login_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('last_activity_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('logout_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=True),
|
||||
sa.Column('logout_reason', sa.String(length=50), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['admin_user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_admin_sessions_admin_user_id'), 'admin_sessions', ['admin_user_id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_sessions_id'), 'admin_sessions', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_sessions_is_active'), 'admin_sessions', ['is_active'], unique=False)
|
||||
op.create_index(op.f('ix_admin_sessions_login_at'), 'admin_sessions', ['login_at'], unique=False)
|
||||
op.create_index(op.f('ix_admin_sessions_session_token'), 'admin_sessions', ['session_token'], unique=True)
|
||||
op.create_table('admin_settings',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('key', sa.String(length=100), nullable=False),
|
||||
sa.Column('value', sa.Text(), nullable=False),
|
||||
sa.Column('value_type', sa.String(length=20), nullable=True),
|
||||
sa.Column('category', sa.String(length=50), nullable=True),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('is_encrypted', sa.Boolean(), nullable=True),
|
||||
sa.Column('is_public', sa.Boolean(), nullable=True),
|
||||
sa.Column('last_modified_by_user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['last_modified_by_user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_admin_settings_category'), 'admin_settings', ['category'], unique=False)
|
||||
op.create_index(op.f('ix_admin_settings_id'), 'admin_settings', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_admin_settings_key'), 'admin_settings', ['key'], unique=True)
|
||||
op.create_table('platform_alerts',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('alert_type', sa.String(length=50), nullable=False),
|
||||
sa.Column('severity', sa.String(length=20), nullable=False),
|
||||
sa.Column('title', sa.String(length=200), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('affected_vendors', sa.JSON(), nullable=True),
|
||||
sa.Column('affected_systems', sa.JSON(), nullable=True),
|
||||
sa.Column('is_resolved', sa.Boolean(), nullable=True),
|
||||
sa.Column('resolved_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('resolved_by_user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('resolution_notes', sa.Text(), nullable=True),
|
||||
sa.Column('auto_generated', sa.Boolean(), nullable=True),
|
||||
sa.Column('occurrence_count', sa.Integer(), nullable=True),
|
||||
sa.Column('first_occurred_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('last_occurred_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['resolved_by_user_id'], ['users.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_platform_alerts_alert_type'), 'platform_alerts', ['alert_type'], unique=False)
|
||||
op.create_index(op.f('ix_platform_alerts_id'), 'platform_alerts', ['id'], unique=False)
|
||||
op.create_index(op.f('ix_platform_alerts_is_resolved'), 'platform_alerts', ['is_resolved'], unique=False)
|
||||
op.create_index(op.f('ix_platform_alerts_severity'), 'platform_alerts', ['severity'], unique=False)
|
||||
op.create_table('vendors',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('vendor_code', sa.String(), nullable=False),
|
||||
@@ -99,7 +205,6 @@ def upgrade() -> None:
|
||||
sa.Column('name', sa.String(), nullable=False),
|
||||
sa.Column('description', sa.Text(), nullable=True),
|
||||
sa.Column('owner_user_id', sa.Integer(), nullable=False),
|
||||
sa.Column('theme_config', sa.JSON(), nullable=True),
|
||||
sa.Column('contact_email', sa.String(), nullable=True),
|
||||
sa.Column('contact_phone', sa.String(), nullable=True),
|
||||
sa.Column('website', sa.String(), nullable=True),
|
||||
@@ -203,6 +308,54 @@ def upgrade() -> None:
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
op.create_index(op.f('ix_roles_id'), 'roles', ['id'], unique=False)
|
||||
op.create_table('vendor_domains',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('vendor_id', sa.Integer(), nullable=False),
|
||||
sa.Column('domain', sa.String(length=255), nullable=False),
|
||||
sa.Column('is_primary', sa.Boolean(), nullable=False),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=False),
|
||||
sa.Column('ssl_status', sa.String(length=50), nullable=True),
|
||||
sa.Column('ssl_verified_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('verification_token', sa.String(length=100), nullable=True),
|
||||
sa.Column('is_verified', sa.Boolean(), nullable=False),
|
||||
sa.Column('verified_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['vendor_id'], ['vendors.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('vendor_id', 'domain', name='uq_vendor_domain'),
|
||||
sa.UniqueConstraint('verification_token')
|
||||
)
|
||||
op.create_index('idx_domain_active', 'vendor_domains', ['domain', 'is_active'], unique=False)
|
||||
op.create_index('idx_vendor_primary', 'vendor_domains', ['vendor_id', 'is_primary'], unique=False)
|
||||
op.create_index(op.f('ix_vendor_domains_domain'), 'vendor_domains', ['domain'], unique=True)
|
||||
op.create_index(op.f('ix_vendor_domains_id'), 'vendor_domains', ['id'], unique=False)
|
||||
op.create_table('vendor_themes',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('vendor_id', sa.Integer(), nullable=False),
|
||||
sa.Column('theme_name', sa.String(length=100), nullable=True),
|
||||
sa.Column('is_active', sa.Boolean(), nullable=True),
|
||||
sa.Column('colors', sa.JSON(), nullable=True),
|
||||
sa.Column('font_family_heading', sa.String(length=100), nullable=True),
|
||||
sa.Column('font_family_body', sa.String(length=100), nullable=True),
|
||||
sa.Column('logo_url', sa.String(length=500), nullable=True),
|
||||
sa.Column('logo_dark_url', sa.String(length=500), nullable=True),
|
||||
sa.Column('favicon_url', sa.String(length=500), nullable=True),
|
||||
sa.Column('banner_url', sa.String(length=500), nullable=True),
|
||||
sa.Column('layout_style', sa.String(length=50), nullable=True),
|
||||
sa.Column('header_style', sa.String(length=50), nullable=True),
|
||||
sa.Column('product_card_style', sa.String(length=50), nullable=True),
|
||||
sa.Column('custom_css', sa.Text(), nullable=True),
|
||||
sa.Column('social_links', sa.JSON(), nullable=True),
|
||||
sa.Column('meta_title_template', sa.String(length=200), nullable=True),
|
||||
sa.Column('meta_description', sa.Text(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['vendor_id'], ['vendors.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
sa.UniqueConstraint('vendor_id')
|
||||
)
|
||||
op.create_index(op.f('ix_vendor_themes_id'), 'vendor_themes', ['id'], unique=False)
|
||||
op.create_table('customer_addresses',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('vendor_id', sa.Integer(), nullable=False),
|
||||
@@ -342,6 +495,13 @@ def downgrade() -> None:
|
||||
op.drop_table('inventory')
|
||||
op.drop_index(op.f('ix_customer_addresses_id'), table_name='customer_addresses')
|
||||
op.drop_table('customer_addresses')
|
||||
op.drop_index(op.f('ix_vendor_themes_id'), table_name='vendor_themes')
|
||||
op.drop_table('vendor_themes')
|
||||
op.drop_index(op.f('ix_vendor_domains_id'), table_name='vendor_domains')
|
||||
op.drop_index(op.f('ix_vendor_domains_domain'), table_name='vendor_domains')
|
||||
op.drop_index('idx_vendor_primary', table_name='vendor_domains')
|
||||
op.drop_index('idx_domain_active', table_name='vendor_domains')
|
||||
op.drop_table('vendor_domains')
|
||||
op.drop_index(op.f('ix_roles_id'), table_name='roles')
|
||||
op.drop_table('roles')
|
||||
op.drop_index(op.f('ix_products_id'), table_name='products')
|
||||
@@ -363,6 +523,33 @@ def downgrade() -> None:
|
||||
op.drop_index(op.f('ix_vendors_subdomain'), table_name='vendors')
|
||||
op.drop_index(op.f('ix_vendors_id'), table_name='vendors')
|
||||
op.drop_table('vendors')
|
||||
op.drop_index(op.f('ix_platform_alerts_severity'), table_name='platform_alerts')
|
||||
op.drop_index(op.f('ix_platform_alerts_is_resolved'), table_name='platform_alerts')
|
||||
op.drop_index(op.f('ix_platform_alerts_id'), table_name='platform_alerts')
|
||||
op.drop_index(op.f('ix_platform_alerts_alert_type'), table_name='platform_alerts')
|
||||
op.drop_table('platform_alerts')
|
||||
op.drop_index(op.f('ix_admin_settings_key'), table_name='admin_settings')
|
||||
op.drop_index(op.f('ix_admin_settings_id'), table_name='admin_settings')
|
||||
op.drop_index(op.f('ix_admin_settings_category'), table_name='admin_settings')
|
||||
op.drop_table('admin_settings')
|
||||
op.drop_index(op.f('ix_admin_sessions_session_token'), table_name='admin_sessions')
|
||||
op.drop_index(op.f('ix_admin_sessions_login_at'), table_name='admin_sessions')
|
||||
op.drop_index(op.f('ix_admin_sessions_is_active'), table_name='admin_sessions')
|
||||
op.drop_index(op.f('ix_admin_sessions_id'), table_name='admin_sessions')
|
||||
op.drop_index(op.f('ix_admin_sessions_admin_user_id'), table_name='admin_sessions')
|
||||
op.drop_table('admin_sessions')
|
||||
op.drop_index(op.f('ix_admin_notifications_type'), table_name='admin_notifications')
|
||||
op.drop_index(op.f('ix_admin_notifications_priority'), table_name='admin_notifications')
|
||||
op.drop_index(op.f('ix_admin_notifications_is_read'), table_name='admin_notifications')
|
||||
op.drop_index(op.f('ix_admin_notifications_id'), table_name='admin_notifications')
|
||||
op.drop_index(op.f('ix_admin_notifications_action_required'), table_name='admin_notifications')
|
||||
op.drop_table('admin_notifications')
|
||||
op.drop_index(op.f('ix_admin_audit_logs_target_type'), table_name='admin_audit_logs')
|
||||
op.drop_index(op.f('ix_admin_audit_logs_target_id'), table_name='admin_audit_logs')
|
||||
op.drop_index(op.f('ix_admin_audit_logs_id'), table_name='admin_audit_logs')
|
||||
op.drop_index(op.f('ix_admin_audit_logs_admin_user_id'), table_name='admin_audit_logs')
|
||||
op.drop_index(op.f('ix_admin_audit_logs_action'), table_name='admin_audit_logs')
|
||||
op.drop_table('admin_audit_logs')
|
||||
op.drop_index(op.f('ix_users_username'), table_name='users')
|
||||
op.drop_index(op.f('ix_users_id'), table_name='users')
|
||||
op.drop_index(op.f('ix_users_email'), table_name='users')
|
||||
@@ -1,30 +0,0 @@
|
||||
"""Add vendor and role tables for slice 1
|
||||
|
||||
Revision ID: 9189d3baaea1
|
||||
Revises: 6fe45d3d84c4
|
||||
Create Date: 2025-10-08 22:39:53.101668
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = '9189d3baaea1'
|
||||
down_revision: Union[str, None] = '6fe45d3d84c4'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
0
alembic/versions/__init__.py
Normal file
0
alembic/versions/__init__.py
Normal file
Reference in New Issue
Block a user