import { request } from '@/utils/request'; const SETUP_COMPLETION_TIMEOUT_MS = 120_000; export interface SetupStatus { required: boolean; locked: boolean; ready: boolean; supportedDatabaseTypes: string[]; message: string; } export interface SetupDatabaseRequest { setupCode: string; databaseType: 'MYSQL' | 'POSTGRESQL'; host: string; port: number; database: string; username: string; password: string; } export interface SetupConnection { successful: boolean; databaseType: string; serverVersion: string; schemaReady: boolean; message: string; } export interface SetupCompleteRequest extends SetupDatabaseRequest { adminUsername: string; adminDisplayName: string; adminPassword: string; adminPasswordConfirmation: string; } export interface SetupCompleted { completed: boolean; username: string; message: string; restartAfterSeconds: number; } function normalizeStatus(value: SetupStatus): SetupStatus { return { required: Boolean(value?.required), locked: Boolean(value?.locked), ready: Boolean(value?.ready), supportedDatabaseTypes: Array.isArray(value?.supportedDatabaseTypes) ? value.supportedDatabaseTypes : [], message: value?.message || '', }; } export function getSetupStatus() { return request.get({ url: '/setup/status' }).then(normalizeStatus); } export function testSetupConnection(data: SetupDatabaseRequest) { return request.post({ url: '/setup/test-connection', data }).then((value) => value); } export function completeSetup(data: SetupCompleteRequest) { return request .post({ url: '/setup/complete', data, timeout: SETUP_COMPLETION_TIMEOUT_MS }) .then((value) => value); }