Files
NightSpire/web-next/lib/admin-gold.ts
T
Inna d9e6ff1496 Admin: gestión de opciones de oro (home_goldprice)
- lib/admin-gold.ts: list/create/delete sobre home_goldprice (id, gold_amount, price).
- API: POST /api/admin/gold, DELETE /api/admin/gold/[id] (403 sin admin).
- UI: /admin/gold con AdminGoldManager (alta ordenada por cantidad + borrado),
  enlace desde el índice del admin.
- i18n es/en (Admin): manageGold, gold, goldAmount, goldPrice, goldUnit, noGold.

Verificado: build OK, /admin/gold 307→login sin sesión, APIs 403 sin admin,
columnas confirmadas en la migración Django.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 00:35:13 +00:00

28 lines
906 B
TypeScript

import type { RowDataPacket, ResultSetHeader } from 'mysql2'
import { db, DB } from './db'
export interface GoldOption {
id: number
gold_amount: number
price: number
}
export async function listGoldOptions(): Promise<GoldOption[]> {
const [rows] = await db(DB.default).query<RowDataPacket[]>(
'SELECT id, gold_amount, price FROM home_goldprice ORDER BY gold_amount',
)
return rows.map((r) => ({ id: r.id, gold_amount: r.gold_amount, price: Number(r.price) }))
}
export async function createGoldOption(goldAmount: number, price: number): Promise<number> {
const [res] = await db(DB.default).query<ResultSetHeader>(
'INSERT INTO home_goldprice (gold_amount, price) VALUES (?, ?)',
[goldAmount, price],
)
return res.insertId
}
export async function deleteGoldOption(id: number): Promise<void> {
await db(DB.default).query('DELETE FROM home_goldprice WHERE id = ?', [id])
}