Rework PromptService

- Use dependency injection and Get.find instead of manual singleton pattern
- Move from domain to data layer
- Prevents multiple API calls if the previous request hasn't finished
This commit is contained in:
Théo Poizat
2026-02-26 11:47:00 +01:00
committed by Dat H. Pham
parent 6d8d10cf26
commit 1982f199ac
8 changed files with 182 additions and 155 deletions
@@ -1,5 +1,5 @@
import 'package:core/utils/app_logger.dart';
import 'package:scribe/scribe/ai/domain/service/prompt_service.dart';
import 'package:scribe/scribe/ai/data/service/prompt_service.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_scribe_prompt_url_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_scribe_prompt_url_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
@@ -22,11 +22,23 @@ extension SetupScribePromptUrlExtension on MailboxDashBoardController {
}
void handleGetScribePromptUrlSuccess(GetScribePromptUrlSuccess success) {
PromptService().setPromptUrl(success.promptUrl);
final promptService = getBinding<PromptService>();
if (promptService != null) {
promptService.setPromptUrl(success.promptUrl);
} else {
logWarning('SetupScribePromptUrlExtension::handleGetScribePromptUrlFailure: PromptService not found');
}
}
void handleGetScribePromptUrlFailure(GetScribePromptUrlFailure failure) {
logError('SetupScribePromptUrlExtension::handleGetScribePromptUrlFailure: GetScribePromptUrl failed - ${failure.exception}');
PromptService().setPromptUrl(null);
final promptService = getBinding<PromptService>();
if (promptService != null) {
promptService.setPromptUrl(null);
} else {
logWarning('SetupScribePromptUrlExtension::handleGetScribePromptUrlFailure: PromptService not found');
}
}
}
@@ -8,6 +8,7 @@ import 'package:dio/dio.dart';
import 'package:flutter_appauth/flutter_appauth.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/http/http_client.dart';
import 'package:scribe/scribe/ai/data/service/prompt_service.dart';
import 'package:tmail_ui_user/features/contact/data/network/contact_api.dart';
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
import 'package:tmail_ui_user/features/email/data/network/mdn_api.dart';
@@ -146,5 +147,6 @@ class NetworkBindings extends Bindings {
void _bindingServices() {
Get.put(DnsLookupManager());
Get.put(PromptService(Get.find<DioClient>()));
}
}