Files
NightSpire/web-next/lib/admin-recruit.ts
T
Inna c6c56c3d95 Admin: recompensas de reclutamiento (recruit-a-friend)
- lib/admin-recruit.ts: list/create/delete sobre home_recruitreward
  (required_friends, reward_name, item_id, item_quantity, item_link, icon_class).
- API: POST /api/admin/recruit, DELETE /api/admin/recruit/[id] (403 sin admin).
- UI: /admin/recruit con AdminRecruitManager (alta ordenada por amigos requeridos),
  enlace desde el índice del admin.
- i18n es/en (Admin): 10 claves nuevas.

Verificado: build OK, /admin/recruit 307→login, APIs 403 sin admin,
columnas confirmadas en la migración 0001_initial.

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

42 lines
1.4 KiB
TypeScript

import type { RowDataPacket, ResultSetHeader } from 'mysql2'
import { db, DB } from './db'
export interface RecruitReward {
id: number
required_friends: number
reward_name: string
item_id: number
item_quantity: number
item_link: string
icon_class: string
}
export async function listRecruitRewards(): Promise<RecruitReward[]> {
const [rows] = await db(DB.default).query<RowDataPacket[]>(
'SELECT id, required_friends, reward_name, item_id, item_quantity, item_link, icon_class FROM home_recruitreward ORDER BY required_friends, id',
)
return rows.map((r) => ({
id: r.id,
required_friends: r.required_friends,
reward_name: r.reward_name,
item_id: r.item_id,
item_quantity: r.item_quantity,
item_link: r.item_link,
icon_class: r.icon_class,
}))
}
export async function createRecruitReward(data: Omit<RecruitReward, 'id'>): Promise<number> {
const [res] = await db(DB.default).query<ResultSetHeader>(
`INSERT INTO home_recruitreward
(required_friends, reward_name, item_id, item_quantity, item_link, icon_class)
VALUES (?, ?, ?, ?, ?, ?)`,
[data.required_friends, data.reward_name, data.item_id, data.item_quantity, data.item_link, data.icon_class],
)
return res.insertId
}
export async function deleteRecruitReward(id: number): Promise<void> {
await db(DB.default).query('DELETE FROM home_recruitreward WHERE id = ?', [id])
}