using System; using System.Collections.Generic; using Amazon.Lambda.Core; using Amazon.Lambda.APIGatewayEvents; using Newtonsoft.Json; using MySqlConnector; using System.Data; using classes; using System.Linq; using System.Net; using Model.ResponseModel; using System.Threading.Tasks; using System.Net.Http; namespace PMF { public class QueryInfringement: Pmfbase { public async Task QueryExternalInfringement(APIGatewayProxyRequest request, ILambdaContext context) { string statement = "eNatis::QueryExternalInfringement"; string userId = ""; APIGatewayProxyResponse response; List responseList = new List(); MySqlDataReader _reader = null; try { string validationMessage = string.Empty; if (!Helper.IsRequestEmpty(request)) { var validRequest = Helper.ValidateRequestParameters(ref validationMessage, request.QueryStringParameters, "noticeNumber", "Id"); if (validRequest) { var noticeNumber = request.QueryStringParameters["noticeNumber"]; userId = request.QueryStringParameters["Id"]; var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = Helper.ServerCertificateCustomValidation }; var client = new HttpClient(handler) { BaseAddress = new Uri(baseUrl) }; var eNatisResponse = await client.GetAsync($"infringement/queryinfringement?InfringementNoticeNumber={noticeNumber}"); var body = await eNatisResponse.Content.ReadAsStringAsync(); if (_con.State == ConnectionState.Closed) _con.Open(); if (eNatisResponse.StatusCode == HttpStatusCode.OK) { var responseBody = JsonConvert.DeserializeObject>(body); responseBody = responseBody.Where(f => f.payment.amount != 0).ToList(); foreach (var item in responseBody) { var paidLocalStatus = PaymentChecker.CheckLocalPaymentStatus(item.infringementNoticeNumber, _con); responseList.Add(new ENatisQueryInfrigerResponseStatusModel { infringementNoticeNumber = item.infringementNoticeNumber, date = item.date, time = item.time, location = item.location, vehicle = item.vehicle, charge = item.charge, feesList = item.feesList, payment = item.payment, customerPaymentAllowed = paidLocalStatus }); } if(responseList.Count==0) return HttpService.CreateResponse(200, payload: "No Fines Found"); response = HttpService.CreateResponse(200, payload: responseList); } else { var error = JsonConvert.DeserializeObject(body); return HttpService.CreateResponse(error.statusCode, payload: error.message); } } else { response = HttpService.CreateResponse(400, payload: $"{validationMessage}"); } } else { _logger.LogMessage(context, $"Processing request failed invalid request"); response = HttpService.CreateResponse(400, payload: "No parameters provided"); } _logger.WriteLog(userId, statement, response.Body, "eNATiS"); return response; } catch (Exception ex) { _logger.WriteLog(userId, statement, ex.Message, "eNATiS"); return HttpService.CreateResponse(500, payload: ex.Message); } finally { if (_reader != null) _reader.Close(); if (_con != null || _con.State == ConnectionState.Open) _con.Close(); } } } }