Files
cloudflare-domain-manager/apps/api/src/routes/services.ts
T
Denozordec d11414666f
Build, Test, and Push CFDM Docker Image / test (push) Has been cancelled
Build, Test, and Push CFDM Docker Image / build-and-push (push) Has been cancelled
Build, Test, and Push CFDM Docker Image / create-release (push) Has been cancelled
Build, Test, and Push CFDM Docker Image / update-wiki (push) Has been cancelled
Refactor project to transition from Rust backend to Node.js with Fastify; update Dockerfile and Docker configurations for new build process; enhance local development instructions in CONTRIBUTING.md; implement health checks in Docker Compose; update pnpm-lock.yaml with new dependencies for API and shared packages; revise README.md to reflect new stack and development setup.
2026-06-19 12:06:32 +07:00

66 lines
1.9 KiB
TypeScript

import type { FastifyInstance } from "fastify";
import { z } from "zod";
import { repos } from "@cfdm/db";
import * as serviceConfig from "../services/service-config-service.js";
export async function serviceRoutes(app: FastifyInstance) {
const createSchema = z.object({
name: z.string(),
slug: z.string(),
service_group_id: z.number().nullable().optional(),
});
app.get("/services", async (request) => {
return serviceConfig.listViews(request.server.db);
});
app.post("/services", async (request) => {
const body = createSchema.parse(request.body);
const service = repos.createService(
request.server.db,
body.name,
body.slug,
);
if (body.service_group_id != null) {
repos.setServiceGroup(
request.server.db,
service.id,
body.service_group_id,
);
}
return serviceConfig.getView(request.server.db, service.id);
});
app.get("/services/:id", async (request) => {
const { id } = request.params as { id: string };
return serviceConfig.getView(request.server.db, Number(id));
});
app.patch("/services/:id", async (request) => {
const { id } = request.params as { id: string };
return serviceConfig.updateConfig(
request.server.db,
request.server.cf,
Number(id),
request.body as serviceConfig.UpdateServiceConfigRequest,
);
});
app.delete("/services/:id", async (request) => {
const { id } = request.params as { id: string };
repos.deleteService(request.server.db, Number(id));
return { deleted: true };
});
app.patch("/services/:id/toggle", async (request) => {
const { id } = request.params as { id: string };
const body = z.object({ enabled: z.boolean() }).parse(request.body);
return serviceConfig.toggleService(
request.server.db,
request.server.cf,
Number(id),
body.enabled,
);
});
}