feat: Implement audio file upload for rapid order transcription and refine the rapid order verification page titles.

This commit is contained in:
Achintha Isuru
2026-02-27 21:02:34 -05:00
parent a53dddf2e6
commit 95175536a0
4 changed files with 22 additions and 5 deletions

View File

@@ -35,6 +35,7 @@ class ClientCreateOrderModule extends Module {
() => ClientCreateOrderRepositoryImpl( () => ClientCreateOrderRepositoryImpl(
service: i.get<dc.DataConnectService>(), service: i.get<dc.DataConnectService>(),
rapidOrderService: i.get<RapidOrderService>(), rapidOrderService: i.get<RapidOrderService>(),
fileUploadService: i.get<FileUploadService>(),
), ),
); );

View File

@@ -17,11 +17,14 @@ class ClientCreateOrderRepositoryImpl
ClientCreateOrderRepositoryImpl({ ClientCreateOrderRepositoryImpl({
required dc.DataConnectService service, required dc.DataConnectService service,
required RapidOrderService rapidOrderService, required RapidOrderService rapidOrderService,
required FileUploadService fileUploadService,
}) : _service = service, }) : _service = service,
_rapidOrderService = rapidOrderService; _rapidOrderService = rapidOrderService,
_fileUploadService = fileUploadService;
final dc.DataConnectService _service; final dc.DataConnectService _service;
final RapidOrderService _rapidOrderService; final RapidOrderService _rapidOrderService;
final FileUploadService _fileUploadService;
@override @override
Future<void> createOneTimeOrder(domain.OneTimeOrder order) async { Future<void> createOneTimeOrder(domain.OneTimeOrder order) async {
@@ -412,8 +415,18 @@ class ClientCreateOrderRepositoryImpl
@override @override
Future<String> transcribeRapidOrder(String audioPath) async { Future<String> transcribeRapidOrder(String audioPath) async {
// 1. Upload the audio file first
final String fileName = audioPath.split('/').last;
final FileUploadResponse uploadResponse = await _fileUploadService
.uploadFile(
filePath: audioPath,
fileName: fileName,
category: 'rapid-order-audio',
);
// 2. Transcribe using the remote URI
final RapidOrderTranscriptionResponse response = await _rapidOrderService final RapidOrderTranscriptionResponse response = await _rapidOrderService
.transcribeAudio(audioFileUri: audioPath); .transcribeAudio(audioFileUri: uploadResponse.fileUri);
return response.transcript; return response.transcript;
} }

View File

@@ -53,7 +53,8 @@ class OneTimeOrderPage extends StatelessWidget {
: null, : null,
hubManagers: state.managers.map(_mapManager).toList(), hubManagers: state.managers.map(_mapManager).toList(),
isValid: state.isValid, isValid: state.isValid,
title: state.isRapidDraft ? 'Rapid Order : Verify the order' : null, title: state.isRapidDraft ? 'Rapid Order' : null,
subtitle: state.isRapidDraft ? 'Verify the order details' : null,
onEventNameChanged: (String val) => onEventNameChanged: (String val) =>
bloc.add(OneTimeOrderEventNameChanged(val)), bloc.add(OneTimeOrderEventNameChanged(val)),
onVendorChanged: (Vendor val) => onVendorChanged: (Vendor val) =>

View File

@@ -39,6 +39,7 @@ class OneTimeOrderView extends StatelessWidget {
required this.onDone, required this.onDone,
required this.onBack, required this.onBack,
this.title, this.title,
this.subtitle,
super.key, super.key,
}); });
@@ -56,6 +57,7 @@ class OneTimeOrderView extends StatelessWidget {
final OrderManagerUiModel? selectedHubManager; final OrderManagerUiModel? selectedHubManager;
final bool isValid; final bool isValid;
final String? title; final String? title;
final String? subtitle;
final ValueChanged<String> onEventNameChanged; final ValueChanged<String> onEventNameChanged;
final ValueChanged<Vendor> onVendorChanged; final ValueChanged<Vendor> onVendorChanged;
@@ -102,7 +104,7 @@ class OneTimeOrderView extends StatelessWidget {
children: <Widget>[ children: <Widget>[
OneTimeOrderHeader( OneTimeOrderHeader(
title: title ?? labels.title, title: title ?? labels.title,
subtitle: labels.subtitle, subtitle: subtitle ?? labels.subtitle,
onBack: onBack, onBack: onBack,
), ),
Expanded( Expanded(
@@ -140,7 +142,7 @@ class OneTimeOrderView extends StatelessWidget {
children: <Widget>[ children: <Widget>[
OneTimeOrderHeader( OneTimeOrderHeader(
title: title ?? labels.title, title: title ?? labels.title,
subtitle: labels.subtitle, subtitle: subtitle ?? labels.subtitle,
onBack: onBack, onBack: onBack,
), ),
Expanded( Expanded(