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); } }
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 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>(); }
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); } }
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)) !); } }
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); } }