[HttpPost] // YOU DON'T FORGET CHANGE A METHOD IN FRONT-END, YOU SHOULD SEND PARENT-ID INSIDE BODY OF REQUEST public async Task <IActionResult> CreateRequirements([FromBody] RequirementCreate requirement) { try { var newRequirement = await repository.Create(requirement); return(Created($"/profiles/{newRequirement.Id}", newRequirement.Id)); } catch (RestException ex) { return(ex.SendStatusCode()); } }
public async Task <Requirement> Create(RequirementCreate requirement) { using var transaction = await db.Database.BeginTransactionAsync(); try { var parentRequirement = await db.Requirements.FirstOrDefaultAsync(r => r.Id == requirement.ParentId); if (parentRequirement == null) { throw new NotFoundException("Requirement not found"); } string profile = null; if (IsGroup(parentRequirement)) { profile = parentRequirement.Profile; parentRequirement.Profile = null; db.Requirements.Update(parentRequirement); await db.SaveChangesAsync(); } else { profile = await File.ReadAllTextAsync(Directory.GetCurrentDirectory() + "/Json/profile.json"); var project = GetRoot(parentRequirement); var json = JsonConvert.DeserializeObject <List <Models.Profile.Profile> >(project.Profile); var profileRepository = new ProfileRepository(json).AddCoeffToI8(); string updateProfile = JsonConvert.SerializeObject(profileRepository); project.Profile = updateProfile; db.Requirements.Update(project); await db.SaveChangesAsync(); } var newRequirement = new Requirement() { Name = requirement.Name, Parent = parentRequirement, Profile = profile }; await db.Requirements.AddAsync(newRequirement); await db.SaveChangesAsync(); await transaction.CommitAsync(); return(newRequirement); } catch (Exception ex) { await transaction.RollbackAsync(); throw new ServerErrorException(ex.Message); } }