From 0f9b372cbdba483f122cce5cc57fa0670e5f332a Mon Sep 17 00:00:00 2001 From: Zai Shi Date: Thu, 24 Jul 2025 11:12:54 -0700 Subject: [PATCH] add tenancy crud --- .../latest/internal/tenancy/current/crud.tsx | 26 +++++++++++++++ .../src/interface/crud/tenancy.ts | 33 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 apps/backend/src/app/api/latest/internal/tenancy/current/crud.tsx create mode 100644 packages/stack-shared/src/interface/crud/tenancy.ts diff --git a/apps/backend/src/app/api/latest/internal/tenancy/current/crud.tsx b/apps/backend/src/app/api/latest/internal/tenancy/current/crud.tsx new file mode 100644 index 000000000..80587df95 --- /dev/null +++ b/apps/backend/src/app/api/latest/internal/tenancy/current/crud.tsx @@ -0,0 +1,26 @@ +import { createCrudHandlers } from "@/route-handlers/crud-handler"; +import { tenancyCrud } from "@stackframe/stack-shared/dist/interface/crud/tenancy"; +import { yupObject } from "@stackframe/stack-shared/dist/schema-fields"; +import { createLazyProxy } from "@stackframe/stack-shared/dist/utils/proxies"; + +export const tenancyCrudHandlers = createLazyProxy(() => createCrudHandlers(tenancyCrud, { + paramsSchema: yupObject({}), + onRead: async ({ auth }) => { + return { + id: auth.tenancy.id, + project_id: auth.project.id, + branch_id: auth.tenancy.branchId, + organization_id: auth.tenancy.organization?.id, + config: auth.tenancy.completeConfig, + }; + }, + onUpdate: async ({ auth, data }) => { + return { + id: auth.tenancy.id, + project_id: auth.project.id, + branch_id: auth.tenancy.branchId, + organization_id: auth.tenancy.organization?.id, + config: auth.tenancy.completeConfig, + }; + }, +})); diff --git a/packages/stack-shared/src/interface/crud/tenancy.ts b/packages/stack-shared/src/interface/crud/tenancy.ts new file mode 100644 index 000000000..5ff579474 --- /dev/null +++ b/packages/stack-shared/src/interface/crud/tenancy.ts @@ -0,0 +1,33 @@ +import { CrudTypeOf, createCrud } from "../../crud"; +import * as schemaFields from "../../schema-fields"; +import { yupObject } from "../../schema-fields"; + +export const tenancyCrudAdminReadSchema = yupObject({ + project_id: schemaFields.yupString().defined(), + branch_id: schemaFields.yupString().defined(), + organization_id: schemaFields.yupString().optional(), + id: schemaFields.yupString().defined(), + config: schemaFields.yupMixed().defined(), +}).defined(); + +export const tenancyCrudAdminUpdateSchema = yupObject({ + config: schemaFields.yupMixed().optional(), +}).defined(); + +export const tenancyCrud = createCrud({ + adminReadSchema: tenancyCrudAdminReadSchema, + adminUpdateSchema: tenancyCrudAdminUpdateSchema, + docs: { + adminRead: { + summary: 'Get the current tenancy', + description: 'Get the current tenancy information and configuration', + tags: ['Tenancies'], + }, + adminUpdate: { + summary: 'Update the current tenancy', + description: 'Update the current tenancy information and configuration', + tags: ['Tenancies'], + }, + }, +}); +export type TenancyCrud = CrudTypeOf;