feat: initial Papo bot scaffold
This commit is contained in:
47
src/web/routes/api.ts
Normal file
47
src/web/routes/api.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { Router } from 'express';
|
||||
import { prisma } from '../../database/index.js';
|
||||
import { settings } from '../../config/state.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/overview', async (_req, res) => {
|
||||
try {
|
||||
const [open, inProgress, closed] = await Promise.all([
|
||||
prisma.ticket.count({ where: { status: 'open' } }),
|
||||
prisma.ticket.count({ where: { status: 'in-progress' } }),
|
||||
prisma.ticket.count({ where: { status: 'closed' } })
|
||||
]);
|
||||
res.json({ tickets: { open, inProgress, closed } });
|
||||
} catch (err) {
|
||||
res.json({ tickets: { open: 0, inProgress: 0, closed: 0 }, error: 'DB unavailable' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/tickets', async (_req, res) => {
|
||||
try {
|
||||
const tickets = await prisma.ticket.findMany({ orderBy: { createdAt: 'desc' }, take: 20 });
|
||||
res.json({ tickets });
|
||||
} catch (err) {
|
||||
res.json({ tickets: [], error: 'DB unavailable' });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/settings', (_req, res) => {
|
||||
res.json({ guilds: Array.from(settings.entries()) });
|
||||
});
|
||||
|
||||
router.post('/settings', (req, res) => {
|
||||
const { guildId, welcomeChannelId, logChannelId, automodEnabled, levelingEnabled } = req.body;
|
||||
if (!guildId) return res.status(400).json({ error: 'guildId required' });
|
||||
const current = settings.get(guildId) ?? {};
|
||||
settings.set(guildId, {
|
||||
...current,
|
||||
welcomeChannelId: welcomeChannelId ?? current.welcomeChannelId,
|
||||
logChannelId: logChannelId ?? current.logChannelId,
|
||||
automodEnabled: automodEnabled ?? current.automodEnabled,
|
||||
levelingEnabled: levelingEnabled ?? current.levelingEnabled
|
||||
});
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user