feat: Add database initialization, reset, and verification scripts
This commit is contained in:
86
scripts/verify_db.py
Normal file
86
scripts/verify_db.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""Verify DB initialization results: enums, roles, admin user, pricing_settings."""
|
||||
from __future__ import annotations
|
||||
import logging
|
||||
from sqlalchemy import create_engine, text
|
||||
from config.database import DATABASE_URL
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
ENUMS = [
|
||||
'miningoperationtype',
|
||||
'scenariostatus',
|
||||
'financialcategory',
|
||||
'costbucket',
|
||||
'distributiontype',
|
||||
'stochasticvariable',
|
||||
'resourcetype',
|
||||
]
|
||||
|
||||
SQL_CHECK_ENUM = "SELECT typname FROM pg_type WHERE typname = ANY(:names)"
|
||||
SQL_ROLES = "SELECT id, name, display_name FROM roles ORDER BY id"
|
||||
SQL_ADMIN = "SELECT id, email, username, is_active, is_superuser FROM users WHERE id = 1"
|
||||
SQL_USER_ROLES = "SELECT user_id, role_id, granted_by FROM user_roles WHERE user_id = 1"
|
||||
SQL_PRICING = "SELECT id, slug, name, default_currency FROM pricing_settings WHERE slug = 'default'"
|
||||
|
||||
|
||||
def run():
|
||||
engine = create_engine(DATABASE_URL, future=True)
|
||||
with engine.connect() as conn:
|
||||
print('Using DATABASE_URL:', DATABASE_URL)
|
||||
# enums
|
||||
res = conn.execute(text(SQL_CHECK_ENUM), dict(names=ENUMS)).fetchall()
|
||||
found = [r[0] for r in res]
|
||||
print('\nEnums found:')
|
||||
for name in ENUMS:
|
||||
print(f' {name}:', 'YES' if name in found else 'NO')
|
||||
|
||||
# roles
|
||||
try:
|
||||
roles = conn.execute(text(SQL_ROLES)).fetchall()
|
||||
print('\nRoles:')
|
||||
if roles:
|
||||
for r in roles:
|
||||
print(f' id={r.id} name={r.name} display_name={r.display_name}')
|
||||
else:
|
||||
print(' (no roles found)')
|
||||
except Exception as e:
|
||||
print('\nRoles query failed:', e)
|
||||
|
||||
# admin user
|
||||
try:
|
||||
admin = conn.execute(text(SQL_ADMIN)).fetchone()
|
||||
print('\nAdmin user:')
|
||||
if admin:
|
||||
print(f' id={admin.id} email={admin.email} username={admin.username} is_active={admin.is_active} is_superuser={admin.is_superuser}')
|
||||
else:
|
||||
print(' (admin user not found)')
|
||||
except Exception as e:
|
||||
print('\nAdmin query failed:', e)
|
||||
|
||||
# user_roles
|
||||
try:
|
||||
ur = conn.execute(text(SQL_USER_ROLES)).fetchall()
|
||||
print('\nUser roles for user_id=1:')
|
||||
if ur:
|
||||
for row in ur:
|
||||
print(f' user_id={row.user_id} role_id={row.role_id} granted_by={row.granted_by}')
|
||||
else:
|
||||
print(' (no user_roles rows for user_id=1)')
|
||||
except Exception as e:
|
||||
print('\nUser_roles query failed:', e)
|
||||
|
||||
# pricing settings
|
||||
try:
|
||||
p = conn.execute(text(SQL_PRICING)).fetchone()
|
||||
print('\nPricing settings (slug=default):')
|
||||
if p:
|
||||
print(f' id={p.id} slug={p.slug} name={p.name} default_currency={p.default_currency}')
|
||||
else:
|
||||
print(' (default pricing settings not found)')
|
||||
except Exception as e:
|
||||
print('\nPricing query failed:', e)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
run()
|
||||
Reference in New Issue
Block a user