Added core data models, repositories, and utilities

This commit is contained in:
Tomas Dvorak
2026-01-03 18:37:48 +01:00
parent 1639de69d4
commit 572fbb971c
17 changed files with 1248 additions and 0 deletions
@@ -0,0 +1,47 @@
import 'package:supabase_flutter/supabase_flutter.dart';
import 'failure.dart';
class ErrorMapper {
static Failure mapError(dynamic error) {
if (error is AuthException) {
switch (error.message) {
case 'Invalid login credentials':
return const AuthFailure('Invalid email or password');
case 'Email not confirmed':
return const AuthFailure('Please confirm your email address');
case 'User already registered':
return const AuthFailure('An account with this email already exists');
case 'Password should be at least 6 characters':
return const AuthFailure('Password must be at least 6 characters');
default:
return AuthFailure(error.message);
}
}
if (error is PostgrestException) {
switch (error.code) {
case '23505':
return const ValidationFailure('This record already exists');
case '23503':
return const ValidationFailure('Referenced record does not exist');
case '42501':
return const PermissionFailure('You do not have permission to perform this action');
default:
return ServerFailure(
error.message,
statusCode: int.tryParse(error.code ?? ''),
);
}
}
if (error is Exception) {
return NetworkFailure(error.toString().replaceAll('Exception: ', ''));
}
return UnknownFailure(error.toString());
}
static String getUserMessage(Failure failure) {
return failure.message;
}
}
+37
View File
@@ -0,0 +1,37 @@
abstract class Failure {
final String message;
final int? statusCode;
const Failure(this.message, {this.statusCode});
@override
String toString() => 'Failure: $message';
}
class ServerFailure extends Failure {
const ServerFailure(super.message, {super.statusCode});
}
class NetworkFailure extends Failure {
const NetworkFailure(super.message);
}
class AuthFailure extends Failure {
const AuthFailure(super.message);
}
class ValidationFailure extends Failure {
const ValidationFailure(super.message);
}
class NotFoundFailure extends Failure {
const NotFoundFailure(super.message);
}
class PermissionFailure extends Failure {
const PermissionFailure(super.message);
}
class UnknownFailure extends Failure {
const UnknownFailure(super.message);
}