fixed services
This commit is contained in:
@@ -32,7 +32,9 @@ class NetworkManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _addInterceptors() {
|
void _addInterceptors() {
|
||||||
if (_interceptorsAdded) return;
|
if (_interceptorsAdded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final requestInterceptor = InterceptorsWrapper(
|
final requestInterceptor = InterceptorsWrapper(
|
||||||
onRequest: (options, handler) {
|
onRequest: (options, handler) {
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ import 'package:intl/intl.dart';
|
|||||||
class DateUtils {
|
class DateUtils {
|
||||||
/// Converts Unix timestamp (seconds since epoch) to a formatted date string
|
/// Converts Unix timestamp (seconds since epoch) to a formatted date string
|
||||||
static String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
static String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
||||||
if (unixTimestamp == null) return '';
|
if (unixTimestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
// Convert seconds to milliseconds if needed
|
// Convert seconds to milliseconds if needed
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
@@ -17,7 +19,9 @@ class DateUtils {
|
|||||||
|
|
||||||
/// Converts Unix timestamp to a readable date string
|
/// Converts Unix timestamp to a readable date string
|
||||||
static String unixToReadableDate(int? unixTimestamp) {
|
static String unixToReadableDate(int? unixTimestamp) {
|
||||||
if (unixTimestamp == null) return '';
|
if (unixTimestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||||
@@ -41,7 +45,9 @@ class DateUtils {
|
|||||||
|
|
||||||
/// Converts Unix timestamp to a short date format
|
/// Converts Unix timestamp to a short date format
|
||||||
static String unixToShortDate(int? unixTimestamp) {
|
static String unixToShortDate(int? unixTimestamp) {
|
||||||
if (unixTimestamp == null) return '';
|
if (unixTimestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||||
@@ -54,7 +60,9 @@ class DateUtils {
|
|||||||
|
|
||||||
/// Converts Unix timestamp to a full date and time format
|
/// Converts Unix timestamp to a full date and time format
|
||||||
static String unixToDateTime(int? unixTimestamp) {
|
static String unixToDateTime(int? unixTimestamp) {
|
||||||
if (unixTimestamp == null) return '';
|
if (unixTimestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||||
@@ -67,7 +75,9 @@ class DateUtils {
|
|||||||
|
|
||||||
/// Checks if a Unix timestamp is in the past
|
/// Checks if a Unix timestamp is in the past
|
||||||
static bool isPast(int? unixTimestamp) {
|
static bool isPast(int? unixTimestamp) {
|
||||||
if (unixTimestamp == null) return false;
|
if (unixTimestamp == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||||
@@ -80,7 +90,9 @@ class DateUtils {
|
|||||||
|
|
||||||
/// Gets the number of days remaining until a Unix timestamp
|
/// Gets the number of days remaining until a Unix timestamp
|
||||||
static int daysRemaining(int? unixTimestamp) {
|
static int daysRemaining(int? unixTimestamp) {
|
||||||
if (unixTimestamp == null) return 0;
|
if (unixTimestamp == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
unixTimestamp > 1000000000000 ? unixTimestamp : unixTimestamp * 1000;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:tm_app/data/services/model/login_response/login_response_model.dart';
|
import 'package:tm_app/data/services/model/login_response/login_response_model.dart';
|
||||||
import 'package:tm_app/data/services/model/logout_response/logout_response.dart';
|
|
||||||
|
|
||||||
import '../../core/utils/result.dart';
|
import '../../core/utils/result.dart';
|
||||||
import '../services/auth_service.dart';
|
import '../services/auth_service.dart';
|
||||||
|
import '../services/model/logout_response/logout_response.dart';
|
||||||
|
|
||||||
class AuthRepository {
|
class AuthRepository {
|
||||||
final AuthService _authService;
|
final AuthService _authService;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import 'package:tm_app/core/utils/result.dart';
|
import 'package:tm_app/core/utils/result.dart';
|
||||||
import 'package:tm_app/data/services/home_service.dart';
|
import 'package:tm_app/data/services/home_service.dart';
|
||||||
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
|
|
||||||
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
|
|
||||||
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
||||||
@@ -13,12 +11,6 @@ class HomeRepository {
|
|||||||
: _homeService = homeService;
|
: _homeService = homeService;
|
||||||
final HomeService _homeService;
|
final HomeService _homeService;
|
||||||
|
|
||||||
Future<Result<HomeResponseModel>> getHome({
|
|
||||||
HomeRequestModel? homeRequestModel,
|
|
||||||
}) async {
|
|
||||||
return _homeService.getHome(homeRequestModel: homeRequestModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<Result<RecommendedTendersResponse>> getHomeRecommendedTenders({
|
Future<Result<RecommendedTendersResponse>> getHomeRecommendedTenders({
|
||||||
required int limit,
|
required int limit,
|
||||||
required int offset,
|
required int offset,
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class TendersRepository {
|
|||||||
required String tenderId,
|
required String tenderId,
|
||||||
required String feedbackType,
|
required String feedbackType,
|
||||||
}) async {
|
}) async {
|
||||||
return _tendersService.feedback(
|
return _tendersService.toggleFeedback(
|
||||||
tenderId: tenderId,
|
tenderId: tenderId,
|
||||||
feedbackType: feedbackType,
|
feedbackType: feedbackType,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class AuthApi {
|
||||||
|
static const String login = '/api/v1/profile/login';
|
||||||
|
static const String logout = '/api/v1/profile/logout';
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
class HomeApi {
|
||||||
|
static const String recommendedTenders = '/api/v1/tenders/recommend';
|
||||||
|
static String getRecommendedTenders({
|
||||||
|
required int limit,
|
||||||
|
required int offset,
|
||||||
|
}) {
|
||||||
|
return '$recommendedTenders?limit=$limit&offset=$offset';
|
||||||
|
}
|
||||||
|
|
||||||
|
static const String tenderApprovals = '/api/v1/tender-approvals';
|
||||||
|
static const String tenderApprovalStats = '/api/v1/tender-approvals/stats';
|
||||||
|
static const String statsCompany = '/api/v1/feedback/stats/company';
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class ProfileApi {
|
||||||
|
static const String profile = '/api/v1/profile';
|
||||||
|
static const String companyProfile = '/api/v1/companies';
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
class TenderDetailApi {
|
||||||
|
static const String tenderDetails = '/api/v1/tenders/details';
|
||||||
|
static String getTenderDetails({required String tenderId}) {
|
||||||
|
return '$tenderDetails/$tenderId';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
class TendersApi {
|
||||||
|
static const String tenders = '/api/v1/tenders';
|
||||||
|
static String getTenders({required int limit, required int offset}) {
|
||||||
|
return '$tenders?limit=$limit&offset=$offset';
|
||||||
|
}
|
||||||
|
|
||||||
|
static const String feedbackTender = '/api/v1/feedback/tender';
|
||||||
|
static String getFeedbackForTender({required String tenderId}) {
|
||||||
|
return '$feedbackTender/$tenderId';
|
||||||
|
}
|
||||||
|
|
||||||
|
static const String feedback = '/api/v1/feedback';
|
||||||
|
|
||||||
|
static const String tenderApprovals = '/api/v1/tender-approvals';
|
||||||
|
|
||||||
|
static const String tenderApprovalsTender = '/api/v1/tender-approvals/tender';
|
||||||
|
static String getTenderApprovalById({required String tenderId}) {
|
||||||
|
return '$tenderApprovalsTender/$tenderId';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class YourTendersApi {
|
||||||
|
static const String tenderApprovalsStatus =
|
||||||
|
'/api/v1/tender-approvals?status=submitted';
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:tm_app/core/utils/logger.dart';
|
||||||
|
import 'package:tm_app/data/services/api/auth_api.dart';
|
||||||
import 'package:tm_app/data/services/model/login_response/login_response_model.dart';
|
import 'package:tm_app/data/services/model/login_response/login_response_model.dart';
|
||||||
import 'package:tm_app/data/services/model/logout_response/logout_response.dart';
|
import 'package:tm_app/data/services/model/logout_response/logout_response.dart';
|
||||||
|
|
||||||
@@ -22,7 +24,7 @@ class AuthService {
|
|||||||
var data = jsonEncode({"password": password, "username": username});
|
var data = jsonEncode({"password": password, "username": username});
|
||||||
|
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/profile/login',
|
AuthApi.login,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
(json) => LoginResponseModel.fromJson(json),
|
(json) => LoginResponseModel.fromJson(json),
|
||||||
data: data,
|
data: data,
|
||||||
@@ -41,7 +43,7 @@ class AuthService {
|
|||||||
|
|
||||||
Future<Result<LogoutResponse>> logout() async {
|
Future<Result<LogoutResponse>> logout() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/profile/logout',
|
AuthApi.logout,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
(json) => LogoutResponse.fromJson(json),
|
(json) => LogoutResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
@@ -52,5 +54,6 @@ class AuthService {
|
|||||||
final prefs = await SharedPreferences.getInstance();
|
final prefs = await SharedPreferences.getInstance();
|
||||||
await prefs.remove('bearer');
|
await prefs.remove('bearer');
|
||||||
await prefs.remove('refresh_token');
|
await prefs.remove('refresh_token');
|
||||||
|
appLogger.info('tokens cleared!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
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/core/utils/result.dart';
|
||||||
import 'package:tm_app/data/services/mock_data/home_mock_data.dart';
|
import 'package:tm_app/data/services/api/home_api.dart';
|
||||||
import 'package:tm_app/data/services/model/feedback_stats_response/feedback_stat_response.dart';
|
import 'package:tm_app/data/services/model/feedback_stats_response/feedback_stat_response.dart';
|
||||||
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
|
|
||||||
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
|
|
||||||
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
||||||
@@ -18,36 +12,12 @@ class HomeService {
|
|||||||
: _networkManager = networkManager;
|
: _networkManager = networkManager;
|
||||||
final NetworkManager _networkManager;
|
final NetworkManager _networkManager;
|
||||||
|
|
||||||
Future<Result<HomeResponseModel>> getHome({
|
|
||||||
HomeRequestModel? homeRequestModel,
|
|
||||||
}) async {
|
|
||||||
try {
|
|
||||||
// final result = await _networkManager.makeRequest(
|
|
||||||
// '/api/v1/home',
|
|
||||||
// (json) => HomeResponseModel.fromJson(json),
|
|
||||||
// method: 'GET',
|
|
||||||
// );
|
|
||||||
await Future.delayed(Duration(seconds: 2));
|
|
||||||
appLogger.info('get home success');
|
|
||||||
// TODO: will change when api is ready
|
|
||||||
return Result.ok(
|
|
||||||
HomeResponseModel.fromJson(jsonDecode(homeMockData)['data']),
|
|
||||||
);
|
|
||||||
} on DioException catch (e) {
|
|
||||||
appLogger.error('get home failed: $e');
|
|
||||||
return Result.error(e);
|
|
||||||
} on Exception catch (e, stackTrace) {
|
|
||||||
appLogger.error('get home failed: $e', stackTrace: stackTrace);
|
|
||||||
return Result.error(Exception(e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<Result<RecommendedTendersResponse>> getRecommendedTenders({
|
Future<Result<RecommendedTendersResponse>> getRecommendedTenders({
|
||||||
required int limit,
|
required int limit,
|
||||||
required int offset,
|
required int offset,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tenders/recommend?limit=$limit&offset=$offset',
|
HomeApi.getRecommendedTenders(limit: limit, offset: offset),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => RecommendedTendersResponse.fromJson(json),
|
(json) => RecommendedTendersResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
@@ -56,7 +26,7 @@ class HomeService {
|
|||||||
|
|
||||||
Future<Result<TenderApprovalsResponse>> getYourTenders() async {
|
Future<Result<TenderApprovalsResponse>> getYourTenders() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tender-approvals',
|
HomeApi.tenderApprovals,
|
||||||
(json) => TenderApprovalsResponse.fromJson(json),
|
(json) => TenderApprovalsResponse.fromJson(json),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
);
|
);
|
||||||
@@ -67,7 +37,7 @@ class HomeService {
|
|||||||
Future<Result<TenderApprovalsStateResponse>>
|
Future<Result<TenderApprovalsStateResponse>>
|
||||||
getTendersApprovalsState() async {
|
getTendersApprovalsState() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tender-approvals/stats',
|
HomeApi.tenderApprovalStats,
|
||||||
(json) => TenderApprovalsStateResponse.fromJson(json),
|
(json) => TenderApprovalsStateResponse.fromJson(json),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
);
|
);
|
||||||
@@ -77,7 +47,7 @@ class HomeService {
|
|||||||
|
|
||||||
Future<Result<FeedbackStatResponse>> getFeedbackStats() async {
|
Future<Result<FeedbackStatResponse>> getFeedbackStats() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/feedback/stats/company',
|
HomeApi.statsCompany,
|
||||||
(json) => FeedbackStatResponse.fromJson(json),
|
(json) => FeedbackStatResponse.fromJson(json),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:tm_app/data/services/api/profile_api.dart';
|
||||||
import 'package:tm_app/data/services/model/company_profile_response/company_profile_response.dart';
|
import 'package:tm_app/data/services/model/company_profile_response/company_profile_response.dart';
|
||||||
import 'package:tm_app/data/services/model/profile_response/profile_response.dart';
|
import 'package:tm_app/data/services/model/profile_response/profile_response.dart';
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ class ProfileService {
|
|||||||
|
|
||||||
Future<Result<ProfileResponse>> getProfile() async {
|
Future<Result<ProfileResponse>> getProfile() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/profile',
|
ProfileApi.profile,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => ProfileResponse.fromJson(json),
|
(json) => ProfileResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
@@ -21,7 +22,7 @@ class ProfileService {
|
|||||||
|
|
||||||
Future<Result<CompanyProfileResponse>> getCompanyProfile() async {
|
Future<Result<CompanyProfileResponse>> getCompanyProfile() async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/companies',
|
ProfileApi.companyProfile,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => CompanyProfileResponse.fromJson(json),
|
(json) => CompanyProfileResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:tm_app/core/utils/result.dart';
|
import 'package:tm_app/core/utils/result.dart';
|
||||||
|
import 'package:tm_app/data/services/api/tender_detail_api.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart';
|
import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart';
|
||||||
|
|
||||||
import '../../core/network/network_manager.dart';
|
import '../../core/network/network_manager.dart';
|
||||||
@@ -13,7 +14,7 @@ class TenderDetailService {
|
|||||||
required String tenderId,
|
required String tenderId,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tenders/details/$tenderId',
|
TenderDetailApi.getTenderDetails(tenderId: tenderId),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => TenderDetailResponseModel.fromJson(json),
|
(json) => TenderDetailResponseModel.fromJson(json),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:tm_app/core/utils/result.dart';
|
import 'package:tm_app/core/utils/result.dart';
|
||||||
|
import 'package:tm_app/data/services/api/tenders_api.dart';
|
||||||
import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart';
|
import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart';
|
||||||
@@ -18,7 +19,7 @@ class TendersService {
|
|||||||
required int offset,
|
required int offset,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tenders?limit=$limit&offset=$offset',
|
TendersApi.getTenders(limit: limit, offset: offset),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => TendersResponse.fromJson(json),
|
(json) => TendersResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
@@ -29,14 +30,14 @@ class TendersService {
|
|||||||
required String tenderId,
|
required String tenderId,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/feedback/tender/$tenderId',
|
TendersApi.getFeedbackForTender(tenderId: tenderId),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => FeedbackResponse.fromJson(json),
|
(json) => FeedbackResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Result<FeedbackResponse>> feedback({
|
Future<Result<FeedbackResponse>> toggleFeedback({
|
||||||
required String tenderId,
|
required String tenderId,
|
||||||
required String feedbackType,
|
required String feedbackType,
|
||||||
}) async {
|
}) async {
|
||||||
@@ -45,7 +46,7 @@ class TendersService {
|
|||||||
'tender_id': tenderId,
|
'tender_id': tenderId,
|
||||||
});
|
});
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/feedback',
|
TendersApi.feedback,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
(json) => FeedbackResponse.fromJson(json),
|
(json) => FeedbackResponse.fromJson(json),
|
||||||
data: data,
|
data: data,
|
||||||
@@ -64,7 +65,7 @@ class TendersService {
|
|||||||
'status': status,
|
'status': status,
|
||||||
});
|
});
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tender-approvals',
|
TendersApi.tenderApprovals,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
(json) => TenderApprovalsToggleResponse.fromJson(json),
|
(json) => TenderApprovalsToggleResponse.fromJson(json),
|
||||||
data: data,
|
data: data,
|
||||||
@@ -76,7 +77,7 @@ class TendersService {
|
|||||||
required String tenderId,
|
required String tenderId,
|
||||||
}) async {
|
}) async {
|
||||||
final result = await _networkManager.makeRequest(
|
final result = await _networkManager.makeRequest(
|
||||||
'/api/v1/tender-approvals/tender/$tenderId',
|
TendersApi.getTenderApprovalById(tenderId: tenderId),
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
(json) => TenderApprovalsByIdResponse.fromJson(json),
|
(json) => TenderApprovalsByIdResponse.fromJson(json),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
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/core/utils/result.dart';
|
||||||
|
import 'package:tm_app/data/services/api/your_tenders_api.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
||||||
|
|
||||||
import '../../../core/network/network_manager.dart';
|
import '../../../core/network/network_manager.dart';
|
||||||
@@ -12,23 +11,12 @@ class YourTendersService {
|
|||||||
final NetworkManager _networkManager;
|
final NetworkManager _networkManager;
|
||||||
|
|
||||||
Future<Result<TenderApprovalsResponse>> getApprovedTenders() async {
|
Future<Result<TenderApprovalsResponse>> getApprovedTenders() async {
|
||||||
try {
|
final result = await _networkManager.makeRequest(
|
||||||
final result = await _networkManager.makeRequest(
|
YourTendersApi.tenderApprovalsStatus,
|
||||||
'/api/v1/tender-approvals?status=submitted',
|
(json) => TenderApprovalsResponse.fromJson(json),
|
||||||
(json) => TenderApprovalsResponse.fromJson(json),
|
method: 'GET',
|
||||||
method: 'GET',
|
);
|
||||||
);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
} on DioException catch (e) {
|
|
||||||
appLogger.error('get submitted tenders failed: $e');
|
|
||||||
return Result.error(e);
|
|
||||||
} on Exception catch (e, stackTrace) {
|
|
||||||
appLogger.error(
|
|
||||||
'get submitted tenders failed: $e',
|
|
||||||
stackTrace: stackTrace,
|
|
||||||
);
|
|
||||||
return Result.error(Exception(e));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:tm_app/core/utils/result.dart';
|
import 'package:tm_app/core/utils/result.dart';
|
||||||
import 'package:tm_app/data/services/model/feedback_stats/feedback_stats.dart';
|
import 'package:tm_app/data/services/model/feedback_stats/feedback_stats.dart';
|
||||||
import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart';
|
|
||||||
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
||||||
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
import 'package:tm_app/data/services/model/tender_approvals_state_response/tender_approvals_state_response.dart';
|
||||||
@@ -51,30 +50,10 @@ class HomeViewModel with ChangeNotifier {
|
|||||||
await getFeedbackStats();
|
await getFeedbackStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> getHome({HomeRequestModel? homeRequestModel}) async {
|
|
||||||
_isLoading = true;
|
|
||||||
_errorMessage = null;
|
|
||||||
notifyListeners();
|
|
||||||
|
|
||||||
final result = await _homeRepository.getHome(
|
|
||||||
homeRequestModel: homeRequestModel,
|
|
||||||
);
|
|
||||||
|
|
||||||
switch (result) {
|
|
||||||
case Ok<HomeResponseModel>():
|
|
||||||
_homeResponse = result.value;
|
|
||||||
break;
|
|
||||||
case Error<HomeResponseModel>():
|
|
||||||
_errorMessage = result.error.toString();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isLoading = false;
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> getHomeRecommandTenders({bool reset = false}) async {
|
Future<void> getHomeRecommandTenders({bool reset = false}) async {
|
||||||
if (_isLoadingMore || (!_hasMore && !reset)) return;
|
if (_isLoadingMore || (!_hasMore && !reset)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (reset) {
|
if (reset) {
|
||||||
_currentPage = 0;
|
_currentPage = 0;
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ class TendersViewModel with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadMoreTenders() async {
|
Future<void> loadMoreTenders() async {
|
||||||
if (_isLoadingMore || !_hasMoreData) return;
|
if (_isLoadingMore || !_hasMoreData) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_isLoadingMore = true;
|
_isLoadingMore = true;
|
||||||
_errorMessage = null;
|
_errorMessage = null;
|
||||||
|
|||||||
@@ -75,7 +75,9 @@ class TenderDetailHeader extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
String unixToDate(int? unixTimestamp, {String format = 'yyyy-MM-dd'}) {
|
||||||
if (unixTimestamp == null) return '';
|
if (unixTimestamp == null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
// Convert seconds to milliseconds if needed
|
// Convert seconds to milliseconds if needed
|
||||||
int timestampInMs =
|
int timestampInMs =
|
||||||
|
|||||||
Reference in New Issue
Block a user