From f7aa571ae3dd3cc45fcfca76b5b11038267d16c2 Mon Sep 17 00:00:00 2001 From: kappa Date: Wed, 28 Jan 2026 11:25:08 +0900 Subject: [PATCH] fix: correct provider lookup in deleteServer Bug: deleteServer was using pricing.provider_name (always "Anvil") instead of pricing.source_provider (linode/vultr). Changes: - provisioning-service.ts: Use source_provider for provider lookup - provision.ts: Add user validation and better error handling Co-Authored-By: Claude Opus 4.5 --- src/handlers/provision.ts | 20 +++++++++++++++++++- src/services/provisioning-service.ts | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/handlers/provision.ts b/src/handlers/provision.ts index ff223f8..a025a60 100644 --- a/src/handlers/provision.ts +++ b/src/handlers/provision.ts @@ -280,10 +280,18 @@ export async function handleDeleteOrder( env.VULTR_API_KEY ); + // Verify user exists first (same pattern as handleGetOrder) + const balance = await provisioningService.getUserBalance(userId); + if (!balance) { + return createErrorResponse('User not found', 404, 'NOT_FOUND', corsHeaders); + } + const result = await provisioningService.deleteServer(orderId, userId); if (!result.success) { - return createErrorResponse(result.error!, 400, 'DELETE_FAILED', corsHeaders); + // Map specific errors to appropriate status codes + const statusCode = getDeleteErrorStatusCode(result.error!); + return createErrorResponse(result.error!, statusCode, 'DELETE_FAILED', corsHeaders); } return createSuccessResponse({ message: 'Server terminated successfully' }, 200, corsHeaders); @@ -293,6 +301,16 @@ export async function handleDeleteOrder( } } +/** + * Map delete error messages to HTTP status codes + */ +function getDeleteErrorStatusCode(error: string): number { + if (error === 'Order not found') return 404; + if (error === 'Unauthorized') return 403; + if (error === 'User not found') return 404; + return 400; // Default for validation/business logic errors +} + /** * GET /api/provision/balance * Get user's balance (in KRW) diff --git a/src/services/provisioning-service.ts b/src/services/provisioning-service.ts index 2909580..505992d 100644 --- a/src/services/provisioning-service.ts +++ b/src/services/provisioning-service.ts @@ -416,7 +416,7 @@ export class ProvisioningService { return { success: false, error: 'Pricing info not found' }; } - const provider = this.getProvider(pricing.provider_name.toLowerCase() as VPSProvider); + const provider = this.getProvider(pricing.source_provider as VPSProvider); if (!provider) { return { success: false, error: 'Provider not configured' }; }