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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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);
        }