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
+1 -1
View File
@@ -22,7 +22,7 @@ class UserCalendarScreen extends StatefulWidget {
class UserCalendarScreenState extends State<UserCalendarScreen> {
final settingRepository = Injector.appInstance.get<SettingRepository>();
final serviceRepository =
Injector.appInstance.get<FirebaseServiceRepository>();
Injector.appInstance.get<ApiServiceRepository>();
SettingEntity? settings;
DateTime today = DateTime.now();
+4 -5
View File
@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:developer';
import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -549,7 +548,7 @@ class _UserMapScreenState extends State<UserMapScreen> {
longitude: profesionalSeleccionado!
.professionalInfo.longitude,
day: fechaSeleccionada.toString(),
createdAt: Timestamp.now(),
createdAt: DateTime.now().toIso8601String(),
description: _observationController.text,
range1Hour1: horaSeleccionada!,
range1Hour2:
@@ -574,7 +573,7 @@ class _UserMapScreenState extends State<UserMapScreen> {
longitude: profesionalSeleccionado!
.professionalInfo.longitude,
day: fechaSeleccionada.toString(),
createdAt: Timestamp.now(),
createdAt: DateTime.now().toIso8601String(),
description: _observationController.text,
range1Hour1: horaSeleccionada!,
range1Hour2:
@@ -597,7 +596,7 @@ class _UserMapScreenState extends State<UserMapScreen> {
latitude: 0,
longitude: 0,
day: fechaSeleccionada.toString(),
createdAt: Timestamp.now(),
createdAt: DateTime.now().toIso8601String(),
description: _observationController.text,
range1Hour1: horaSeleccionada!,
range1Hour2:
@@ -617,7 +616,7 @@ class _UserMapScreenState extends State<UserMapScreen> {
latitude: 0,
longitude: 0,
day: fechaSeleccionada.toString(),
createdAt: Timestamp.now(),
createdAt: DateTime.now().toIso8601String(),
description: _observationController.text,
range1Hour1: horaSeleccionada!,
range1Hour2:
+2 -3
View File
@@ -1,5 +1,4 @@
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -618,10 +617,10 @@ class _UserServiceScreenState extends State<UserServiceScreen> {
Future<List<dynamic>> _getUserAndProfessionalInfo(
ServiceEntity service) async {
final userRepo = FirebaseUserRepository(FirebaseAuth.instance);
final userRepo = Injector.appInstance.get<UserRepository>();
final userInfo = await userRepo.getMyUser(service.professionalId);
final professionalRepo = FirebaseProfessionalRepository();
final professionalRepo = Injector.appInstance.get<ApiProfessionalRepository>();
final professionalInfo =
await professionalRepo.getProInfo(service.professionalId);