/home/techb158/cosmic-risk.abdallabala.com/src/app/api/workspaces/[workspaceId]/projects
Edit: /home/techb158/cosmic-risk.abdallabala.com/src/app/api/workspaces/[workspaceId]/projects/route.js (1709B)
const { prisma } = require("../../../../../lib/prisma");
const { getActorFromRequest } = require("../../../../../lib/request-context");
const { hasPermission } = require("../../../../../domain/permissions");
const { listWorkspaceProjects, createProject } = require("../../../../../services/project-service");
const { jsonResponse, errorResponse, parseJson } = require("../../../../../lib/http");
async function requireWorkspace(request, workspaceId, permission) {
const actor = await getActorFromRequest(request);
const workspace = await prisma.workspace.findUniqueOrThrow({ where: { id: workspaceId } });
const membership = actor.memberships.find(item => item.organizationId === workspace.organizationId && item.status === "ACTIVE");
if (!membership || !hasPermission(membership.role.permissions, permission)) {
const error = new Error(`Permission denied: ${permission}`);
error.status = 403;
throw error;
}
return { actor, workspace, membership };
}
export async function GET(request, { params }) {
try {
const { workspaceId } = await params;
await requireWorkspace(request, workspaceId, "project:read");
return jsonResponse({ projects: await listWorkspaceProjects(workspaceId) });
} catch (error) {
return errorResponse(error);
}
}
export async function POST(request, { params }) {
try {
const { workspaceId } = await params;
const { actor, workspace } = await requireWorkspace(request, workspaceId, "project:write");
const payload = await parseJson(request);
const project = await createProject({ workspace, actor, payload, request });
return jsonResponse({ project }, 201);
} catch (error) {
return errorResponse(error);
}
}