admin: add and rename bars
This commit is contained in:
parent
1442fbae75
commit
02c7e9b5fd
2 changed files with 81 additions and 15 deletions
|
|
@ -89,24 +89,58 @@ export function registerAdminRoutes(app: FastifyInstance, db: DB) {
|
|||
}));
|
||||
});
|
||||
|
||||
app.patch<{ Params: { id: string }; Body: { pfand_cents?: number; drink_ids?: number[] } }>(
|
||||
app.post<{ Body: { name: string; pfand_cents?: number } }>(
|
||||
'/admin/api/bars',
|
||||
async (req, reply) => {
|
||||
if (!requireAuth(req, reply)) return;
|
||||
const name = req.body?.name?.trim();
|
||||
const pfand_cents = req.body?.pfand_cents ?? 0;
|
||||
if (!name) return reply.code(400).send({ error: 'name required' });
|
||||
try {
|
||||
const info = db
|
||||
.prepare('INSERT INTO bars (name, pfand_cents) VALUES (?, ?)')
|
||||
.run(name, pfand_cents);
|
||||
return { id: Number(info.lastInsertRowid) };
|
||||
} catch (e: any) {
|
||||
if (String(e.message).includes('UNIQUE')) {
|
||||
return reply.code(409).send({ error: 'name already exists' });
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
app.patch<{ Params: { id: string }; Body: { name?: string; pfand_cents?: number; drink_ids?: number[] } }>(
|
||||
'/admin/api/bars/:id',
|
||||
async (req, reply) => {
|
||||
if (!requireAuth(req, reply)) return;
|
||||
const id = Number(req.params.id);
|
||||
const { pfand_cents, drink_ids } = req.body ?? {};
|
||||
db.transaction(() => {
|
||||
if (pfand_cents !== undefined) {
|
||||
db.prepare('UPDATE bars SET pfand_cents = ? WHERE id = ?').run(pfand_cents, id);
|
||||
const { name, pfand_cents, drink_ids } = req.body ?? {};
|
||||
try {
|
||||
db.transaction(() => {
|
||||
if (name !== undefined) {
|
||||
const trimmed = name.trim();
|
||||
if (!trimmed) throw new Error('name empty');
|
||||
db.prepare('UPDATE bars SET name = ? WHERE id = ?').run(trimmed, id);
|
||||
}
|
||||
if (pfand_cents !== undefined) {
|
||||
db.prepare('UPDATE bars SET pfand_cents = ? WHERE id = ?').run(pfand_cents, id);
|
||||
}
|
||||
if (Array.isArray(drink_ids)) {
|
||||
db.prepare('DELETE FROM bar_drinks WHERE bar_id = ?').run(id);
|
||||
const ins = db.prepare(
|
||||
'INSERT INTO bar_drinks (bar_id, drink_id, sort_order) VALUES (?, ?, ?)'
|
||||
);
|
||||
drink_ids.forEach((did, idx) => ins.run(id, did, idx));
|
||||
}
|
||||
})();
|
||||
} catch (e: any) {
|
||||
if (String(e.message).includes('UNIQUE')) {
|
||||
return reply.code(409).send({ error: 'name already exists' });
|
||||
}
|
||||
if (Array.isArray(drink_ids)) {
|
||||
db.prepare('DELETE FROM bar_drinks WHERE bar_id = ?').run(id);
|
||||
const ins = db.prepare(
|
||||
'INSERT INTO bar_drinks (bar_id, drink_id, sort_order) VALUES (?, ?, ?)'
|
||||
);
|
||||
drink_ids.forEach((did, idx) => ins.run(id, did, idx));
|
||||
}
|
||||
})();
|
||||
if (e.message === 'name empty') return reply.code(400).send({ error: 'name empty' });
|
||||
throw e;
|
||||
}
|
||||
return { ok: true };
|
||||
}
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue