th-tenant-provisioning.ts 1.88 KB
import { requestClient } from '#/api/request';

export interface ThProvisionTenantInput {
  name: string;
  tenantConnectionString?: string;
  dbType?: number;
  initializeDatabase?: boolean;
}

export interface ThProvisionTenantOutputDto {
  tenantId: string;
  name: string;
  databaseName: string;
  tenantConnectionString: string;
  databaseInitialized: boolean;
}

export interface ThInitializeTenantDatabaseInput {
  tenantId: string;
}

function normalizeProvisionTenantOutput(
  raw: unknown,
): ThProvisionTenantOutputDto {
  const o =
    raw && typeof raw === 'object' ? (raw as Record<string, unknown>) : {};
  return {
    tenantId: String(o.tenantId ?? o.TenantId ?? ''),
    name: String(o.name ?? o.Name ?? ''),
    databaseName: String(o.databaseName ?? o.DatabaseName ?? ''),
    tenantConnectionString: String(
      o.tenantConnectionString ?? o.TenantConnectionString ?? '',
    ),
    databaseInitialized:
      o.databaseInitialized === true || o.DatabaseInitialized === true,
  };
}

export async function thProvisionTenant(
  input: ThProvisionTenantInput,
): Promise<ThProvisionTenantOutputDto> {
  const raw = await requestClient.post<unknown>(
    'th-tenant-provisioning/provision',
    {
      dbType: input.dbType ?? 0,
      initializeDatabase: input.initializeDatabase ?? true,
      name: input.name.trim(),
      tenantConnectionString:
        input.tenantConnectionString?.trim() || undefined,
    },
    {
      successMessageMode: 'message',
    },
  );
  return normalizeProvisionTenantOutput(raw);
}

/** POST /api/app/th-tenant-provisioning/initialize-tenant-database */
export async function thInitializeTenantDatabase(
  input: ThInitializeTenantDatabaseInput,
) {
  return requestClient.post<void>(
    'th-tenant-provisioning/initialize-tenant-database',
    null,
    {
      params: {
        tenantId: input.tenantId,
      },
      successMessageMode: 'message',
    },
  );
}