public static async Task <HttpResponseMessage> FreeBike(Guid requestId, string bikeId, HttpRequest originRequest) { LogUtility.LogWithContext(requestId, "Freeing BikeID " + bikeId); string freeBikeUrl = $"http://{_bikesService}/api/bikes/{bikeId}/clear"; var response = await HttpHelper.PatchAsync(requestId, freeBikeUrl, null, originRequest); return(response); }
/// <summary> /// Updates ONLY the State field of the reservation in the DB /// </summary> /// <param name="reservationDetails"></param> /// <returns></returns> public static async Task <UpdateResult> UpdateReservationStateAndEndTime(Guid requestId, Reservation reservationDetails) { LogUtility.LogWithContext(requestId, "Updating reservationID " + reservationDetails.ReservationId); var db = _mongoClient.GetDatabase(_database); var collection = db.GetCollection <Reservation>(_collection).WithWriteConcern(new WriteConcern("majority")); var filter = Builders <Reservation> .Filter.Eq("reservationId", reservationDetails.ReservationId); var update = Builders <Reservation> .Update.Set("state", reservationDetails.State).Set("endTime", reservationDetails.EndTime); var result = await collection.UpdateOneAsync(filter, update); return(result); }
private static async Task <HttpResponseMessage> SendAndLogAsync(Guid requestId, HttpRequestMessage request, HttpRequest originRequest) { Stopwatch stopWatch = Stopwatch.StartNew(); request.Headers.Add(Constants.RequestIdHeaderName, requestId.ToString()); if (originRequest.Headers.ContainsKey(Constants.RouteAsHeaderName)) { request.Headers.Add(Constants.RouteAsHeaderName, originRequest.Headers[Constants.RouteAsHeaderName].ToArray()); } var response = await _httpClient.SendAsync(request); LogUtility.LogWithContext(requestId, "Dependency: {0} {1} - {2} - {3}ms", request.Method.Method, request.RequestUri.ToString(), response.StatusCode.ToString(), stopWatch.ElapsedMilliseconds.ToString()); return(response); }
public static async Task <Bike> GetBike(Guid requestId, string bikeId, HttpRequest originRequest) { LogUtility.LogWithContext(requestId, "Getting BikeID " + bikeId); string getBikeUrl = $"http://{_bikesService}/api/bikes/{bikeId}"; var response = await HttpHelper.GetAsync(requestId, getBikeUrl, originRequest); if (response.IsSuccessStatusCode) { var bikeDetails = JsonConvert.DeserializeObject <Bike>(await response.Content.ReadAsStringAsync()); return(bikeDetails); } return(null); }
public static async Task <BillingResponse> CreateInvoice(Guid requestId, Reservation reservationDetails, HttpRequest originRequest) { LogUtility.LogWithContext(requestId, "Creating an invoice"); var bikeDetails = await BikesHelper.GetBike(requestId, reservationDetails.BikeId, originRequest); var startTime = DateTime.ParseExact(reservationDetails.StartTime, DateTimeFormat, null); var endTime = DateTime.ParseExact(reservationDetails.EndTime, DateTimeFormat, null); double amount = 0; if (endTime > startTime) { var totalHours = Math.Ceiling((endTime - startTime).TotalHours); amount = totalHours * bikeDetails.HourlyCost; } var createInvoiceUrl = $"http://{_billingService}/api/invoice"; var invoice = new Invoice { Amount = (float)amount, BikeId = reservationDetails.BikeId, CustomerId = reservationDetails.UserId, VendorId = bikeDetails.OwnerUserId, ReservationId = reservationDetails.ReservationId }; var response = await HttpHelper.PostAsync(requestId, createInvoiceUrl, new StringContent( JsonConvert.SerializeObject(invoice), Encoding.UTF8, "application/json"), originRequest); var result = new BillingResponse() { HttpResponse = response }; if (response.IsSuccessStatusCode) { var obj = JObject.Parse(await response.Content.ReadAsStringAsync()); result.InvoiceId = obj["id"].Value <string>(); } return(result); }