diff --git a/lib/view_models/board_view_model.dart b/lib/view_models/board_view_model.dart index c568cf1..ad6bcb0 100644 --- a/lib/view_models/board_view_model.dart +++ b/lib/view_models/board_view_model.dart @@ -104,10 +104,24 @@ class BoardViewModel with ChangeNotifier { newOrder: newOrder, ); - if (result is Error) { - _board = _board!.copyWith(columns: previousColumns); - notifyListeners(); + switch (result) { + case Ok(): + // HTTP 200 alone isn't success: the API can return + // {"success": false, "message": ...} (e.g. column over-limit, + // permission denied). Only keep the optimistic move when the body + // confirms success; otherwise roll back and surface the message. + if (result.value.success == true) { + return result; + } + _board = _board!.copyWith(columns: previousColumns); + notifyListeners(); + return Result.error( + Exception(result.value.message ?? 'Failed to move card'), + ); + case Error(): + _board = _board!.copyWith(columns: previousColumns); + notifyListeners(); + return result; } - return result; } }