コード例 #1
0
        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)));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        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)));
        }