-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Aaron
committed
May 13, 2020
1 parent
999eb68
commit 59b1fc5
Showing
4 changed files
with
187 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
using System.Collections.Generic; | ||
using System.Net; | ||
using System.Net.Http; | ||
using System.Threading.Tasks; | ||
using DVSA.MOT.SDK.Models; | ||
|
||
namespace DVSA.MOT.SDK.Interfaces | ||
{ | ||
public interface IProcessApiResponse | ||
{ | ||
Task<List<VehicleDetails>> ConvertToObject(HttpContent json); | ||
string ResponseMessage(HttpStatusCode statusCode); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Net; | ||
using System.Net.Http; | ||
using System.Threading.Tasks; | ||
using DVSA.MOT.SDK.Interfaces; | ||
using DVSA.MOT.SDK.Models; | ||
using Microsoft.Extensions.Logging; | ||
using Newtonsoft.Json; | ||
|
||
namespace DVSA.MOT.SDK.Services | ||
{ | ||
public class ProcessApiResponse : IProcessApiResponse | ||
{ | ||
private readonly ILogger<ProcessApiResponse> _logger; | ||
|
||
public ProcessApiResponse(ILogger<ProcessApiResponse> logger) | ||
{ | ||
_logger = logger; | ||
} | ||
|
||
public async Task<List<VehicleDetails>> ConvertToObject(HttpContent httpContent) | ||
{ | ||
try | ||
{ | ||
if (httpContent == null) | ||
return null; | ||
|
||
var json = await httpContent.ReadAsStringAsync(); | ||
if (string.IsNullOrEmpty(json)) | ||
return null; | ||
|
||
var motTestResponses = JsonConvert.DeserializeObject<List<VehicleDetails>>(json); | ||
return motTestResponses; | ||
} | ||
catch (Exception ex) | ||
{ | ||
_logger.Log(LogLevel.Error, ex, ex.Message); | ||
return null; | ||
} | ||
} | ||
|
||
public string ResponseMessage(HttpStatusCode statusCode) | ||
{ | ||
var responseMessage = string.Empty; | ||
try | ||
{ | ||
switch (statusCode) | ||
{ | ||
case HttpStatusCode.OK: | ||
responseMessage = Constants.LanguageStrings.Ok; | ||
break; | ||
case HttpStatusCode.NotFound: | ||
responseMessage = Constants.LanguageStrings.SingleVehicleMotHistory.VehicleNotFound; | ||
break; | ||
case HttpStatusCode.BadRequest: | ||
responseMessage = Constants.LanguageStrings.SingleVehicleMotHistory.BadRequest; | ||
break; | ||
case HttpStatusCode.Forbidden: | ||
responseMessage = Constants.LanguageStrings.MissingApiKey; | ||
break; | ||
case HttpStatusCode.UnsupportedMediaType: | ||
responseMessage = Constants.LanguageStrings.IncorrectContentType; | ||
break; | ||
case HttpStatusCode.InternalServerError: | ||
responseMessage = Constants.LanguageStrings.ServerError; | ||
break; | ||
case HttpStatusCode.ServiceUnavailable: | ||
responseMessage = Constants.LanguageStrings.ServiceNotAvailable; | ||
break; | ||
case HttpStatusCode.GatewayTimeout: | ||
responseMessage = Constants.LanguageStrings.GatewayTimeout; | ||
break; | ||
default: | ||
if ((int)statusCode == 429) | ||
{ | ||
responseMessage = Constants.LanguageStrings.TooManyRequests; | ||
} | ||
break; | ||
} | ||
|
||
return responseMessage; | ||
} | ||
catch (Exception ex) | ||
{ | ||
responseMessage = ex.Message; | ||
_logger.Log(LogLevel.Error, ex, ex.Message); | ||
return responseMessage; | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,124 +1,108 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Net; | ||
using System.Net.Http; | ||
using System.Net.Http.Headers; | ||
using System.Threading.Tasks; | ||
using DVSA.MOT.SDK.Interfaces; | ||
using DVSA.MOT.SDK.Models; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Extensions.Options; | ||
using Newtonsoft.Json; | ||
|
||
namespace DVSA.MOT.SDK.Services | ||
{ | ||
public class SingleVehicleService : ISingleVehicleService | ||
{ | ||
private readonly IProcessApiResponse _processApiResponse; | ||
private readonly IOptions<ApiKey> _apiKey; | ||
private readonly ILogger<SingleVehicleService> _logger; | ||
|
||
public SingleVehicleService(IOptions<ApiKey> apiKey, ILogger<SingleVehicleService> logger) | ||
public SingleVehicleService(IOptions<ApiKey> apiKey, ILogger<SingleVehicleService> logger, IProcessApiResponse processApiResponse) | ||
{ | ||
_apiKey = apiKey; | ||
_logger = logger; | ||
_processApiResponse = processApiResponse; | ||
} | ||
|
||
public async Task<ApiResponse> GetSingleVehicleMotHistoryByRegistration(string registration) | ||
{ | ||
var apiResponse = new ApiResponse(); | ||
string errorMessage; | ||
if (!string.IsNullOrEmpty(registration)) | ||
try | ||
{ | ||
using (var httpClient = new HttpClient()) | ||
var apiResponse = new ApiResponse(); | ||
string responseMessage; | ||
if (!string.IsNullOrEmpty(registration)) | ||
{ | ||
httpClient.DefaultRequestHeaders.Clear(); | ||
httpClient.DefaultRequestHeaders.Accept.Add( | ||
new MediaTypeWithQualityHeaderValue(Constants.ApiAcceptHeader)); | ||
httpClient.DefaultRequestHeaders.Add(Constants.ApiKeyHeader, _apiKey.Value.DVSAApiKey); | ||
|
||
if (!string.IsNullOrEmpty(registration)) | ||
using (var httpClient = new HttpClient()) | ||
{ | ||
var request = await httpClient.GetAsync($"{Constants.ApiRootUrl}{Constants.ApiPath}?registration={registration}"); | ||
httpClient.DefaultRequestHeaders.Clear(); | ||
httpClient.DefaultRequestHeaders.Accept.Add( | ||
new MediaTypeWithQualityHeaderValue(Constants.ApiAcceptHeader)); | ||
httpClient.DefaultRequestHeaders.Add(Constants.ApiKeyHeader, _apiKey.Value.DVSAApiKey); | ||
|
||
var request = await httpClient.GetAsync($"{Constants.ApiRootUrl}{Constants.ApiPath}?{Constants.Parameters.Registration}={registration}"); | ||
apiResponse.ReasonPhrase = request.ReasonPhrase; | ||
apiResponse.StatusCode = (int)request.StatusCode; | ||
string responseMessage; | ||
switch (request.StatusCode) | ||
{ | ||
case HttpStatusCode.OK: | ||
errorMessage = $"{Constants.LanguageStrings.Ok} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Information, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.NotFound: | ||
errorMessage = $"{Constants.LanguageStrings.SingleVehicleMotHistory.VehicleNotFound} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Information, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.BadRequest: | ||
errorMessage = $"{Constants.LanguageStrings.SingleVehicleMotHistory.BadRequest} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.Forbidden: | ||
errorMessage = $"{Constants.LanguageStrings.MissingApiKey} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.UnsupportedMediaType: | ||
errorMessage = $"{Constants.LanguageStrings.IncorrectContentType} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.InternalServerError: | ||
errorMessage = $"{Constants.LanguageStrings.ServerError} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.ServiceUnavailable: | ||
errorMessage = $"{Constants.LanguageStrings.ServiceNotAvailable} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
case HttpStatusCode.GatewayTimeout: | ||
errorMessage = $"{Constants.LanguageStrings.GatewayTimeout} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
break; | ||
default: | ||
if ((int)request.StatusCode == 429) | ||
{ | ||
errorMessage = $"{Constants.LanguageStrings.TooManyRequests} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
} | ||
else | ||
{ | ||
errorMessage = $"{request.StatusCode} - {request.ReasonPhrase}"; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
responseMessage = errorMessage; | ||
} | ||
break; | ||
} | ||
var jsonResponse = await request.Content.ReadAsStringAsync(); | ||
if (!string.IsNullOrEmpty(jsonResponse)) | ||
responseMessage = _processApiResponse.ResponseMessage(request.StatusCode); | ||
apiResponse.ResponseMessage = responseMessage; | ||
apiResponse.VehicleDetails = await _processApiResponse.ConvertToObject(request.Content); | ||
|
||
if (!request.IsSuccessStatusCode) | ||
{ | ||
var motTestResponses = JsonConvert.DeserializeObject<List<VehicleDetails>>(jsonResponse); | ||
apiResponse.VehicleDetails = motTestResponses; | ||
_logger.Log(LogLevel.Error, responseMessage); | ||
} | ||
return apiResponse; | ||
} | ||
} | ||
} | ||
|
||
errorMessage = Constants.LanguageStrings.SingleVehicleMotHistory.NullRegistrationException; | ||
_logger.Log(LogLevel.Critical, errorMessage); | ||
apiResponse.ResponseMessage = errorMessage; | ||
return apiResponse; | ||
responseMessage = Constants.LanguageStrings.SingleVehicleMotHistory.NullRegistrationException; | ||
_logger.Log(LogLevel.Error, responseMessage); | ||
apiResponse.ResponseMessage = responseMessage; | ||
return apiResponse; | ||
} | ||
catch (Exception ex) | ||
{ | ||
_logger.Log(LogLevel.Error, ex, ex.Message); | ||
return null; | ||
} | ||
} | ||
|
||
public MotTestResponses GetSingleVehicleMotHistoryById(string id) | ||
public async Task<ApiResponse> GetSingleVehicleMotHistoryById(string id) | ||
{ | ||
throw new NotImplementedException(); | ||
try | ||
{ | ||
var apiResponse = new ApiResponse(); | ||
string responseMessage; | ||
if (!string.IsNullOrEmpty(id)) | ||
{ | ||
using (var httpClient = new HttpClient()) | ||
{ | ||
httpClient.DefaultRequestHeaders.Clear(); | ||
httpClient.DefaultRequestHeaders.Accept.Add( | ||
new MediaTypeWithQualityHeaderValue(Constants.ApiAcceptHeader)); | ||
httpClient.DefaultRequestHeaders.Add(Constants.ApiKeyHeader, _apiKey.Value.DVSAApiKey); | ||
|
||
var request = await httpClient.GetAsync($"{Constants.ApiRootUrl}{Constants.ApiPath}?{Constants.Parameters.Registration}={id}"); | ||
apiResponse.ReasonPhrase = request.ReasonPhrase; | ||
apiResponse.StatusCode = (int)request.StatusCode; | ||
responseMessage = _processApiResponse.ResponseMessage(request.StatusCode); | ||
apiResponse.ResponseMessage = responseMessage; | ||
apiResponse.VehicleDetails = await _processApiResponse.ConvertToObject(request.Content); | ||
|
||
if (!request.IsSuccessStatusCode) | ||
{ | ||
_logger.Log(LogLevel.Error, responseMessage); | ||
} | ||
return apiResponse; | ||
} | ||
} | ||
|
||
responseMessage = Constants.LanguageStrings.SingleVehicleMotHistory.NullRegistrationException; | ||
_logger.Log(LogLevel.Error, responseMessage); | ||
apiResponse.ResponseMessage = responseMessage; | ||
return apiResponse; | ||
} | ||
catch (Exception ex) | ||
{ | ||
_logger.Log(LogLevel.Error, ex, ex.Message); | ||
return null; | ||
} | ||
} | ||
} | ||
} |