27 lines
988 B
TypeScript
27 lines
988 B
TypeScript
|
|
/**
|
|||
|
|
* Settings Routes – key/value application settings
|
|||
|
|
*/
|
|||
|
|
import type { FastifyInstance } from 'fastify';
|
|||
|
|
import type { DatabaseInterface } from '../database/DatabaseInterface.js';
|
|||
|
|
|
|||
|
|
export function registerSettingsRoutes(fastify: FastifyInstance, db: DatabaseInterface) {
|
|||
|
|
// Get a single setting by key
|
|||
|
|
fastify.get('/api/settings/:key', async (request, reply) => {
|
|||
|
|
const { key } = request.params as { key: string };
|
|||
|
|
const setting = db.getSetting(key);
|
|||
|
|
if (!setting) return reply.code(404).send({ error: 'Setting not found' });
|
|||
|
|
return setting;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// Create or update a setting (upsert)
|
|||
|
|
fastify.put('/api/settings/:key', async (request) => {
|
|||
|
|
const { key } = request.params as { key: string };
|
|||
|
|
const body = request.body as { value?: string };
|
|||
|
|
if (body.value === undefined) {
|
|||
|
|
return { error: 'Value is required' };
|
|||
|
|
}
|
|||
|
|
db.setSetting(key, body.value);
|
|||
|
|
return { key, value: body.value, updated_at: new Date().toISOString() };
|
|||
|
|
});
|
|||
|
|
}
|