Add project overview import

This commit is contained in:
2026-07-29 08:36:57 +02:00
parent 0180f768ac
commit 194bc9c0b1
9 changed files with 268 additions and 32 deletions
@@ -1,7 +1,10 @@
import type { NextFunction, Request, Response } from "express";
import { ProjectRevisionConflictError } from "../../domain/errors/project-revision-conflict.error.js";
import { ProjectStateConflictError } from "../../domain/errors/project-state-conflict.error.js";
import { importProjectTransferSchema } from "../../shared/validation/project-transfer.schemas.js";
import {
importProjectTransferAsNewSchema,
importProjectTransferSchema,
} from "../../shared/validation/project-transfer.schemas.js";
import { projectCommandService } from "../composition/project-command-stores.js";
import { projectTransferStore } from "../composition/project-transfer-store.js";
@@ -22,6 +25,31 @@ export function exportProjectTransfer(req: Request, res: Response) {
return res.json(transfer);
}
export function importProjectTransferAsNewProject(
req: Request,
res: Response,
next: NextFunction
) {
const parsed = importProjectTransferAsNewSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({ error: parsed.error.flatten() });
}
try {
return res
.status(201)
.json(projectTransferStore.importDuplicate(parsed.data.transfer));
} catch (error) {
if (
error instanceof Error &&
(error.message.startsWith("Project transfer") ||
error.message.startsWith("Snapshot"))
) {
return res.status(400).json({ error: error.message });
}
return next(error);
}
}
export function importProjectTransfer(
req: Request,
res: Response,
+2
View File
@@ -30,12 +30,14 @@ import {
import {
exportProjectTransfer,
importProjectTransfer,
importProjectTransferAsNewProject,
} from "../controllers/project-transfer.controller.js";
export const projectRouter = Router();
projectRouter.get("/", listProjects);
projectRouter.post("/", createProject);
projectRouter.post("/import", importProjectTransferAsNewProject);
projectRouter.get("/:projectId", getProject);
projectRouter.get("/:projectId/export", exportProjectTransfer);
projectRouter.post("/:projectId/import", importProjectTransfer);