From 668fdf17057e4ed978438799fcc0ce5007d03a16 Mon Sep 17 00:00:00 2001 From: cschlaefke Date: Wed, 4 Nov 2026 10:39:01 +0100 Subject: [PATCH] fix(catalog): map 22003 and 22P02 to invalidInput Refs #3 Co-Authored-By: Claude Sonnet 5.5 --- app/lib/features/catalog/data/catalog_failure_mapper.dart | 6 +++++- app/test/features/catalog/domain/catalog_domain_test.dart | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/lib/features/catalog/data/catalog_failure_mapper.dart b/app/lib/features/catalog/data/catalog_failure_mapper.dart index e47769d..b9e88e1 100644 --- a/app/lib/features/catalog/data/catalog_failure_mapper.dart +++ b/app/lib/features/catalog/data/catalog_failure_mapper.dart @@ -5,6 +5,8 @@ import 'package:shuffle/core/platform/io_error.dart'; import 'package:shuffle/features/catalog/domain/catalog_failure.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; +const _invalidInputCodes = {'P0001', '22003', '22P02'}; + /// Translates exceptions of `supabase_flutter` into a [CatalogFailure] /// (Spec #3 ยง 5.2). CatalogFailure mapCatalogError(Object error) { @@ -13,7 +15,9 @@ CatalogFailure mapCatalogError(Object error) { isIoNetworkError(error)) { return const CatalogFailure.network(); } - if (error is PostgrestException && error.code == 'P0001') { + // P0001: RPC input checks; 22003: number out of range (smallint cast); + // 22P02: invalid text representation. None gets better by repeating. + if (error is PostgrestException && _invalidInputCodes.contains(error.code)) { return const CatalogFailure.invalidInput(); } return const CatalogFailure.unexpected(); diff --git a/app/test/features/catalog/domain/catalog_domain_test.dart b/app/test/features/catalog/domain/catalog_domain_test.dart index 5f76b79..3092fe1 100644 --- a/app/test/features/catalog/domain/catalog_domain_test.dart +++ b/app/test/features/catalog/domain/catalog_domain_test.dart @@ -182,6 +182,13 @@ void main() { ), isA(), ); + for (final code in ['22003', '22P02']) { + expect( + mapCatalogError(PostgrestException(message: 'x', code: code)), + isA(), + reason: code, + ); + } expect( mapCatalogError(const PostgrestException(message: 'x', code: '42501')), isA(),