コード例 #1
0
        public async Task <ActionResult <MonsterTemplateResponse> > PutAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            [FromRoute] int monsterTemplateId,
            MonsterTemplateRequest request
            )
        {
            try
            {
                var monster = await _monsterTemplateService.EditMonsterTemplateAsync(executionContext, monsterTemplateId, request);

                var result = _mapper.Map <MonsterTemplateResponse>(monster);
                return(new JsonResult(result));
            }
            catch (MonsterSubCategoryNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status400BadRequest, ex);
            }
            catch (MonsterTemplateNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status404NotFound, ex);
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
        }
コード例 #2
0
        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>();
        }
コード例 #3
0
        public void CreateMonsterTemplate_WhenRequestedSubCategoryIdDoesNotExists_ThrowMonsterSubCategoryNotFoundException()
        {
            var request = new MonsterTemplateRequest
            {
                SubCategoryId = 42
            };
            var executionContext = new NaheulbookExecutionContext();

            _unitOfWorkFactory.GetUnitOfWork().MonsterSubCategories.GetAsync(42)
            .Returns((MonsterSubCategory)null);

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

            act.Should().Throw <MonsterSubCategoryNotFoundException>();
        }
コード例 #4
0
        public async Task <ActionResult <MonsterTemplateResponse> > PostAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            MonsterTemplateRequest request
            )
        {
            try
            {
                var createdMonster = await _monsterTemplateService.CreateMonsterTemplateAsync(executionContext, request);

                var result = _mapper.Map <MonsterTemplateResponse>(createdMonster);
                return(new JsonResult(result)
                {
                    StatusCode = StatusCodes.Status201Created
                });
            }
            catch (MonsterSubCategoryNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status400BadRequest, ex);
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
        }
コード例 #5
0
        public async Task <MonsterTemplate> EditMonsterTemplateAsync(NaheulbookExecutionContext executionContext, int monsterTemplateId, 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 monsterTemplate = await uow.MonsterTemplates.GetByIdWithItemsAsync(monsterTemplateId);

                if (monsterTemplate == null)
                {
                    throw new MonsterTemplateNotFoundException(monsterTemplateId);
                }

                var itemTemplates = await uow.ItemTemplates.GetByIdsAsync(request.Inventory.Select(x => x.ItemTemplateId));

                monsterTemplate.Data = JsonConvert.SerializeObject(request.Data);
                monsterTemplate.Name = request.Name;

                monsterTemplate.SubCategoryId = subCategory.Id;
                monsterTemplate.SubCategory   = subCategory;

                monsterTemplate.Items = monsterTemplate.Items.Where(i => request.Inventory.Any(e => e.Id == i.Id)).ToList();
                var newItems = 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
                });

                foreach (var item in newItems)
                {
                    monsterTemplate.Items.Add(item);
                }

                await uow.SaveChangesAsync();

                return((await uow.MonsterTemplates.GetByIdWithItemsAsync(monsterTemplateId)) !);
            }
        }
コード例 #6
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);
            }
        }