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 { parseBody } from "../../schemas/common";
|
||||||
import {
|
import {
|
||||||
UpdateProjectSchema,
|
UpdateProjectSchema,
|
||||||
|
CreateProjectSchema,
|
||||||
CreateProjectNoteSchema,
|
CreateProjectNoteSchema,
|
||||||
} from "../../schemas/projects.schema";
|
} from "../../schemas/projects.schema";
|
||||||
import {
|
import {
|
||||||
listProjects,
|
listProjects,
|
||||||
getProject,
|
getProject,
|
||||||
|
createProject,
|
||||||
|
getNextProjectNumber,
|
||||||
updateProject,
|
updateProject,
|
||||||
deleteProject,
|
deleteProject,
|
||||||
createProjectNote,
|
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 } }>(
|
fastify.get<{ Params: { id: string } }>(
|
||||||
"/:id",
|
"/:id",
|
||||||
{ preHandler: requirePermission("projects.view") },
|
{ preHandler: requirePermission("projects.view") },
|
||||||
|
|||||||
Reference in New Issue
Block a user