/home/techb158/balavpn.abdallabala.com/src/app/api/integrations/[integrationId]
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/integrations/[integrationId]/route.js (2476B)
const { prisma } = require("../../../../lib/prisma");
const { getActorFromRequest } = require("../../../../lib/request-context");
const { hasPermission } = require("../../../../domain/permissions");
const { jsonResponse, errorResponse, parseJson } = require("../../../../lib/http");
const { getIntegration, updateIntegration, deleteIntegration } = require("../../../../services/integration-service");
async function requireIntegrationAccess(request, integrationId, permission) {
const actor = await getActorFromRequest(request);
const integration = await prisma.integration.findUnique({
where: { id: integrationId },
include: { workspace: true }
});
if (!integration) {
const error = new Error(`Integration not found: ${integrationId}`);
error.status = 404;
throw error;
}
const membership = actor.memberships.find(m => m.organizationId === integration.workspace.organizationId && m.status === "ACTIVE");
if (!membership || !hasPermission(membership.role.permissions, permission)) {
const error = new Error(`Permission denied: ${permission}`);
error.status = 403;
throw error;
}
return { actor, integration };
}
export async function GET(request, { params }) {
try {
const { integrationId } = await params;
await requireIntegrationAccess(request, integrationId, "integration:read");
const integration = await getIntegration(integrationId);
return jsonResponse({ integration });
} catch (error) {
return errorResponse(error);
}
}
export async function PATCH(request, { params }) {
try {
const { integrationId } = await params;
const { actor } = await requireIntegrationAccess(request, integrationId, "integration:manage");
const body = await parseJson(request);
if (body.clearSyncRuns) {
await prisma.integrationSyncRun.deleteMany({ where: { integrationId } });
return jsonResponse({ cleared: true });
}
const integration = await updateIntegration(integrationId, body, actor, request);
return jsonResponse({ integration });
} catch (error) {
return errorResponse(error);
}
}
export async function DELETE(request, { params }) {
try {
const { integrationId } = await params;
const { actor } = await requireIntegrationAccess(request, integrationId, "integration:manage");
const result = await deleteIntegration(integrationId, actor, request);
return jsonResponse(result);
} catch (error) {
return errorResponse(error);
}
}