d9e6ff1496
- 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>
28 lines
906 B
TypeScript
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])
|
|
}
|