feat: migrate prosappco from Firebase to NestJS REST API (Fase 2)

- Replace all Firebase* repositories with Api* repositories using HTTP + SharedPreferences JWT
- Remove Firebase.initializeApp() and firebase_messaging background handler from main.dart
- Update DI (app_di.dart) to inject Api* repositories instead of Firebase* ones
- Replace all Timestamp/cloud_firestore usage with ISO 8601 String dates
- Stub PhoneVerificationService (Firebase phone OTP → backend OTP when implemented)
- Add ApiService singleton with JWT management in lib/services/
- Legacy firebase_*_repository.dart files preserved for Fase 4 cleanup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-17 16:53:11 -05:00
co-authored by Claude Sonnet 4.6
parent 726cf12fd2
commit 733384091c
65 changed files with 1404 additions and 389 deletions
+15 -20
View File
@@ -1,5 +1,4 @@
import 'package:chat_repository/chat_repository.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:injector/injector.dart';
import 'package:profession_repository/profession_repository.dart';
import 'package:professional_repository/professional_repository.dart';
@@ -29,20 +28,20 @@ class AppDI {
final injector = Injector.appInstance;
injector.registerSingleton<UserRepository>(
(() => FirebaseUserRepository(FirebaseAuth.instance)));
(() => ApiUserRepository()));
injector.registerSingleton<CityRepository>(() => FirebaseCityRepository());
injector.registerSingleton<CityRepository>(() => ApiCityRepository());
injector.registerSingleton<ProfessionRepository>(
() => FirebaseProfessionRepository());
() => ApiProfessionRepository());
injector.registerSingleton<SettingRepository>(
() => FirebaseSettingRepository());
() => ApiSettingRepository());
injector.registerSingleton(() => FirebaseProfessionalRepository());
injector.registerSingleton(() => FirebaseServiceRepository());
injector.registerSingleton(() => FirebaseChatRepository());
injector.registerSingleton(() => FirebaseScoreRepository());
injector.registerSingleton(() => ApiProfessionalRepository());
injector.registerSingleton(() => ApiServiceRepository());
injector.registerSingleton(() => ApiChatRepository());
injector.registerSingleton(() => ApiScoreRepository());
injector.registerSingleton<AuthenticationBloc>((() =>
AuthenticationBloc(myUserRepository: injector.get<UserRepository>())));
@@ -60,7 +59,8 @@ class AppDI {
);
injector.registerSingleton(
() => NotificationBloc(
requestLocalNotificationPermission: LocalNotifications.requestPermissionLocalNotifications,
requestLocalNotificationPermission:
LocalNotifications.requestPermissionLocalNotifications,
showLocalNotification: LocalNotifications.showLocalNotification,
),
);
@@ -84,31 +84,26 @@ class AppDI {
() => ProfessionalListBloc(
userRepository: injector.get<UserRepository>(),
firebaseProfessonalRepository:
injector.get<FirebaseProfessionalRepository>()),
injector.get<ApiProfessionalRepository>()),
);
injector.registerDependency<ChatBloc>(() => ChatBloc(
chatRepository: injector.get<FirebaseChatRepository>(),
chatRepository: injector.get<ApiChatRepository>(),
));
injector.registerDependency<ServiceBloc>(
() => ServiceBloc(
serviceRepository: injector.get<FirebaseServiceRepository>(),
serviceRepository: injector.get<ApiServiceRepository>(),
userRepository: injector.get<UserRepository>(),
professionRepository: injector.get<FirebaseProfessionalRepository>(),
professionRepository: injector.get<ApiProfessionalRepository>(),
),
);
injector.registerDependency<ScoreBloc>(
() => ScoreBloc(
scoreRepository: injector.get<FirebaseScoreRepository>(),
scoreRepository: injector.get<ApiScoreRepository>(),
userRepository: injector.get<UserRepository>(),
),
);
// injector.registerSingleton((() => ScoreBloc(
// firebaseScoreRepository: injector.get(),
// userRepository: injector.get<UserRepository>(),
// )));
}
}