|
1 | 1 | import asyncio
|
2 | 2 | import uuid
|
| 3 | +import logging |
3 | 4 | from datetime import UTC, datetime
|
4 | 5 |
|
5 | 6 | from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, MetaData, String, Table, insert, select
|
|
10 | 11 | from ..app.core.security import get_password_hash
|
11 | 12 | from ..app.models.user import User
|
12 | 13 |
|
| 14 | +logging.basicConfig(level=logging.INFO) |
| 15 | +logger = logging.getLogger(__name__) |
| 16 | + |
13 | 17 |
|
14 | 18 | async def create_first_user(session: AsyncSession) -> None:
|
15 |
| - name = settings.ADMIN_NAME |
16 |
| - email = settings.ADMIN_EMAIL |
17 |
| - username = settings.ADMIN_USERNAME |
18 |
| - hashed_password = get_password_hash(settings.ADMIN_PASSWORD) |
| 19 | + try: |
| 20 | + name = settings.ADMIN_NAME |
| 21 | + email = settings.ADMIN_EMAIL |
| 22 | + username = settings.ADMIN_USERNAME |
| 23 | + hashed_password = get_password_hash(settings.ADMIN_PASSWORD) |
| 24 | + |
| 25 | + query = select(User).filter_by(email=email) |
| 26 | + result = await session.execute(query) |
| 27 | + user = result.scalar_one_or_none() |
19 | 28 |
|
20 |
| - query = select(User).filter_by(email=email) |
21 |
| - result = await session.execute(query) |
22 |
| - user = result.scalar_one_or_none() |
| 29 | + if user is None: |
| 30 | + metadata = MetaData() |
| 31 | + user_table = Table( |
| 32 | + "user", |
| 33 | + metadata, |
| 34 | + Column("id", Integer, primary_key=True, autoincrement=True, nullable=False), |
| 35 | + Column("name", String(30), nullable=False), |
| 36 | + Column("username", String(20), nullable=False, unique=True, index=True), |
| 37 | + Column("email", String(50), nullable=False, unique=True, index=True), |
| 38 | + Column("hashed_password", String, nullable=False), |
| 39 | + Column("profile_image_url", String, default="https://profileimageurl.com"), |
| 40 | + Column("uuid", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True), |
| 41 | + Column("created_at", DateTime(timezone=True), default=lambda: datetime.now(UTC), nullable=False), |
| 42 | + Column("updated_at", DateTime), |
| 43 | + Column("deleted_at", DateTime), |
| 44 | + Column("is_deleted", Boolean, default=False, index=True), |
| 45 | + Column("is_superuser", Boolean, default=False), |
| 46 | + Column("tier_id", Integer, ForeignKey("tier.id"), index=True), |
| 47 | + ) |
23 | 48 |
|
24 |
| - if user is None: |
25 |
| - metadata = MetaData() |
26 |
| - user_table = Table( |
27 |
| - "user", |
28 |
| - metadata, |
29 |
| - Column("id", Integer, primary_key=True, autoincrement=True, nullable=False), |
30 |
| - Column("name", String(30), nullable=False), |
31 |
| - Column("username", String(20), nullable=False, unique=True, index=True), |
32 |
| - Column("email", String(50), nullable=False, unique=True, index=True), |
33 |
| - Column("hashed_password", String, nullable=False), |
34 |
| - Column("profile_image_url", String, default="https://profileimageurl.com"), |
35 |
| - Column("uuid", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True), |
36 |
| - Column("created_at", DateTime(timezone=True), default=lambda: datetime.now(UTC), nullable=False), |
37 |
| - Column("updated_at", DateTime), |
38 |
| - Column("deleted_at", DateTime), |
39 |
| - Column("is_deleted", Boolean, default=False, index=True), |
40 |
| - Column("is_superuser", Boolean, default=False), |
41 |
| - Column("tier_id", Integer, ForeignKey("tier.id"), index=True), |
42 |
| - ) |
| 49 | + data = { |
| 50 | + "name": name, |
| 51 | + "email": email, |
| 52 | + "username": username, |
| 53 | + "hashed_password": hashed_password, |
| 54 | + "is_superuser": True, |
| 55 | + } |
43 | 56 |
|
44 |
| - data = { |
45 |
| - "name": name, |
46 |
| - "email": email, |
47 |
| - "username": username, |
48 |
| - "hashed_password": hashed_password, |
49 |
| - "is_superuser": True, |
50 |
| - } |
| 57 | + stmt = insert(user_table).values(data) |
| 58 | + async with async_engine.connect() as conn: |
| 59 | + await conn.execute(stmt) |
| 60 | + await conn.commit() |
51 | 61 |
|
52 |
| - stmt = insert(user_table).values(data) |
53 |
| - async with async_engine.connect() as conn: |
54 |
| - await conn.execute(stmt) |
55 |
| - await conn.commit() |
| 62 | + logger.info(f"Admin user {username} created successfully.") |
| 63 | + |
| 64 | + else: |
| 65 | + logger.info(f"Admin user {username} already exists.") |
| 66 | + |
| 67 | + except Exception as e: |
| 68 | + logger.error(f"Error creating admin user: {e}") |
56 | 69 |
|
57 | 70 |
|
58 | 71 | async def main():
|
|
0 commit comments