orderBy('min_purchase_amount') ->get(); return ApiResponse::OK->response([ 'tiers' => $tiers ]); } /** * Store a newly created tier */ public function store(ClientTierStoreRequest $request) { $tier = ClientTier::create($request->validated()); return ApiResponse::OK->response([ 'tier' => $tier, 'message' => 'Tier creado correctamente.' ]); } /** * Display the specified tier */ public function show(ClientTier $tier) { $tier->loadCount('clients'); return ApiResponse::OK->response([ 'tier' => $tier ]); } /** * Update the specified tier */ public function update(ClientTierUpdateRequest $request, ClientTier $tier) { $tier->update($request->validated()); return ApiResponse::OK->response([ 'tier' => $tier, 'message' => 'Tier actualizado correctamente.' ]); } /** * Remove the specified tier (soft delete if has clients, else force delete) */ public function destroy(ClientTier $tier) { // Verificar si el tier tiene clientes asignados if ($tier->clients()->count() > 0) { return ApiResponse::BAD_REQUEST->response([ 'message' => 'No se puede eliminar el tier porque tiene clientes asignados.' ]); } $tier->delete(); return ApiResponse::OK->response([ 'message' => 'Tier eliminado correctamente.' ]); } /** * Toggle tier active status */ public function toggleActive(ClientTier $tier) { $tier->update(['is_active' => !$tier->is_active]); return ApiResponse::OK->response([ 'tier' => $tier, 'message' => 'Estado del tier actualizado correctamente.' ]); } /** * Get active tiers only */ public function active() { $tiers = ClientTier::active() ->orderBy('min_purchase_amount') ->get(); return ApiResponse::OK->response([ 'tiers' => $tiers ]); } }