コード例 #1
0
        public async Task <Npc> CreateNpcAsync(NaheulbookExecutionContext executionContext, int groupId, NpcRequest request)
        {
            using var uow = _unitOfWorkFactory.CreateUnitOfWork();

            var group = await uow.Groups.GetAsync(groupId);

            if (group == null)
            {
                throw new GroupNotFoundException(groupId);
            }

            _authorizationUtil.EnsureIsGroupOwner(executionContext, group);

            var npc = new Npc
            {
                GroupId = groupId,
                Name    = request.Name,
                Data    = _jsonUtil.SerializeNonNull(request.Data)
            };

            uow.Npcs.Add(npc);

            await uow.SaveChangesAsync();

            return(npc);
        }
コード例 #2
0
        public void CreateItemFromRequest_ShouldSerializeJsonData_AndSetItemTemplateId()
        {
            var itemData     = new ItemData();
            var jsonItemData = "some-json";
            var itemTemplate = CreateItemTemplate();

            _jsonUtil.DeserializeOrCreate <PartialItemTemplateData>(Arg.Any <string>())
            .Returns(new PartialItemTemplateData());
            _jsonUtil.SerializeNonNull(itemData)
            .Returns(jsonItemData);

            var actualItem = _factory.CreateItem(ItemOwnerType.Character, 10, itemTemplate, itemData);

            actualItem.ItemTemplateId.Should().Be(itemTemplate.Id);
            actualItem.Data.Should().BeEquivalentTo(jsonItemData);
        }
コード例 #3
0
        private Item GivenAnItem(ItemData itemData)
        {
            _jsonUtil.DeserializeOrCreate <ItemData>(SomeItemDataJson)
            .Returns(itemData);
            _jsonUtil.SerializeNonNull(itemData)
            .Returns(SomeUpdatedJsonData);

            return(new Item
            {
                Data = SomeItemDataJson
            });
        }
コード例 #4
0
        public Item CreateItem(ItemTemplate itemTemplate, ItemData itemData)
        {
            var itemTemplateData = _jsonUtil.DeserializeOrCreate <PartialItemTemplateData>(itemTemplate.Data);

            if (itemTemplateData.Charge.HasValue)
            {
                itemData.Charge = itemTemplateData.Charge.Value;
            }
            if (itemTemplateData.Lifetime != null)
            {
                itemData.Lifetime = itemTemplateData.Lifetime;
            }
            if (itemTemplateData.Quantifiable == true && itemData.Quantity == null)
            {
                itemData.Quantity = 1;
            }
            itemData.Icon ??= itemTemplateData.Icon;
            if (string.IsNullOrEmpty(itemData.Name))
            {
                if (itemData.NotIdentified == true && !string.IsNullOrEmpty(itemTemplateData.NotIdentifiedName))
                {
                    itemData.Name = itemTemplateData.NotIdentifiedName;
                }
                else
                {
                    itemData.Name = itemTemplate.Name;
                }
            }

            var item = new Item
            {
                Data           = _jsonUtil.SerializeNonNull(itemData),
                ItemTemplateId = itemTemplate.Id
            };

            return(item);
        }
コード例 #5
0
        public async Task UpdateItemDataAsync_ShouldUpdateItemDataFieldAndSaveDb()
        {
            const int itemId   = 4;
            var       itemData = new ItemData();
            var       item     = GivenAnItem(new ItemData());

            _jsonUtil.SerializeNonNull(itemData)
            .Returns("some-new-item-data-json");
            _unitOfWorkFactory.GetUnitOfWork().Items.GetWithOwnerAsync(itemId)
            .Returns(item);
            _unitOfWorkFactory.GetUnitOfWork().When(x => x.SaveChangesAsync())
            .Do(_ => _itemDataUtil.Received(1).SetItemData(item, itemData));

            var actualItem = await _service.UpdateItemDataAsync(new NaheulbookExecutionContext(), itemId, itemData);

            actualItem.Should().BeSameAs(item);
            await _unitOfWorkFactory.GetUnitOfWork().Received(1).SaveChangesAsync();
        }
コード例 #6
0
        public void ApplyChangesAndNotify(Group group, PatchGroupConfigRequest request, INotificationSession notificationSession)
        {
            var config = _jsonUtil.DeserializeOrCreate <GroupConfig>(group.Config);

            if (request.AllowPlayersToAddObject.HasValue)
            {
                config.AllowPlayersToAddObject = request.AllowPlayersToAddObject.Value;
            }
            if (request.AllowPlayersToSeeSkillGmDetails.HasValue)
            {
                config.AllowPlayersToSeeSkillGmDetails = request.AllowPlayersToSeeSkillGmDetails.Value;
            }
            if (request.AllowPlayersToSeeGemPriceWhenIdentified.HasValue)
            {
                config.AllowPlayersToSeeGemPriceWhenIdentified = request.AllowPlayersToSeeGemPriceWhenIdentified.Value;
            }

            group.Config = _jsonUtil.SerializeNonNull(config);

            notificationSession.NotifyGroupChangeConfig(group.Id, config);
        }
コード例 #7
0
        public async Task <Map> CreateMapAsync(NaheulbookExecutionContext executionContext, CreateMapRequest request, Stream imageStream)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var mapData = new MapData
                {
                    IsGm         = request.Data.IsGm,
                    PixelPerUnit = request.Data.PixelPerUnit,
                    UnitName     = request.Data.UnitName,
                    Attribution  = request.Data.Attribution
                                   .Select(x => new MapData.MapAttribution {
                        Name = x.Name, Url = x.Url
                    })
                                   .ToList()
                };
                var map = new Map
                {
                    Name      = request.Name,
                    Data      = _jsonUtil.SerializeNonNull(mapData),
                    ImageData = "{}"
                };

                uow.Maps.Add(map);
                await uow.SaveChangesAsync();

                map.Data = _jsonUtil.SerializeNonNull(mapData);

                try
                {
                    var mapImageData = _mapImageUtil.SplitMapImage(imageStream, map.Id);
                    map.ImageData = _jsonUtil.SerializeNonNull(mapImageData);
                }
                catch (Exception)
                {
                    uow.Maps.Remove(map);
                }

                await uow.SaveChangesAsync();

                return(map);
            }
        }
コード例 #8
0
 public void SetItemData(Item item, IReadOnlyItemData itemData)
 {
     item.Data = _jsonUtil.SerializeNonNull(itemData);
 }