mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 17:11:09 -05:00
109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.db import connection
|
|
from django.contrib.auth.hashers import make_password
|
|
import uuid
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Reset database and create admin user"
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write("Resetting database...")
|
|
|
|
# Drop all tables
|
|
with connection.cursor() as cursor:
|
|
cursor.execute(
|
|
"""
|
|
DO $$ DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
FOR r IN (
|
|
SELECT tablename FROM pg_tables
|
|
WHERE schemaname = current_schema()
|
|
) LOOP
|
|
EXECUTE 'DROP TABLE IF EXISTS ' || \
|
|
quote_ident(r.tablename) || ' CASCADE';
|
|
END LOOP;
|
|
END $$;
|
|
"""
|
|
)
|
|
|
|
# Reset sequences
|
|
cursor.execute(
|
|
"""
|
|
DO $$ DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
FOR r IN (
|
|
SELECT sequencename FROM pg_sequences
|
|
WHERE schemaname = current_schema()
|
|
) LOOP
|
|
EXECUTE 'ALTER SEQUENCE ' || \
|
|
quote_ident(r.sequencename) || ' RESTART WITH 1';
|
|
END LOOP;
|
|
END $$;
|
|
"""
|
|
)
|
|
|
|
self.stdout.write("All tables dropped and sequences reset.")
|
|
|
|
# Run migrations
|
|
from django.core.management import call_command
|
|
|
|
call_command("migrate")
|
|
|
|
self.stdout.write("Migrations applied.")
|
|
|
|
# Create superuser using raw SQL
|
|
try:
|
|
with connection.cursor() as cursor:
|
|
# Create user
|
|
user_id = str(uuid.uuid4())[:10]
|
|
cursor.execute(
|
|
"""
|
|
INSERT INTO accounts_user (
|
|
username, password, email, is_superuser, is_staff,
|
|
is_active, date_joined, user_id, first_name,
|
|
last_name, role, is_banned, ban_reason,
|
|
theme_preference
|
|
) VALUES (
|
|
'admin', %s, 'admin@thrillwiki.com', true, true,
|
|
true, NOW(), %s, '', '', 'SUPERUSER', false, '',
|
|
'light'
|
|
) RETURNING id;
|
|
""",
|
|
[make_password("admin"), user_id],
|
|
)
|
|
|
|
result = cursor.fetchone()
|
|
if result is None:
|
|
raise Exception("Failed to create user - no ID returned")
|
|
user_db_id = result[0]
|
|
|
|
# Create profile
|
|
profile_id = str(uuid.uuid4())[:10]
|
|
cursor.execute(
|
|
"""
|
|
INSERT INTO accounts_userprofile (
|
|
profile_id, display_name, pronouns, bio,
|
|
twitter, instagram, youtube, discord,
|
|
coaster_credits, dark_ride_credits,
|
|
flat_ride_credits, water_ride_credits,
|
|
user_id, avatar
|
|
) VALUES (
|
|
%s, 'Admin', 'they/them', 'ThrillWiki Administrator',
|
|
'', '', '', '',
|
|
0, 0, 0, 0,
|
|
%s, ''
|
|
);
|
|
""",
|
|
[profile_id, user_db_id],
|
|
)
|
|
|
|
self.stdout.write("Superuser created.")
|
|
except Exception as e:
|
|
self.stdout.write(self.style.ERROR(f"Error creating superuser: {str(e)}"))
|
|
raise
|
|
|
|
self.stdout.write(self.style.SUCCESS("Database reset complete."))
|