feedback response model changes

This commit is contained in:
amirrezaghabeli
2025-09-25 09:01:10 +03:30
parent 9a0a74af97
commit eee1d9cdd8
4 changed files with 77 additions and 38 deletions
+17 -13
View File
@@ -1,8 +1,7 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:tm_app/core/utils/device_utils.dart';
import 'package:tm_app/core/utils/logger.dart';
import 'package:tm_app/data/repositories/tenders_repository.dart';
import 'package:tm_app/data/services/model/feedback_data/feedback_data.dart';
import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart';
@@ -134,7 +133,7 @@ class TendersViewModel with ChangeNotifier {
/// Get feedback for a specific tender
FeedbackData? getFeedbackForTender(String tenderId) {
try {
return feedbacks.firstWhere((f) => f.tender == tenderId);
return feedbacks.firstWhere((f) => f.tenderId == tenderId);
} catch (e) {
return null;
}
@@ -142,7 +141,7 @@ class TendersViewModel with ChangeNotifier {
/// Check if feedback exists for a specific tender
bool hasFeedbackForTender(String tenderId) {
return feedbacks.any((f) => f.tender == tenderId);
return feedbacks.any((f) => f.tenderId == tenderId);
}
Future<void> getTenders({
@@ -319,16 +318,20 @@ class TendersViewModel with ChangeNotifier {
// Add or update _feedbackData in feedbacks list by tender id
if (_feedbackData != null) {
final index = feedbacks.indexWhere(
(f) => f.tender == _feedbackData!.tender,
(f) => f.tenderId == _feedbackData!.tenderId,
);
if (index != -1) {
feedbacks[index] = _feedbackData!;
log('Updated feedback for tender: ${_feedbackData!.tender}');
AppLogger().info(
'Updated feedback for tender: ${_feedbackData!.tenderId}',
);
} else {
feedbacks.add(_feedbackData!);
log('Added new feedback for tender: ${_feedbackData!.tender}');
AppLogger().info(
'Added new feedback for tender: ${_feedbackData!.tenderId}',
);
}
log('Total feedbacks: ${feedbacks.length}');
AppLogger().info('Total feedbacks: ${feedbacks.length}');
}
break;
case Error<FeedbackResponse>():
@@ -350,7 +353,7 @@ class TendersViewModel with ChangeNotifier {
// Get current feedback for this tender
final existingFeedback = getFeedbackForTender(tenderId);
final existingFeedbackIndex = feedbacks.indexWhere(
(f) => f.tender == tenderId,
(f) => f.tenderId == tenderId,
);
// Create optimistic feedback data
@@ -364,7 +367,8 @@ class TendersViewModel with ChangeNotifier {
customerId: null, // Will be filled by server
feedbackType: feedbackType,
id: null, // Will be filled by server
tender: tenderId,
tenderId: tenderId,
tender: null,
updatedAt: DateTime.now().millisecondsSinceEpoch,
);
feedbacks.add(optimisticFeedback);
@@ -412,18 +416,18 @@ class TendersViewModel with ChangeNotifier {
}
} else {
// Server returned null data - remove feedback
feedbacks.removeWhere((f) => f.tender == tenderId);
feedbacks.removeWhere((f) => f.tenderId == tenderId);
}
break;
case Error<FeedbackResponse>():
// Revert optimistic update on error
if (existingFeedback == null) {
// Remove the optimistic feedback we added
feedbacks.removeWhere((f) => f.tender == tenderId);
feedbacks.removeWhere((f) => f.tenderId == tenderId);
} else {
// Restore the original feedback - find current index and update, or add if not found
final currentIndex = feedbacks.indexWhere(
(f) => f.tender == tenderId,
(f) => f.tenderId == tenderId,
);
if (currentIndex != -1) {
feedbacks[currentIndex] = existingFeedback;