public async Task <ActionResult <ModuleTestModel> > UpdateTest([FromBody] ModuleTestModel test, long moduleId) { if (test.ModuleId != moduleId) { return(BadRequest()); } test.Questions?.ForEach(q => { if (q.Id == 0) { q.PopulateServiceFields(Request.HttpContext); } q.AnswerOptions?.ForEach(a => { if (a.Id == 0) { a.PopulateServiceFields(Request.HttpContext); } }); }); return(Ok(await _dbAccess.UpdateModuleTest(test))); }
public async Task <ModuleTestModel> CreateModuleTest(ModuleTestModel model) { var track = await _portalContext.ModuleTests.AddAsync(Mapper.Map <ModuleTestEntity>(model)); await _portalContext.SaveChangesAsync(); return(Mapper.Map <ModuleTestModel>(track.Entity)); }
public async Task <ActionResult <ModuleTestModel> > CreateTest([FromBody] ModuleTestModel test, long moduleId) { if (test == null || test.ModuleId != moduleId) { return(BadRequest()); } test.PopulateServiceFields(Request.HttpContext); return(Ok(await _dbAccess.CreateModuleTest(test))); }
public async Task <ModuleTestModel> UpdateModuleTest(ModuleTestModel model) { using (TransactionScope ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { var original = await GetModuleTestNoTrack(model.Id); var current = Mapper.Map <ModuleTestEntity>(model); var testTrack = _portalContext.ModuleTests.Attach(current); testTrack.State = EntityState.Modified; if (current.Questions != null) { var questionsToInsert = current.Questions.Where(q => q.Id == 0).ToList(); questionsToInsert.ForEach(q => { q.ModuleTest = testTrack.Entity; }); if (original.Questions != null) { var origIds = original.Questions.Select(q => q.Id).ToList(); var entIds = current.Questions.Select(q => q.Id).ToList(); var toDelete = origIds.Except(entIds); var toUpdate = origIds.Intersect(entIds); foreach (var id in toDelete) { var t = _portalContext.Questions.Attach(original.Questions.First(q => q.Id == id)); t.State = EntityState.Deleted; } await UpsertQuestions(current.Questions.Where(q => toUpdate.Contains(q.Id)).ToList(), original.Questions); } await UpsertQuestions(questionsToInsert, null); } await _portalContext.SaveChangesAsync(); ts.Complete(); } return(Mapper.Map <ModuleTestModel>(await GetModuleTest(model.Id))); }