Exemple #1
0
        public DougResponse Give(Command command)
        {
            var target        = _userRepository.GetUser(command.GetTargetUserId());
            var user          = _userRepository.GetUser(command.UserId);
            var position      = int.Parse(command.GetArgumentAt(1));
            var inventoryItem = user.InventoryItems.SingleOrDefault(itm => itm.InventoryPosition == position);

            if (inventoryItem == null)
            {
                return(new DougResponse(string.Format(DougMessages.NoItemInSlot, position)));
            }

            if (!inventoryItem.Item.IsTradable)
            {
                return(new DougResponse(DougMessages.ItemNotTradable));
            }

            _inventoryRepository.RemoveItem(user, position);

            _inventoryRepository.AddItem(target, inventoryItem.Item);

            var message = string.Format(DougMessages.UserGaveItem, _userService.Mention(user), inventoryItem.Item.Name, _userService.Mention(target));

            _slack.BroadcastMessage(message, command.ChannelId);

            return(new DougResponse());
        }
        public async Task <AddItemResponse> AddItem(AddItemRequest request)
        {
            try
            {
                Validate(request.Item);
                var itemToBeAdded = new Item()
                {
                    Name        = request.Item.Name,
                    Description = request.Item.Description,
                    Price       = Convert.ToDecimal(request.Item.Price)
                };
                var addedItemId = await _inventoryRepository.AddItem(itemToBeAdded);

                return(new AddItemResponse()
                {
                    AddedItemId = addedItemId
                });
            }
            catch (Exception ex)
            {
                return(new AddItemResponse()
                {
                    ErrorMessage = ex.Message
                });
            }
        }
        public async Task <IHttpActionResult> Post(Item model)
        {
            try
            {
                if (await _repository.GetItemAsync(model.ItemId) != null)
                {
                    ModelState.AddModelError("ItemId", "Id in use");
                }

                if (ModelState.IsValid)
                {
                    _repository.AddItem(model);

                    if (await _repository.SaveChangesAsync())
                    {
                        return(CreatedAtRoute("GetItem", new { id = model.ItemId }, model));
                    }
                }
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
            return(BadRequest(ModelState));
        }
        public InventoryDto AddItem(InventoryDto item)
        {
            item.AddedDate = DateTime.Parse(item.AddedDate.ToString());
            item.UpdatedDate = DateTime.Parse(item.UpdatedDate.ToString());

            var response = _inventoryRepository.AddItem(mapper.Map<Inventory>(item));
            item.Id = response.Id;
            return item;
        }
Exemple #5
0
        public void EndLottery()
        {
            var users = _userRepository.GetUsers();

            var winner = _randomService.DrawLotteryWinner(users);

            _userRepository.ClearTickets();

            _inventoryRepository.AddItem(winner, new Item {
                Id = "lottery_box"
            });

            _slack.BroadcastMessage(string.Format(DougMessages.LotteryWinner, _userService.Mention(winner)), General);
        }
Exemple #6
0
        public string Give(User user, User target, int itemPosition, string channel)
        {
            var inventoryItem = user.InventoryItems.SingleOrDefault(itm => itm.InventoryPosition == itemPosition);

            if (inventoryItem == null)
            {
                return(string.Format(DougMessages.NoItemInSlot, itemPosition));
            }

            if (!inventoryItem.Item.IsTradable)
            {
                return(DougMessages.ItemNotTradable);
            }

            _inventoryRepository.RemoveItem(user, itemPosition);

            _inventoryRepository.AddItem(target, inventoryItem.Item);

            var message = string.Format(DougMessages.UserGaveItem, _userService.Mention(user), inventoryItem.Item.GetDisplayName(), _userService.Mention(target));

            _slack.BroadcastMessage(message, channel);

            return(string.Empty);
        }
Exemple #7
0
        public void Buy(Interaction interaction)
        {
            var user = _userRepository.GetUser(interaction.UserId);
            var item = _itemFactory.CreateItem(interaction.Value);

            if (!user.HasEnoughCreditsForAmount(item.Price))
            {
                var message = user.NotEnoughCreditsForAmountResponse(item.Price);
                _slack.SendEphemeralMessage(message, user.Id, interaction.ChannelId);
                return;
            }

            _userRepository.RemoveCredits(user.Id, item.Price);

            _inventoryRepository.AddItem(user, item.Id);
        }
Exemple #8
0
        public void AddItem(int playerId, int itemId, int count = 1)
        {
            var inventory = _inventoryRepository.GetInventory(playerId);
            var freeSlot  = GetFreeInventorySlot(inventory);

            if (freeSlot > -1)
            {
                _inventoryRepository.AddItem(playerId, itemId, count, freeSlot);
            }

            var player = _userRepository.GetPlayerById(playerId);

            if (player != null)
            {
                _inventorySender.SendInventory(player);
            }
        }
Exemple #9
0
        public DougResponse Craft(List <InventoryItem> items, User user)
        {
            var recipeId = items.OrderBy(item => item.ItemId).Aggregate(string.Empty, (acc, elem) => acc + elem.ItemId);
            var recipe   = _recipeRepository.GetRecipeById(recipeId);

            if (recipe == null)
            {
                return(new DougResponse(DougMessages.FailedCrafting));
            }

            var result = _itemRepository.GetItem(recipe.Result);

            _inventoryRepository.RemoveItems(user, items.Select(item => item.InventoryPosition));

            _inventoryRepository.AddItem(user, result);

            return(new DougResponse(string.Format(DougMessages.SuccessCrafting, result.GetDisplayName())));
        }
Exemple #10
0
        public DougResponse Buy(User user, string itemId)
        {
            var item = _itemRepository.GetItem(itemId);

            var price = _governmentService.GetPriceWithTaxes(item);

            if (!user.HasEnoughCreditsForAmount(price))
            {
                return(new DougResponse(user.NotEnoughCreditsForAmountResponse(price)));
            }

            _creditsRepository.RemoveCredits(user.Id, price);

            _inventoryRepository.AddItem(user, item);

            _governmentService.CollectSalesTaxes(item);

            return(new DougResponse());
        }
Exemple #11
0
        public void Revolution(string channel)
        {
            var government = _governmentRepository.GetGovernment();
            var oldRuler   = _userRepository.GetUser(government.Ruler);
            var newRuler   = _userRepository.GetUser(government.RevolutionLeader);
            var crown      = _itemRepository.GetItem(CrownId);

            if (oldRuler.Id == newRuler.Id)
            {
                return;
            }

            if (government.IsInRevolutionCooldown())
            {
                return;
            }

            if (oldRuler.Loadout.HeadId == CrownId)
            {
                _equipmentRepository.UnequipItem(oldRuler, EquipmentSlot.Head);
            }
            else
            {
                var crownItem = oldRuler.InventoryItems.SingleOrDefault(inventoryItem => inventoryItem.Item.Id == CrownId);

                if (crownItem != null)
                {
                    _inventoryRepository.RemoveItem(oldRuler, crownItem.InventoryPosition);
                }
            }

            _inventoryRepository.AddItem(newRuler, crown);

            _slack.BroadcastMessage(string.Format(DougMessages.RevolutionSucceeded, _userService.Mention(oldRuler), _userService.Mention(newRuler)), channel);

            _userService.KillUser(oldRuler, channel);

            _governmentRepository.Revolution();
        }
        public IActionResult Post(InventoryItemRPC item)
        {
            //Quantity in stock

            //It isn't enough to only do validation client side, for data integrity it must be done server side as well.
            //TODO - Add Post, business logic must be enforced server side as well.
            //TODO - Add server side validation
            var vehicle = new Vehicle {
                Make        = (Make)Enum.Parse(typeof(Make), item.Make, true),
                Model       = item.Model,
                Year        = item.Year,
                VehicleType = (VehicleType)Enum.Parse(typeof(VehicleType), item.Type, true),
                RetailPrice = item.RetailPrice,
            };

            //Parse Features
            var features = new List <Feature>();

            if (!string.IsNullOrEmpty(item.Fuel))
            {
                var fuel = FeatureRepository.List.FirstOrDefault(feature => feature.Type == FeatureType.Fuel && feature.Description.Equals(item.Fuel, StringComparison.InvariantCultureIgnoreCase));
                if (fuel != null)
                {
                    features.Add(fuel);
                }
            }

            if (!string.IsNullOrEmpty(item.Doors))
            {
                var doors = FeatureRepository.List.FirstOrDefault(feature => feature.Type == FeatureType.Doors && feature.Description.Equals(item.Doors, StringComparison.InvariantCultureIgnoreCase));
                if (doors != null)
                {
                    features.Add(doors);
                }
            }

            if (!string.IsNullOrEmpty(item.Interior))
            {
                var interior = FeatureRepository.List.FirstOrDefault(feature => feature.Type == FeatureType.Interior && feature.Description.Equals(item.Interior, StringComparison.InvariantCultureIgnoreCase));
                if (interior != null)
                {
                    features.Add(interior);
                }
            }

            if (!string.IsNullOrEmpty(item.Transmission))
            {
                var transmission = FeatureRepository.List.FirstOrDefault(feature => feature.Type == FeatureType.Transmission && feature.Description.Equals(item.Transmission, StringComparison.InvariantCultureIgnoreCase));
                if (transmission != null)
                {
                    features.Add(transmission);
                }
            }

            var newItem = new InventoryItem
            {
                Markup   = item.Markup,
                Vehicle  = vehicle,
                Features = features
            };

            //Assign unique stock number...
            newItem.StockNumber = StockNumberGenerator.GenerateStockNumber();

            InventoryRepository.AddItem(newItem);

            return(Ok());
        }