public async Task <IHttpActionResult> RegisterFlightForUser(string username, BookFlightModel model)
        {
            var authHeaderValue = GetAuthHeaderValue(Request.Headers);

            if (string.IsNullOrEmpty(authHeaderValue))
            {
                return(Content(HttpStatusCode.Unauthorized, string.Empty));
            }
            if (!VerifyToken(authHeaderValue, username))
            {
                return(Content(HttpStatusCode.Forbidden, string.Empty));
            }

            if (model == null || !model.Flights.Any())
            {
                return(Content(HttpStatusCode.BadRequest, string.Empty));
            }

            foreach (var flight in model.Flights)
            {
                flight.BookedOn = "try-cb-dotnet";
            }

            var userKey      = CreateUserKey(username);
            var userDocument = await _bucket.GetDocumentAsync <User>(userKey);

            if (!userDocument.Success)
            {
                if (userDocument.Status == ResponseStatus.KeyNotFound)
                {
                    return(Content(HttpStatusCode.Forbidden, string.Empty));
                }
                return(Content(HttpStatusCode.InternalServerError, new Error(userDocument.Message)));
            }

            if (userDocument.Content.Flights == null)
            {
                userDocument.Content.Flights = new List <Flight>(model.Flights);
            }
            else
            {
                userDocument.Content.Flights.AddRange(model.Flights);
            }

            var result = await _bucket.ReplaceAsync(userKey, userDocument.Content);

            if (!result.Success)
            {
                return(Content(HttpStatusCode.InternalServerError, result.Message));
            }

            var data = new
            {
                added = model.Flights
            };

            return(Content(HttpStatusCode.Accepted, new Result(data)));
        }
Esempio n. 2
0
        public async Task <IHttpActionResult> BookFlights(BookFlightModel model)
        {
            var result = await MediatR.SendAsync(model);

            return(ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, result)));
        }