You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

1075 lines
51 KiB

using GMCabsDriverAssistant.Enums;
using GMCabsDriverAssistant.Models;
using GMCabsDriverAssistant.Models.Rydo;
using GMCabsDriverAssistant.Utils;
using GMCabsDriverAssistantSolution.Models.Rydo;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using static GMCabsDriverAssistant.Constants;
namespace GMCabsDriverAssistant.Services
{
public class GMCabsDriverService
{
#region Fields
#endregion
#region Properties
#endregion
#region Constructor
#endregion
#region Methods
public async Task<ValidateTokenResponseDto> ValidateAuthToken(string token, string fcmToken)
{
ValidateTokenResponseDto validateTokenResponseDto = new ValidateTokenResponseDto();
Uri uri = new Uri($"{BASE_URL}/Auth/ValidateToken");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { token, fcmToken });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
validateTokenResponseDto = JsonSerializer.Deserialize<ValidateTokenResponseDto>(responseData, options);
}
return validateTokenResponseDto;
}
public async Task<LoginResponseDto> Login(LoginRequestDto loginRequestDto)
{
LoginResponseDto loginResponseDto = new LoginResponseDto();
try
{
Uri uri = new Uri(string.Format(BASE_URL + "/Auth/Login", string.Empty));
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(loginRequestDto);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
loginResponseDto = JsonSerializer.Deserialize<LoginResponseDto>(responseData, options);
if (response.IsSuccessStatusCode)
{
// DO Nothing
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
//TODO
return loginResponseDto;
}
else if (response.StatusCode == HttpStatusCode.Unauthorized)
{
//TODO
return loginResponseDto;
}
}
catch (Exception ex)
{
throw ex;
}
return loginResponseDto;
}
public async Task<EftposLoginResponse> EftposLogin(EftposLoginRequest eftposLoginRequest)
{
EftposLoginResponse eftposLoginResponse = new EftposLoginResponse();
Uri uri = new Uri(string.Format(BASE_URL_RYDO_API + "/v1/account/eftpos-login", string.Empty));
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(eftposLoginRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
eftposLoginResponse = JsonSerializer.Deserialize<EftposLoginResponse>(responseData, options);
}
return eftposLoginResponse;
}
public async Task<UnreadCountResponseDto> GetUnreadNotificationCount(string appToken)
{
UnreadCountResponseDto unreadCountResponse = new UnreadCountResponseDto();
var unreadNotificationCount = 0;
Uri uri = new Uri($"{BASE_URL}/Notifications/UnreadCount?token={appToken}");
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
unreadNotificationCount = JsonSerializer.Deserialize<int>(responseData, options);
unreadCountResponse.StatusCode = Constant.SUCCESS_CODE;
unreadCountResponse.UnreadNotificationCount = unreadNotificationCount;
}
else
{
if (response.StatusCode == HttpStatusCode.Unauthorized)
{
unreadCountResponse.StatusCode = Constant.UNAUTHORIZED_CODE;
unreadCountResponse.UnreadNotificationCount = unreadNotificationCount;
}
else
{
unreadCountResponse.StatusCode = Constant.BADREQUEST_CODE;
unreadCountResponse.UnreadNotificationCount = unreadNotificationCount;
}
}
return unreadCountResponse;
}
public async Task<List<Guid>> GetBookingAvailableCount(string accessToken, string driverId, double lat, double lng)
{
List<Guid> bookingIDs = null;
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverId}/available?latitude={lat}&longitude={lng}");
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
List<BookingDto> bookings = JsonSerializer.Deserialize<List<BookingDto>>(responseData);
if (bookings != null)
{
bookingIDs = new List<Guid>();
foreach (BookingDto booking in bookings) { bookingIDs.Add(booking.BookingId); }
}
}
return bookingIDs;
}
public async Task<List<CouponDto>> GetCoupons(string appToken)
{
List<CouponDto> coupons = new List<CouponDto>();
Uri uri = new Uri(string.Format(BASE_URL + "/Coupons?token=" + appToken, string.Empty));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
coupons = JsonSerializer.Deserialize<List<CouponDto>>(responseData, options);
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
//TODO
}
else if (response.StatusCode == HttpStatusCode.Unauthorized)
{
//TODO
}
return coupons;
}
public async Task<List<CouponHistoryDto>> GetCouponsHistory(string appToken)
{
List<CouponHistoryDto> couponsHistory = new List<CouponHistoryDto>();
Uri uri = new Uri(string.Format(BASE_URL + "/Coupons/History?token=" + appToken, string.Empty));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
couponsHistory = JsonSerializer.Deserialize<List<CouponHistoryDto>>(responseData, options);
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
//TODO
}
else if (response.StatusCode == HttpStatusCode.Unauthorized)
{
//TODO
}
return couponsHistory;
}
public async Task<List<NotificationDto>> GetNotifications(string appToken)
{
List<NotificationDto> notifications = new List<NotificationDto>();
try
{
Uri uri = new Uri(string.Format(BASE_URL + "/Notifications?token=" + appToken, string.Empty));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage respose = await _httpClient.GetAsync(uri);
if (respose != null)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await respose.Content.ReadAsStringAsync();
notifications = JsonSerializer.Deserialize<List<NotificationDto>>(responseData, options);
}
}
catch (Exception ex)
{
throw ex;
}
return notifications;
}
public async Task<bool> MarkNotificationAsViewed(string appToken, string notificationId)
{
Uri uri = new Uri($"{BASE_URL}/Notifications/NotificationViewed/{notificationId}?token={appToken}");
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, null);
return response.IsSuccessStatusCode;
}
public async Task<List<BookingDto>> GetBookings(string accessToken, Guid driverId, double lat, double lng)
{
List<BookingDto> bookings = new List<BookingDto>();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverId}/available?latitude={lat}&longitude={lng}");
Debug.WriteLine(uri);
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
bookings = JsonSerializer.Deserialize<List<BookingDto>>(responseData);
//if (bookings.Count <= 0)
//{
// uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverId}/available?future_bookings=1");
// _httpClient = new HttpClient();
// _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
// response = await _httpClient.GetAsync(uri);
// if (response.IsSuccessStatusCode)
// {
// var featureResponseData = await response.Content.ReadAsStringAsync();
// bookings = JsonSerializer.Deserialize<List<BookingDto>>(featureResponseData);
// }
//}
}
bookings = bookings.OrderBy(x => x.FormmattedPickUpDateTime).ToList();
return await Task.FromResult(bookings);
}
public async Task<AcceptDeclineBookingResponse> AcceptBooking(AcceptDeclineBookingRequest acceptBookingRequest, string accessToken, string bookingId)
{
AcceptDeclineBookingResponse acceptBookingResponse = new AcceptDeclineBookingResponse();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/accept");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(acceptBookingRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
acceptBookingResponse = JsonSerializer.Deserialize<AcceptDeclineBookingResponse>(responseData, options);
}
acceptBookingResponse.StatusCode = (int)response.StatusCode;
acceptBookingResponse.Message = (string)response.ReasonPhrase;
return acceptBookingResponse;
}
public async Task<AcceptDeclineBookingResponse> DeclineBooking(AcceptDeclineBookingRequest declineBookingRequest, string accessToken, string bookingId)
{
AcceptDeclineBookingResponse declineBookingResponse = new AcceptDeclineBookingResponse();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/decline");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(declineBookingRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
declineBookingResponse.StatusCode = (int)response.StatusCode;
declineBookingResponse.Message = (string)response.ReasonPhrase;
return declineBookingResponse;
}
public async Task<int> SendDriverLocation(string appToken, LocationUpdateRequestDto locationUpdateRequestDto)
{
Uri uri = new Uri($"{BASE_URL}/DriverAssistantApp/UpdateLocation?token={appToken}");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(locationUpdateRequestDto);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return (int)response.StatusCode;
}
public async Task<int> SendDriverLocationTablet(LocationUpdateRequestDto locationUpdateRequestDto)
{
Uri uri = new Uri($"{BASE_URL}/DriverAssistantApp/UpdateLocationTablet");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(locationUpdateRequestDto);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return (int)response.StatusCode;
}
public async Task<bool> UpdateSilentModeSetting(string appToken, SilentModeSettingRequest request)
{
Uri uri = new Uri($"{BASE_URL}/DriverAssistantApp/UpdateDriverAppSilentModeSetting?token={appToken}");
string json = JsonSerializer.Serialize(request);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<List<BookingDto>> GetAcceptedFutureBookings(string accessToken, Guid driverId)
{
List<BookingDto> bookings = new List<BookingDto>();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverId}/accepted");
Debug.WriteLine(uri);
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
bookings = JsonSerializer.Deserialize<List<BookingDto>>(responseData);
}
return await Task.FromResult(bookings);
}
public async Task<BookingDto> GetBookingDetails(string accessToken, Guid bookingId)
{
BookingDto booking = new BookingDto();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/details");
Debug.WriteLine(uri);
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
booking = JsonSerializer.Deserialize<BookingDto>(responseData);
}
return await Task.FromResult(booking);
}
public async Task<BookingDto> GetAcceptedOnDemandBookingForDriver(string accessToken, Guid driverId)
{
List<BookingDto> booking = new List<BookingDto>();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverId}/accepted");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
booking = JsonSerializer.Deserialize<List<BookingDto>>(responseData);
}
// there can be only on accepted on demand booking so the below result will either be the only entry or null
return await Task.FromResult(booking.FirstOrDefault());
}
public async Task<bool> UpdateProfile(string appToken, MultipartFormDataContent content)
{
Uri uri = new Uri($"{BASE_URL}/Driver/UpdateDriverDetails?token={appToken}");
Debug.WriteLine(uri);
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<bool> GenerateOtp(string mobileNumber)
{
Uri uri = new Uri($"{BASE_URL}/Auth/GenerateOtp?mobileNumber={mobileNumber}");
Debug.WriteLine(uri);
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, null);
return response.IsSuccessStatusCode;
}
public async Task<bool> VerifyOtp(string mobileNumber, string otp)
{
var isOtpValid = false;
Uri uri = new Uri($"{BASE_URL}/Auth/VerifyOtp");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { mobileNumber, otp });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var responseData = await response.Content.ReadAsStringAsync();
isOtpValid = bool.Parse(responseData);
}
return isOtpValid;
}
public async Task<bool> UpdateDriverPin(string mobileNumber, int pin)
{
Uri uri = new Uri($"{BASE_URL}/Auth/UpdateDriverPin");
Debug.WriteLine(uri);
string json = JsonSerializer.Serialize(new { mobileNumber, pin });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<string> CouponScan(string appToken, string couponText)
{
Uri uri = new Uri($"{BASE_URL}/Driver/CouponScan?token={appToken}");
string json = JsonSerializer.Serialize(new { couponText });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
var status = await response.Content.ReadAsStringAsync();
return status.ToString();
}
public async Task<int> VoucherScanedCount(string appToken, DateTime reportingDate)
{
var voucherScanedCount = 0;
Uri uri = new Uri($"{BASE_URL}/Coupons/VouchersScannedCount?token={appToken}");
string json = JsonSerializer.Serialize(new { reportingDate });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
voucherScanedCount = JsonSerializer.Deserialize<int>(responseData, options);
}
return voucherScanedCount;
}
public async Task<bool> LogoutDriverApp(string appToken, double lastLat, double lastLng)
{
Uri uri = new Uri($"{BASE_URL}/Auth/Logout?token={appToken}&lastLat={lastLat}&lastLng={lastLng}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PostAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<bool> DeclineFutureBooking(string accessToken, String bookingId)
{
bool result = false;
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/release");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
StringContent content = new StringContent("", Encoding.UTF8, "application/json");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
if (response.IsSuccessStatusCode)
{
result = true;
}
return result;
}
public async Task<bool> CreateLightDriver(CreateLightDriverRequest createLightDriverRequest)
{
bool result = false;
try
{
Uri uri = new Uri(string.Format(BASE_URL + "/Auth/CreateLightDriver", string.Empty));
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(createLightDriverRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.StatusCode == HttpStatusCode.OK)
{
result= true;
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
//TODO
result= false;
}
}
catch (Exception ex)
{
result = false;
}
return result;
}
public async Task<LocationVoucherDto> GetLocationVoucherByLocationID(string appToken, int issuedFromLocationID)
{
LocationVoucherDto locationVoucher = new LocationVoucherDto();
Uri uri = new Uri(string.Format(BASE_URL + "/Coupons/GetLocationVoucherByLocationID?token=" + appToken+ "&issuedFromLocationID=" + issuedFromLocationID, string.Empty));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
locationVoucher = JsonSerializer.Deserialize<LocationVoucherDto>(responseData, options);
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
//TODO
}
else if (response.StatusCode == HttpStatusCode.Unauthorized)
{
//TODO
}
return locationVoucher;
}
public async Task<bool> ValidateAdminPassword(string adminPassword)
{
var isValidAdminPassword = false;
Uri uri = new Uri(string.Format(BASE_URL + "/Auth/ValidateAdminPassword?adminPassword=" + adminPassword));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.StatusCode == HttpStatusCode.OK)
{
isValidAdminPassword = true;
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
isValidAdminPassword = false;
}
return isValidAdminPassword;
}
public async Task<bool> ValidateTaxiNumberInstallation(string taxiNumber)
{
var isValidAdminPassword = false;
Uri uri = new Uri(string.Format(BASE_URL + "/DriverAssistantApp/ValidateTaxiNumberInstallation?taxiNumber=" + taxiNumber));
Console.WriteLine($"URI: {uri}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.StatusCode == HttpStatusCode.OK)
{
isValidAdminPassword = true;
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
isValidAdminPassword = false;
}
return isValidAdminPassword;
}
public async Task<StartRideResponse> StartRiding(StartRideRequest startRideRequest, string accessToken, string bookingId)
{
StartRideResponse startRideResponse = new StartRideResponse();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/start-ride");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(startRideRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
startRideResponse = JsonSerializer.Deserialize<StartRideResponse>(responseData, options);
}
startRideResponse.StatusCode = (int)response.StatusCode;
startRideResponse.Message = (string)response.ReasonPhrase;
return startRideResponse;
}
public async Task<ApiResponseDto> SendMessage(MessageRequest messageRequest, string accessToken, string bookingId)
{
ApiResponseDto apiResponseDto = new ApiResponseDto();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/message");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(messageRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await _httpClient.PostAsync(uri, content);
apiResponseDto.StatusCode = (int)response.StatusCode;
apiResponseDto.Message = (string)response.ReasonPhrase;
return apiResponseDto;
}
public async Task<ApiResponseDto> ReleaseBooking(string accessToken, string bookingId)
{
ApiResponseDto apiResponseDto = new ApiResponseDto();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/release");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await _httpClient.PutAsync(uri, content);
apiResponseDto.StatusCode = (int)response.StatusCode;
apiResponseDto.Message = (string)response.ReasonPhrase;
return apiResponseDto;
}
public async Task<ApiResponseDto> NoShowBooking(string accessToken, string bookingId)
{
ApiResponseDto apiResponseDto = new ApiResponseDto();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/no-show");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await _httpClient.PutAsync(uri, content);
apiResponseDto.StatusCode = (int)response.StatusCode;
apiResponseDto.Message = (string)response.ReasonPhrase;
return apiResponseDto;
}
public async Task<int> NotifyStop(int stopNumber, string accessToken, string bookingId)
{
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/notify-stop?stop_number={stopNumber}");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
return (int)response.StatusCode;
}
public async Task<ApiResponseDto> EndRiding(EndRideRequestDto endRideRequestDto, string accessToken, string bookingId)
{
ApiResponseDto apiResponseDto = new ApiResponseDto();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/end-ride");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(endRideRequestDto);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await _httpClient.PutAsync(uri, content);
apiResponseDto.StatusCode = (int)response.StatusCode;
apiResponseDto.Message = (string)response.ReasonPhrase;
return apiResponseDto;
}
public async Task<ApiResponseDto> MakePaymentAtTerminal(string bookingId, string driverId, int amount)
{
ApiResponseDto apiResponseDto = new ApiResponseDto();
Uri uri = new Uri(string.Format(BASE_URL + "/Terminal/PayAtTerminal?bookingID=" + bookingId + "&driverID=" + driverId + "&amount=" + amount));
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
apiResponseDto.StatusCode = (int)response.StatusCode;
apiResponseDto.Message = (string)response.ReasonPhrase;
return apiResponseDto;
}
public async Task<bool> CloseAccountDriverApp(string appToken)
{
Uri uri = new Uri($"{BASE_URL}/Driver/CloseAccount?token={appToken}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<string> UpdateBookingStatus(string appToken, int statusFlag, bool isMetered)
{
Uri uri = new Uri(string.Format(BASE_URL + $"/DriverAssistantApp/MeterTripStatus?token={appToken}&statusFlag={statusFlag}&isMetered={isMetered}"));
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
var suburbName = (response.StatusCode == HttpStatusCode.OK) ? await response.Content.ReadAsStringAsync() : String.Empty;
return suburbName.ToString();
}
public async Task<bool> DriverDistress(string appToken, double lat, double lng)
{
bool result = false;
Uri uri = new Uri(string.Format(BASE_URL + $"/DriverAssistantApp/DriverDistress?token={appToken}&lat={lat}&lng={lng}"));
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
if (response.StatusCode == HttpStatusCode.OK)
{
result = true;
}
return result;
}
public async Task<bool> RequestPayment(string appToken, int amount)
{
Uri uri = new Uri(string.Format(BASE_URL + "/DriverAssistantApp/RequestPayment?token=" + appToken + "&amount=" + amount));
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return response.IsSuccessStatusCode;
}
public async Task<List<ImeiDto>> GetAvailableImeiNumbers(string enteredValue)
{
List<ImeiDto> imeiNumers = null;
Uri uri = new Uri($"{BASE_URL}/TabletDevice/UninstalledImeis?enteredValue={enteredValue}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
if (responseData != string.Empty)
{
imeiNumers = JsonSerializer.Deserialize<List<ImeiDto>>(responseData,options);
}
}
return imeiNumers;
}
// now done on logon
//public async Task<bool> CompleteInstallation(string imeiValue)
//{
// bool result = false;
// Uri uri = new Uri($"{BASE_URL}/TabletDevice/CompleteTabletInstall?imei={imeiValue}");
// string json = JsonSerializer.Serialize(new { });
// StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
// HttpClient _httpClient = new HttpClient();
// var response = await _httpClient.PutAsync(uri, content);
// if (response.IsSuccessStatusCode)
// {
// // need to handle a false in content result which means some other device has already been installed in the selected taxi
// result = true;
// }
// return result;
//}
public async Task<List<TripsBookingResponse>> GetTripDetails(string appToken)
{
List<TripsBookingResponse> tripsBookingResponses = new List<TripsBookingResponse>();
Uri uri = new Uri(string.Format(BASE_URL + "/DriverAssistantApp/Trips?token=" + appToken));
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
tripsBookingResponses = JsonSerializer.Deserialize<List<TripsBookingResponse>>(responseData, options);
}
return tripsBookingResponses;
}
public async Task<AccountBalanceDto> GetLevyBalance(string appToken)
{
AccountBalanceDto accountBalanceDto = new AccountBalanceDto();
Uri uri = new Uri(string.Format(BASE_URL + "/Driver/AccountBalance?token=" + appToken));
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
accountBalanceDto = JsonSerializer.Deserialize<AccountBalanceDto>(responseData, options);
}
return accountBalanceDto;
}
public async Task<DriverRatingResponse> GetDriverRatings(string accessToken, string driverId, string phoneNumber)
{
DriverRatingResponse driverRatingResponse = new DriverRatingResponse();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/drivers?id={driverId}&phone_number={phoneNumber}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
driverRatingResponse = JsonSerializer.Deserialize<DriverRatingResponse>(responseData, options);
}
return driverRatingResponse;
}
public async Task<List<ShiftResponseDto>> GetShiftDetails(string appToken)
{
List<ShiftResponseDto> shiftResponses = new List<ShiftResponseDto>();
Uri uri = new Uri(string.Format(BASE_URL + "/DriverAssistantApp/Shifts?token=" + appToken));
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
shiftResponses = JsonSerializer.Deserialize<List<ShiftResponseDto>>(responseData, options);
}
return shiftResponses;
}
public async Task<List<PlotResponseDto>> GetAvailablePlot(string accessToken, string driverId, double lat, double lng)
{
List<PlotResponseDto> plotResponses = new List<PlotResponseDto>();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/available-plot?driver_id={driverId}&lat={lat}&lng={lng}");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
plotResponses = JsonSerializer.Deserialize<List<PlotResponseDto>>(responseData, options);
}
return plotResponses;
}
public async Task<AvailablePlotResponseDto> GetPlottedDriverInformation(AvailablePlotRequestDto availablePlotRequest, string accessToken)
{
AvailablePlotResponseDto availablePlotResponse = new AvailablePlotResponseDto();
Uri uri = new Uri(string.Format(BASE_URL_RYDO_API + "/v1/bookings/driver-plot", string.Empty));
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(availablePlotRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
availablePlotResponse = JsonSerializer.Deserialize<AvailablePlotResponseDto>(responseData, options);
availablePlotResponse.apiResponseDto = new ApiResponseDto();
availablePlotResponse.apiResponseDto.StatusCode = (int)response.StatusCode;
availablePlotResponse.apiResponseDto.Message = string.Empty;
}
else if (response.StatusCode == HttpStatusCode.InternalServerError)
{
availablePlotResponse.apiResponseDto = new ApiResponseDto();
availablePlotResponse.apiResponseDto.StatusCode = (int)response.StatusCode;
availablePlotResponse.apiResponseDto.Message = (string)response.ReasonPhrase;
}
else
{
availablePlotResponse.apiResponseDto = new ApiResponseDto();
availablePlotResponse.apiResponseDto.StatusCode = (int)response.StatusCode;
availablePlotResponse.apiResponseDto.Message = "Unable to plot in this area";
}
return availablePlotResponse;
}
public async Task<int> RemoveDriverPlot(Guid driverID, string accessToken)
{
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{driverID}/driver-leave-plot");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(new { });
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
return (int)response.StatusCode;
}
public async Task<StartTripResponse> StartTripFutureBooking(StartTripRequest startTripRequest, string accessToken, string bookingId)
{
StartTripResponse startTripResponse = new StartTripResponse();
Uri uri = new Uri($"{BASE_URL_RYDO_API}/v1/bookings/{bookingId}/head-to-pickup");
Console.WriteLine($"URI: {uri}");
string json = JsonSerializer.Serialize(startTripRequest);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response = await _httpClient.PutAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var responseData = await response.Content.ReadAsStringAsync();
startTripResponse = JsonSerializer.Deserialize<StartTripResponse>(responseData, options);
}
startTripResponse.ResponseStatusCode = (int)response.StatusCode;
startTripResponse.Message = (string)response.ReasonPhrase;
return startTripResponse;
}
public async Task<bool> DriverAppSelectedPermissions(string appToken, DriverAppSelectedPermissionsDto request)
{
Uri uri = new Uri($"{BASE_URL}/DriverAssistantApp/DriverAppSelectedPermissions?token={appToken}");
string json = JsonSerializer.Serialize(request);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient _httpClient = new HttpClient();
PutAppVersionInHeader(_httpClient);
var response = await _httpClient.PutAsync(uri, content);
return response.IsSuccessStatusCode;
}
#endregion
#region Utility
private void PutAppVersionInHeader(HttpClient _httpClient)
{
string[] parts = AppInfo.Version.ToString().Split('.');
string formattedString = parts.Select(p => int.Parse(p).ToString("D2")).Aggregate((p1, p2) => p1 + p2);
_httpClient.DefaultRequestHeaders.Add("app-version", formattedString);
}
#endregion Utility
}
}