feat(projects): POST /projects + GET /projects/next-number
This commit is contained in:
@@ -6,11 +6,14 @@ import { parsePagination, buildPaginationMeta } from "../../utils/pagination";
|
||||
import { parseBody } from "../../schemas/common";
|
||||
import {
|
||||
UpdateProjectSchema,
|
||||
CreateProjectSchema,
|
||||
CreateProjectNoteSchema,
|
||||
} from "../../schemas/projects.schema";
|
||||
import {
|
||||
listProjects,
|
||||
getProject,
|
||||
createProject,
|
||||
getNextProjectNumber,
|
||||
updateProject,
|
||||
deleteProject,
|
||||
createProjectNote,
|
||||
@@ -46,6 +49,40 @@ export default async function projectsRoutes(
|
||||
},
|
||||
);
|
||||
|
||||
// GET /api/admin/projects/next-number — preview the next shared number
|
||||
fastify.get(
|
||||
"/next-number",
|
||||
{ preHandler: requirePermission("projects.create") },
|
||||
async (_request, reply) => {
|
||||
const number = await getNextProjectNumber();
|
||||
return success(reply, { number, next_number: number });
|
||||
},
|
||||
);
|
||||
|
||||
// POST /api/admin/projects — create a standalone (manual) project
|
||||
fastify.post(
|
||||
"/",
|
||||
{ preHandler: requirePermission("projects.create") },
|
||||
async (request, reply) => {
|
||||
const parsed = parseBody(CreateProjectSchema, request.body);
|
||||
if ("error" in parsed) return error(reply, parsed.error, 400);
|
||||
|
||||
const result = await createProject(parsed.data);
|
||||
if ("error" in result)
|
||||
return error(reply, result.error, (result as any).status ?? 400);
|
||||
|
||||
await logAudit({
|
||||
request,
|
||||
authData: request.authData,
|
||||
action: "create",
|
||||
entityType: "project",
|
||||
entityId: result.id,
|
||||
description: `Vytvořen projekt ${result.project_number}`,
|
||||
});
|
||||
return success(reply, { id: result.id }, 201, "Projekt byl vytvořen");
|
||||
},
|
||||
);
|
||||
|
||||
fastify.get<{ Params: { id: string } }>(
|
||||
"/:id",
|
||||
{ preHandler: requirePermission("projects.view") },
|
||||
|
||||
Reference in New Issue
Block a user