/
home
/
techb158
/
cosmic-risk.abdallabala.com
/
src
/
app
/
api
/
workspaces
/
[workspaceId]
/
projects
/
/home/techb158/cosmic-risk.abdallabala.com/src/app/api/workspaces/[workspaceId]/projects
mkdir
upload
Name
Size
Mode
Actions
route.js
1709
0644
edit
dl
rm
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); } }
Save
cmd:
run