示例#1
0
        public async Task <MonsterTemplate> CreateMonsterTemplateAsync(NaheulbookExecutionContext executionContext, MonsterTemplateRequest request)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var subCategory = await uow.MonsterSubCategories.GetAsync(request.SubCategoryId);

                if (subCategory == null)
                {
                    throw new MonsterSubCategoryNotFoundException(request.SubCategoryId);
                }
                var itemTemplates = await uow.ItemTemplates.GetByIdsAsync(request.Inventory.Select(x => x.ItemTemplateId));

                var monsterTemplate = new MonsterTemplate
                {
                    Data        = JsonConvert.SerializeObject(request.Data),
                    Name        = request.Name,
                    SubCategory = subCategory,
                    Items       = request.Inventory.Where(i => !i.Id.HasValue || i.Id == 0).Select(i => new MonsterTemplateInventoryElement
                    {
                        Chance       = i.Chance,
                        ItemTemplate = itemTemplates.First(x => x.Id == i.ItemTemplateId),
                        MaxCount     = i.MaxCount,
                        MinCount     = i.MinCount
                    }).ToList()
                };

                uow.MonsterTemplates.Add(monsterTemplate);

                await uow.SaveChangesAsync();

                return(monsterTemplate);
            }
        }
示例#2
0
        public async Task CreateEffectType_EnsureThatUserIsAnAdmin_BeforeAddingInDatabase()
        {
            var executionContext = new NaheulbookExecutionContext();

            await _effectService.CreateEffectTypeAsync(executionContext, new CreateEffectTypeRequest());

            Received.InOrder(() =>
            {
                _authorizationUtil.EnsureAdminAccessAsync(executionContext);
                _unitOfWork.SaveChangesAsync();
            });
        }
示例#3
0
        public async Task CreateItemTemplate_EnsureThatUserIsAdmin_IfSourceIsOfficial_BeforeAddingInDatabase()
        {
            var executionContext          = new NaheulbookExecutionContext();
            var createItemTemplateRequest = new ItemTemplateRequest {
                Source = "official"
            };

            _authorizationUtil.EnsureAdminAccessAsync(executionContext)
            .Throws(new TestException());

            Func <Task <ItemTemplate> > act = () => _service.CreateItemTemplateAsync(executionContext, createItemTemplateRequest);

            act.Should().Throw <TestException>();
            await _unitOfWorkFactory.GetUnitOfWork().DidNotReceive().SaveChangesAsync();
        }
        public async Task <EffectType> CreateEffectTypeAsync(NaheulbookExecutionContext executionContext, CreateEffectTypeRequest request)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            var effectType = new EffectType
            {
                Name = request.Name
            };

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                uow.EffectTypes.Add(effectType);
                await uow.SaveChangesAsync();
            }

            return(effectType);
        }
示例#5
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);
            }
        }
        public void CreateMonsterTemplate_EnsureAdminAccess()
        {
            var request          = new MonsterTemplateRequest();
            var executionContext = new NaheulbookExecutionContext();

            _authorizationUtil.EnsureAdminAccessAsync(executionContext)
            .Throws(new TestException());

            Func <Task> act = () => _service.CreateMonsterTemplateAsync(executionContext, request);

            act.Should().Throw <TestException>();
        }
        public async Task CreateItemTemplateSection_EnsureThatUserIsAnAdmin_BeforeAddingInDatabase()
        {
            var executionContext = new NaheulbookExecutionContext();

            await _service.CreateItemTemplateSectionAsync(executionContext, new CreateItemTemplateSectionRequest());

            Received.InOrder(() =>
            {
                _authorizationUtil.EnsureAdminAccessAsync(executionContext);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });
        }
示例#8
0
        public async Task <MonsterType> CreateMonsterTypeAsync(
            NaheulbookExecutionContext executionContext,
            CreateMonsterTypeRequest request
            )
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var monsterType = new MonsterType
                {
                    Name          = request.Name,
                    SubCategories = new List <MonsterSubCategory>()
                };

                uow.MonsterTypes.Add(monsterType);
                await uow.SaveChangesAsync();

                return(monsterType);
            }
        }
示例#9
0
        public async Task <ItemTemplate> CreateItemTemplateAsync(NaheulbookExecutionContext executionContext, ItemTemplateRequest request)
        {
            if (request.Source == "official")
            {
                await _authorizationUtil.EnsureAdminAccessAsync(executionContext);
            }

            var itemTemplate = _mapper.Map <ItemTemplate>(request);

            if (request.Source != "official")
            {
                itemTemplate.SourceUserId = executionContext.UserId;
            }

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                uow.ItemTemplates.Add(itemTemplate);
                await uow.SaveChangesAsync();

                itemTemplate = (await uow.ItemTemplates.GetWithModifiersWithRequirementsWithSkillsWithSkillModifiersWithSlotsWithUnSkillsAsync(itemTemplate.Id)) !;
            }

            return(itemTemplate);
        }
示例#10
0
        public async Task <ItemTemplateSection> CreateItemTemplateSectionAsync(NaheulbookExecutionContext executionContext, CreateItemTemplateSectionRequest request)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            var itemTemplateSection = new ItemTemplateSection
            {
                Name          = request.Name,
                Special       = string.Join(",", request.Specials),
                Note          = request.Note,
                Icon          = request.Icon,
                SubCategories = new List <ItemTemplateSubCategory>()
            };

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                uow.ItemTemplateSections.Add(itemTemplateSection);
                await uow.SaveChangesAsync();
            }

            return(itemTemplateSection);
        }
示例#11
0
        public async Task <ItemTemplateSubCategory> CreateItemTemplateSubCategoryAsync(NaheulbookExecutionContext executionContext, CreateItemTemplateSubCategoryRequest request)
        {
            await _authorizationUtil.EnsureAdminAccessAsync(executionContext);

            var itemTemplateSubCategory = new ItemTemplateSubCategory()
            {
                SectionId   = request.SectionId,
                Name        = request.Name,
                Note        = request.Note,
                Description = request.Description,
                TechName    = request.TechName
            };

            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                uow.ItemTemplateSubCategories.Add(itemTemplateSubCategory);
                await uow.SaveChangesAsync();
            }

            return(itemTemplateSubCategory);
        }