public async Task <HttpResponseMessage> FinishRoomCreation(FinishRoomSettings.Root request)
        {
            request.ipAddress = GetUser_IP();
            Result result = await dal.FinishRoomCreation(request);

            return(ApiTools.CreateResponse(result, Request));
        }
Esempio n. 2
0
        internal async Task <Result> FinishRoomCreation(FinishRoomSettings.Root request)
        {
            try
            {
                Room room = context.Rooms.FirstOrDefault(a => a.Code == request.roomCode);
                if (room == null)
                {
                    return(new Result(ResultStatus.ERROR, "Room not found!"));
                }

                if (room.Pin != request.pin)
                {
                    return(new Result(ResultStatus.ERROR, "Unautorized"));
                }

                if (request.categories.Sum(a => a.maxValue) != 100)
                {
                    return(new Result(ResultStatus.ERROR, "Review types sum has to be 100"));
                }

                if (request.categories.Any(a => a.isNew && (!string.IsNullOrEmpty(a.name) || !string.IsNullOrEmpty(a.abbr))))
                {
                    return(new Result(ResultStatus.ERROR, "Your added categories are missing name or abbriviation"));
                }


                List <Beverage> beverages = GetBeveragesByIds(request.beers.Select(a => a.id));

                TasterBusiness business = new TasterBusiness();

                int index = 0;
                foreach (var beverage in request.beers)
                {
                    if (!beverages.Any(a => a.Id == beverage.id))
                    {
                        await business.AddBeer(beverage.id);
                    }

                    room.Room2Beverages.Add(new Room2Beverage()
                    {
                        BeverageId   = beverage.id,
                        DisplayOrder = index,
                        FinalScore   = 0,
                        IsLocked     = true
                    });

                    index++;
                }

                List <ReviewType> reviewtypes = context.ReviewTypes.Where(a => request.categories.Select(b => b.id).Contains(a.Id)).ToList();

                index = 0;
                foreach (var type in request.categories)
                {
                    if (!reviewtypes.Any(a => a.Id == type.id))
                    {
                        AddReviewType(new AddNewReviewType()
                        {
                            name      = type.name,
                            ipAddress = request.ipAddress,
                            abbr      = type.abbr
                        });
                        reviewtypes.Add(context.ReviewTypes.FirstOrDefault(a => a.Name == type.name));
                    }

                    room.Room2ReviewTypes.Add(new Room2ReviewType
                    {
                        DisplayOrder = index,
                        MaxValue     = type.maxValue,
                        ReviewType   = reviewtypes.FirstOrDefault(a => a.Name == type.name)
                    });
                    index++;
                }

                context.SubmitChanges();
                return(new Result(ResultStatus.SUCCESS, "Room creation finished"));
            }
            catch (Exception ex)
            {
                var ravenClient = new RavenClient("https://[email protected]/5524484");
                ravenClient.Capture(new SentryEvent(ex));
                return(new Result(ResultStatus.ERROR, ex.Message));
            }
        }