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 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-28 11:25:08 +09:00
parent 1c65c02045
commit f7aa571ae3
2 changed files with 20 additions and 2 deletions

View File

@@ -280,10 +280,18 @@ export async function handleDeleteOrder(
env.VULTR_API_KEY 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); const result = await provisioningService.deleteServer(orderId, userId);
if (!result.success) { 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); 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 /api/provision/balance
* Get user's balance (in KRW) * Get user's balance (in KRW)

View File

@@ -416,7 +416,7 @@ export class ProvisioningService {
return { success: false, error: 'Pricing info not found' }; 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) { if (!provider) {
return { success: false, error: 'Provider not configured' }; return { success: false, error: 'Provider not configured' };
} }