/home/techb158/balavpn.abdallabala.com/src/app/api/organizations
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/organizations/route.js (1742B)
const { prisma } = require("../../../lib/prisma");
const { getActorFromRequest } = require("../../../lib/request-context");
const { jsonResponse, errorResponse, parseJson } = require("../../../lib/http");
function slug(value) {
return String(value || "organization").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "");
}
export async function GET(request) {
try {
const actor = await getActorFromRequest(request);
return jsonResponse({
organizations: actor.memberships.map(item => ({
id: item.organization.id,
name: item.organization.name,
slug: item.organization.slug,
status: item.organization.status,
role: item.role.code
}))
});
} catch (error) {
return errorResponse(error);
}
}
export async function POST(request) {
try {
const actor = await getActorFromRequest(request);
const body = await parseJson(request);
const ownerRole = await prisma.role.findUniqueOrThrow({ where: { code: "owner" } });
const organization = await prisma.organization.create({
data: {
name: body.name,
slug: body.slug || slug(body.name),
status: "TRIAL",
planCode: body.planCode || "pilot",
manualBilling: true,
memberships: {
create: {
userId: actor.id,
roleId: ownerRole.id,
status: "ACTIVE"
}
},
subscriptions: {
create: {
source: "MANUAL",
status: "TRIALING",
planCode: body.planCode || "pilot",
adminOverride: true
}
}
}
});
return jsonResponse({ organization }, 201);
} catch (error) {
return errorResponse(error);
}
}