import { z } from 'zod' import { type ContractJsonResponse, type ContractQuery, type ContractQueryInput, defineRouteContract, } from '@/lib/api/contracts/types' import { adminV1PaginationMetaSchema, adminV1QueryStringSchema, adminV1SingleResponseSchema, } from '@/lib/api/contracts/v1/admin/shared' export const adminV1PermissionGroupSchema = z.object({ id: z.string(), organizationId: z.string(), organizationName: z.string().nullable(), name: z.string(), description: z.string().nullable(), isDefault: z.boolean(), memberCount: z.number(), createdAt: z.string(), createdByUserId: z.string(), createdByEmail: z.string().nullable(), }) export const adminV1AccessControlQuerySchema = z.object({ organizationId: adminV1QueryStringSchema, }) export const adminV1AccessControlDeleteQuerySchema = adminV1AccessControlQuerySchema .extend({ reason: adminV1QueryStringSchema.default('Enterprise plan churn cleanup'), }) .refine((query) => Boolean(query.organizationId), { error: 'organizationId is required', }) const adminV1AccessControlListResultSchema = z.object({ data: z.array(adminV1PermissionGroupSchema), pagination: adminV1PaginationMetaSchema, }) const adminV1AccessControlDeleteResultSchema = z.object({ success: z.literal(true), deletedCount: z.number(), membersRemoved: z.number(), reason: z.string().optional(), message: z.string().optional(), }) export const adminV1ListAccessControlContract = defineRouteContract({ method: 'GET', path: '/api/v1/admin/access-control', query: adminV1AccessControlQuerySchema, response: { mode: 'json', schema: adminV1SingleResponseSchema(adminV1AccessControlListResultSchema), }, }) export const adminV1DeleteAccessControlContract = defineRouteContract({ method: 'DELETE', path: '/api/v1/admin/access-control', query: adminV1AccessControlDeleteQuerySchema, response: { mode: 'json', schema: adminV1SingleResponseSchema(adminV1AccessControlDeleteResultSchema), }, }) export type AdminV1PermissionGroup = z.output export type AdminV1ListAccessControlQueryInput = ContractQueryInput< typeof adminV1ListAccessControlContract > export type AdminV1ListAccessControlQuery = ContractQuery export type AdminV1DeleteAccessControlQueryInput = ContractQueryInput< typeof adminV1DeleteAccessControlContract > export type AdminV1DeleteAccessControlQuery = ContractQuery< typeof adminV1DeleteAccessControlContract > export type AdminV1ListAccessControlResponse = ContractJsonResponse< typeof adminV1ListAccessControlContract > export type AdminV1DeleteAccessControlResponse = ContractJsonResponse< typeof adminV1DeleteAccessControlContract >