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>
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
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])
|
||||
}
|
||||
Reference in New Issue
Block a user