import '../models/porter_queue_model.dart'; import '../repositories/porter_queue_repository.dart'; class PorterQueueUsecase { final PorterQueueRepository _repository; PorterQueueUsecase(this._repository); Future createPorterQueue(String userId, String locationPorter) { return _repository.createPorterQueue(userId, locationPorter); } Future getPorterByUserId(String userId) { return _repository.getPorterByUserId(userId); } Future deletePorterQueue(String porterId) { return _repository.deletePorterQueue(porterId); } // Sisi Porter Future getNextAvailablePorter() { return _repository.getNextAvailablePorter(); } Future assignPorterToUser(String porterId, String userId, String transactionId) { return _repository.assignPorterToUser(porterId, userId, transactionId); } Future> requestPorter({ required String passengerId, required String ticketId, required String transactionId, required String locationPassenger, }) async { final porter = await _repository.getNextAvailablePorter(); if (porter == null) throw Exception('Porter tidak tersedia'); final porterId = porter.id!; final txId = DateTime.now().millisecondsSinceEpoch.toString(); final locPorter = porter.locationPorter!; final ok = await _repository.assignPorterToUser(porterId, passengerId, txId); if (!ok) throw Exception('Gagal menugaskan porter'); await _repository.createPorterTransaction( porterTransactionId: txId, porterId: porterId, passengerId: passengerId, transactionId: transactionId, ticketId: ticketId, locationPassenger: locationPassenger, locationPorter: locPorter, ); return { 'porterId': porterId, 'transactionId': txId, }; } Future completePorterAssignment(String porterId) { return _repository.completePorterAssignment(porterId); } Future getPorterById(String porterId) { return _repository.getPorterById(porterId); } Future checkConditionForPorter(String porterId) { return _repository.checkConditionForPorter(porterId); } Stream watchPorterByUserId(String userId) { return _repository.watchPorterByUserId(userId); } }