public async Task <IHttpActionResult> GetAbility(int id) { Ability ability = await db.Abilities.Include(a => a.OriginalAbilityOwner).FirstOrDefaultAsync(a => a.AbilityId == id); if (ability == null) { return(NotFound()); } var dto = AbilityDataTransferObject.CreateAbilityDataTransferObject(ability); return(Ok(dto)); }
public async Task <IHttpActionResult> PostAbility(AbilityDataTransferObject ability) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var modelAbility = ability.ToAbilityModel(); if (ability.OriginalAbilityOwnerId == null || ability.OriginalAbilityOwnerId == 0) {//if passed in ability has no originalhero set. modelAbility.OriginalAbilityOwner = null; } else { //there was a passed in originalabilityowner //lookup hero id in database var dataSourcePassedInAbilityOriginalHero = await db.Heroes.FirstOrDefaultAsync(h => h.HeroId == ability.OriginalAbilityOwnerId); if (dataSourcePassedInAbilityOriginalHero != null) { modelAbility.OriginalAbilityOwner = dataSourcePassedInAbilityOriginalHero; } else { return(BadRequest("An original ability owner with that ID could not be found.")); } } db.Abilities.Add(modelAbility); try { await db.SaveChangesAsync(); } catch (DbUpdateException) { if (AbilityExists(ability.AbilityId)) { return(Conflict()); } else { throw; } } return(CreatedAtRoute("DefaultApi", new { id = ability.AbilityId }, ability)); }
public async Task <IHttpActionResult> PutAbility(int id, AbilityDataTransferObject ability) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != ability.AbilityId) { return(BadRequest()); } var dataSourceAbility = await db.Abilities.Include(a => a.OriginalAbilityOwner).FirstOrDefaultAsync(a => a.AbilityId == id); if (dataSourceAbility == null) { return(NotFound()); } var attachedEntry = db.Entry(dataSourceAbility); attachedEntry.CurrentValues.SetValues(ability); //copy values from dto to data source object. if (ability.OriginalAbilityOwnerId == null || ability.OriginalAbilityOwnerId == 0) {//if passed in ability has no originalhero set. dataSourceAbility.OriginalAbilityOwner = null; } else { //there was a passed in originalabilityowner //check if the id of passed in ability is the same as one already in db var needToUpdate = dataSourceAbility.OriginalAbilityOwner == null ? true : dataSourceAbility.OriginalAbilityOwner.HeroId == ability.OriginalAbilityOwnerId; var dataSourcePassedInAbilityOriginalHero = await db.Heroes.FirstOrDefaultAsync(h => h.HeroId == ability.OriginalAbilityOwnerId); if (dataSourcePassedInAbilityOriginalHero != null) { dataSourceAbility.OriginalAbilityOwner = dataSourcePassedInAbilityOriginalHero; } else { return(BadRequest("An original ability owner with that ID could not be found.")); } } db.Entry(dataSourceAbility).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!AbilityExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }