diff --git a/apps/web/app/setup/organization/create/actions.ts b/apps/web/app/setup/organization/create/actions.ts new file mode 100644 index 0000000000..11261b081a --- /dev/null +++ b/apps/web/app/setup/organization/create/actions.ts @@ -0,0 +1,35 @@ +"use server"; + +import { authenticatedActionClient } from "@/lib/utils/action-client"; +import { getIsMultiOrgEnabled } from "@/modules/ee/license-check/lib/utils"; +import { z } from "zod"; +import { gethasNoOrganizations } from "@formbricks/lib/instance/service"; +import { createMembership } from "@formbricks/lib/membership/service"; +import { createOrganization } from "@formbricks/lib/organization/service"; +import { OperationNotAllowedError } from "@formbricks/types/errors"; + +const ZCreateOrganizationAction = z.object({ + organizationName: z.string(), +}); + +export const createOrganizationAction = authenticatedActionClient + .schema(ZCreateOrganizationAction) + .action(async ({ ctx, parsedInput }) => { + const hasNoOrganizations = await gethasNoOrganizations(); + const isMultiOrgEnabled = await getIsMultiOrgEnabled(); + + if (!hasNoOrganizations && !isMultiOrgEnabled) { + throw new OperationNotAllowedError("This action can only be performed on a fresh instance."); + } + + const newOrganization = await createOrganization({ + name: parsedInput.organizationName, + }); + + await createMembership(newOrganization.id, ctx.user.id, { + role: "owner", + accepted: true, + }); + + return newOrganization; + }); diff --git a/apps/web/app/setup/organization/create/components/create-organization.tsx b/apps/web/app/setup/organization/create/components/create-organization.tsx index 4975c46540..5cccacb52b 100644 --- a/apps/web/app/setup/organization/create/components/create-organization.tsx +++ b/apps/web/app/setup/organization/create/components/create-organization.tsx @@ -1,6 +1,6 @@ "use client"; -import { createOrganizationAction } from "@/modules/organization/actions"; +import { createOrganizationAction } from "@/app/setup/organization/create/actions"; import { Button } from "@/modules/ui/components/button"; import { FormControl, FormError, FormField, FormItem, FormProvider } from "@/modules/ui/components/form"; import { Input } from "@/modules/ui/components/input";