151 lines
5.1 KiB
Dart
151 lines
5.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:dio/dio.dart';
|
|
import 'package:tm_app/core/utils/logger.dart';
|
|
import 'package:tm_app/core/utils/result.dart';
|
|
import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart';
|
|
import 'package:tm_app/data/services/model/tenders/tender_dislike_response/tender_dislike_response.dart';
|
|
import 'package:tm_app/data/services/model/tenders/tender_like_response/tender_like_response.dart';
|
|
import 'package:tm_app/data/services/model/tenders/tender_reject_response/tender_reject_response.dart';
|
|
import 'package:tm_app/data/services/model/tenders/tender_submit_response/tender_submit_response.dart';
|
|
import 'package:tm_app/data/services/model/tenders/tenders_response/tenders_response.dart';
|
|
|
|
import '../../core/network/network_manager.dart';
|
|
|
|
class TendersService {
|
|
TendersService({required NetworkManager networkManager})
|
|
: _networkManager = networkManager;
|
|
final NetworkManager _networkManager;
|
|
|
|
Future<Result<TendersResponse>> getTenders() async {
|
|
final result = await _networkManager.makeRequest(
|
|
'/api/v1/tenders',
|
|
method: 'GET',
|
|
(json) => TendersResponse.fromJson(json),
|
|
);
|
|
return result;
|
|
}
|
|
|
|
Future<Result<FeedbackResponse>> getTenderFeedback({
|
|
required String tenderId,
|
|
}) async {
|
|
final result = await _networkManager.makeRequest(
|
|
'/api/v1/feedback/tender/$tenderId',
|
|
method: 'GET',
|
|
(json) => FeedbackResponse.fromJson(json),
|
|
);
|
|
return result;
|
|
}
|
|
|
|
Future<Result<FeedbackResponse>> feedback({
|
|
required String tenderId,
|
|
required String feedbackType,
|
|
}) async {
|
|
final data = jsonEncode({
|
|
'feedback_type': feedbackType,
|
|
'tender_id': tenderId,
|
|
});
|
|
final result = await _networkManager.makeRequest(
|
|
'/api/v1/feedback',
|
|
method: 'POST',
|
|
(json) => FeedbackResponse.fromJson(json),
|
|
data: data,
|
|
);
|
|
return result;
|
|
}
|
|
|
|
Future<Result<TenderLikeResponse>> likeTender() async {
|
|
try {
|
|
// final result = await _networkManager.makeRequest(
|
|
// '/api/v1/tenders',
|
|
// (json) => TenderLikeResponse.fromJson(json),
|
|
// method: 'POST',
|
|
// );
|
|
// await Future.delayed(Duration(seconds: 2));
|
|
appLogger.info('like tender success');
|
|
// TODO: will change when api is ready
|
|
return Result.ok(
|
|
TenderLikeResponse.fromJson({'message': 'Tender liked successfully'}),
|
|
);
|
|
} on DioException catch (e) {
|
|
appLogger.error('like tender failed: $e');
|
|
return Result.error(e);
|
|
} on Exception catch (e, stackTrace) {
|
|
appLogger.error('like tender failed: $e', stackTrace: stackTrace);
|
|
return Result.error(Exception(e));
|
|
}
|
|
}
|
|
|
|
Future<Result<TenderDislikeResponse>> dislikeTender() async {
|
|
try {
|
|
// final result = await _networkManager.makeRequest(
|
|
// '/api/v1/tenders',
|
|
// (json) => TenderDislikeResponse.fromJson(json),
|
|
// method: 'POST',
|
|
// );
|
|
// await Future.delayed(Duration(seconds: 2));
|
|
appLogger.info('dislike tender success');
|
|
// TODO: will change when api is ready
|
|
return Result.ok(
|
|
TenderDislikeResponse.fromJson({
|
|
'message': 'Tender disliked successfully',
|
|
}),
|
|
);
|
|
} on DioException catch (e) {
|
|
appLogger.error('dislike tender failed: $e');
|
|
return Result.error(e);
|
|
} on Exception catch (e, stackTrace) {
|
|
appLogger.error('dislike tender failed: $e', stackTrace: stackTrace);
|
|
return Result.error(Exception(e));
|
|
}
|
|
}
|
|
|
|
Future<Result<TenderSubmitResponse>> submitTender() async {
|
|
try {
|
|
// final result = await _networkManager.makeRequest(
|
|
// '/api/v1/tenders',
|
|
// (json) => TenderSubmitResponse.fromJson(json),
|
|
// method: 'POST',
|
|
// );
|
|
// await Future.delayed(Duration(seconds: 2));
|
|
appLogger.info('submit tender success');
|
|
// TODO: will change when api is ready
|
|
return Result.ok(
|
|
TenderSubmitResponse.fromJson({
|
|
'message': 'Tender submitted successfully',
|
|
}),
|
|
);
|
|
} on DioException catch (e) {
|
|
appLogger.error('submit tender failed: $e');
|
|
return Result.error(e);
|
|
} on Exception catch (e, stackTrace) {
|
|
appLogger.error('submit tender failed: $e', stackTrace: stackTrace);
|
|
return Result.error(Exception(e));
|
|
}
|
|
}
|
|
|
|
Future<Result<TenderRejectResponse>> rejectTender() async {
|
|
try {
|
|
// final result = await _networkManager.makeRequest(
|
|
// '/api/v1/tenders',
|
|
// (json) => TenderRejectResponse.fromJson(json),
|
|
// method: 'POST',
|
|
// );
|
|
// await Future.delayed(Duration(seconds: 2));
|
|
appLogger.info('reject tender success');
|
|
// TODO: will change when api is ready
|
|
return Result.ok(
|
|
TenderRejectResponse.fromJson({
|
|
'message': 'Tender rejected successfully',
|
|
}),
|
|
);
|
|
} on DioException catch (e) {
|
|
appLogger.error('reject tender failed: $e');
|
|
return Result.error(e);
|
|
} on Exception catch (e, stackTrace) {
|
|
appLogger.error('reject tender failed: $e', stackTrace: stackTrace);
|
|
return Result.error(Exception(e));
|
|
}
|
|
}
|
|
}
|