aboutsummaryrefslogtreecommitdiff
path: root/api/src/modules/settings
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
commitef55d9bb24430610b60c1b77821307cd72c08c55 (patch)
treee6935a810b34370b0a4c821e55f6397aac50c832 /api/src/modules/settings
downloadhelpdesk-ef55d9bb24430610b60c1b77821307cd72c08c55.tar.gz
helpdesk-ef55d9bb24430610b60c1b77821307cd72c08c55.zip
feat: upload of the projectHEADmaster
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'api/src/modules/settings')
-rw-r--r--api/src/modules/settings/settings.controller.ts24
-rw-r--r--api/src/modules/settings/settings.repository.ts26
-rw-r--r--api/src/modules/settings/settings.routes.ts30
-rw-r--r--api/src/modules/settings/settings.schema.ts7
4 files changed, 87 insertions, 0 deletions
diff --git a/api/src/modules/settings/settings.controller.ts b/api/src/modules/settings/settings.controller.ts
new file mode 100644
index 0000000..479f476
--- /dev/null
+++ b/api/src/modules/settings/settings.controller.ts
@@ -0,0 +1,24 @@
+import type { FastifyReply, FastifyRequest } from 'fastify';
+import { getSettings, updateSettings } from './settings.repository.js';
+import type { UpdateSettingsBody } from './settings.schema.js';
+
+export async function getSettingsHandler(
+ request: FastifyRequest,
+ reply: FastifyReply,
+) {
+ const settings = await getSettings(request.server.db);
+ return reply.send(settings);
+}
+
+export async function updateSettingsHandler(
+ request: FastifyRequest<{ Body: UpdateSettingsBody }>,
+ reply: FastifyReply,
+) {
+ // Apenas admins podem atualizar as configurações globais
+ if (request.user?.role !== 'admin') {
+ return reply.forbidden('Apenas administradores podem alterar configurações do sistema.');
+ }
+
+ const updated = await updateSettings(request.server.db, request.body);
+ return reply.send(updated);
+}
diff --git a/api/src/modules/settings/settings.repository.ts b/api/src/modules/settings/settings.repository.ts
new file mode 100644
index 0000000..a3d38ba
--- /dev/null
+++ b/api/src/modules/settings/settings.repository.ts
@@ -0,0 +1,26 @@
+import type { Database } from '@/db/connection.js';
+import { systemSettings } from '@/db/schema.js';
+
+export async function getSettings(db: Database) {
+ let [settings] = await db.select().from(systemSettings).limit(1);
+
+ if (!settings) {
+ [settings] = await db.insert(systemSettings).values({ allowRequesterChat: true }).returning();
+ }
+
+ return settings;
+}
+
+export async function updateSettings(db: Database, data: { allowRequesterChat: boolean }) {
+ let [settings] = await db.select().from(systemSettings).limit(1);
+
+ if (!settings) {
+ [settings] = await db.insert(systemSettings).values(data).returning();
+ } else {
+ [settings] = await db.update(systemSettings)
+ .set({ allowRequesterChat: data.allowRequesterChat, updatedAt: new Date().toISOString() })
+ .returning();
+ }
+
+ return settings;
+}
diff --git a/api/src/modules/settings/settings.routes.ts b/api/src/modules/settings/settings.routes.ts
new file mode 100644
index 0000000..5ae97da
--- /dev/null
+++ b/api/src/modules/settings/settings.routes.ts
@@ -0,0 +1,30 @@
+import type { FastifyInstance } from 'fastify';
+import { getSettingsHandler, updateSettingsHandler } from './settings.controller.js';
+import { SettingsSchema } from './settings.schema.js';
+
+export default async function settingsRoutes(fastify: FastifyInstance) {
+ fastify.get(
+ '/',
+ {
+ schema: {
+ tags: ['Settings'],
+ summary: 'Obtém as configurações globais do sistema',
+ },
+ preHandler: [fastify.authenticate],
+ },
+ getSettingsHandler,
+ );
+
+ fastify.patch(
+ '/',
+ {
+ schema: {
+ tags: ['Settings'],
+ summary: 'Atualiza as configurações globais do sistema (apenas admin)',
+ body: SettingsSchema,
+ },
+ preHandler: [fastify.authenticate],
+ },
+ updateSettingsHandler,
+ );
+}
diff --git a/api/src/modules/settings/settings.schema.ts b/api/src/modules/settings/settings.schema.ts
new file mode 100644
index 0000000..cd3a19b
--- /dev/null
+++ b/api/src/modules/settings/settings.schema.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod';
+
+export const SettingsSchema = z.object({
+ allowRequesterChat: z.boolean(),
+});
+
+export type UpdateSettingsBody = z.infer<typeof SettingsSchema>;