Files
prosappco/lib/blocs/chat_bloc/chat_bloc.dart
T
Lizandro GuarnizoandClaude Sonnet 4.6 733384091c 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>
2026-06-17 16:53:11 -05:00

64 lines
1.5 KiB
Dart

import 'dart:developer';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:chat_repository/chat_repository.dart';
part 'chat_event.dart';
part 'chat_state.dart';
class ChatBloc extends Bloc<ChatEvent, ChatState> {
final ApiChatRepository _chatRepository;
ChatBloc({
required ApiChatRepository chatRepository,
}) : _chatRepository = chatRepository,
super(ChatInitial()) {
on<LoadChatEvent>(_onLoadChatEvent);
on<SendMessageEvent>(_onSendMessageEvent);
}
void _onLoadChatEvent(LoadChatEvent event, Emitter<ChatState> emit) async {
bool autoCreate = true;
try {
emit(ChatLoading());
Stream<ChatEntity?> chatStream = _chatRepository.getChatById(
event.serviceId,
);
await for (var chat in chatStream) {
if (chat == null) {
if (autoCreate) {
chat = await _chatRepository.createNewChat(
event.serviceId,
event.userId,
event.professionalId,
);
autoCreate = false;
} else {
emit(ChatFailure());
}
} else {
emit(ChatLoaded(chat: chat));
}
}
} catch (e) {
log(e.toString());
emit(ChatFailure());
}
}
void _onSendMessageEvent(
SendMessageEvent event, Emitter<ChatState> emit) async {
try {
await _chatRepository.sendMessage(event.serviceId, event.message);
} catch (e) {
log(e.toString());
emit(ChatFailure());
}
}
}