| |
| from database.db import db |
|
|
| class AdminService: |
| @staticmethod |
| async def give_currency(user_id: int, currency_type: str, amount: int): |
| async with db.pool.acquire() as conn: |
| await conn.execute("INSERT INTO users (user_id) VALUES ($1) ON CONFLICT DO NOTHING", user_id) |
| if currency_type == "coins": |
| await conn.execute("UPDATE users SET coins = coins + $1 WHERE user_id = $2", amount, user_id) |
| elif currency_type == "dust": |
| await conn.execute("UPDATE users SET dust = dust + $1 WHERE user_id = $2", amount, user_id) |
| else: |
| raise ValueError("Invalid currency type.") |
| return await conn.fetchrow("SELECT coins, dust FROM users WHERE user_id = $1", user_id) |
|
|
| @staticmethod |
| async def set_pity(user_id: int, banner_id: int, pity_amount: int): |
| async with db.pool.acquire() as conn: |
| await conn.execute( |
| """ |
| INSERT INTO user_pity (user_id, banner_id, pull_count) |
| VALUES ($1, $2, $3) |
| ON CONFLICT (user_id, banner_id) DO UPDATE SET pull_count = $3 |
| """, |
| user_id, banner_id, pity_amount |
| ) |
| return pity_amount |
|
|
| @staticmethod |
| async def grant_character(user_id: int, char_id: int): |
| async with db.pool.acquire() as conn: |
| char_data = await conn.fetchrow("SELECT name, rarity FROM characters WHERE char_id = $1", char_id) |
| |
| if not char_data: |
| raise ValueError(f"Global Character ID `{char_id}` does not exist.") |
| |
| |
| instance_id = await conn.fetchval(""" |
| WITH update_char AS ( |
| UPDATE characters SET acquired_count = acquired_count + 1 WHERE char_id = $2 RETURNING acquired_count |
| ) |
| INSERT INTO user_characters (user_id, char_id, print_num) |
| SELECT $1, $2, acquired_count FROM update_char |
| RETURNING instance_id; |
| """, user_id, char_id) |
| |
| return instance_id, char_data['name'], char_data['rarity'] |
|
|