public async Task <ActionResponse <ExamCommissionDto> > Insert(ExamCommissionDto entityDto)
        {
            try
            {
                List <UserExamCommissionDto> commissionMembers = new List <UserExamCommissionDto>(entityDto.CommissionMembers);
                var entityToAdd = mapper.Map <ExamCommissionDto, ExamCommission>(entityDto);
                unitOfWork.GetGenericRepository <ExamCommission>().Add(entityToAdd);
                unitOfWork.Save();
                mapper.Map(entityToAdd, entityDto);
                entityDto.CommissionMembers = new List <UserExamCommissionDto>(commissionMembers);
                if ((await ModifyExamTeachers(entityDto)).IsNotSuccess(out ActionResponse <ExamCommissionDto> actionResponse, out entityDto))
                {
                    return(actionResponse);
                }

                if ((await GetById(entityToAdd.Id)).IsNotSuccess(out actionResponse, out entityDto))
                {
                    return(actionResponse);
                }

                return(await ActionResponse <ExamCommissionDto> .ReturnSuccess(entityDto));
            }
            catch (Exception)
            {
                return(await ActionResponse <ExamCommissionDto> .ReturnError("Greška prilikom unosa ispitne komisije."));
            }
        }
        public async Task <ActionResponse <ExamCommissionDto> > Update(ExamCommissionDto entityDto)
        {
            try
            {
                var entityToUpdate = mapper.Map <ExamCommissionDto, ExamCommission>(entityDto);
                unitOfWork.GetGenericRepository <ExamCommission>().Update(entityToUpdate);
                if ((await ModifyExamTeachers(entityDto)).IsNotSuccess(out ActionResponse <ExamCommissionDto> response, out entityDto))
                {
                    return(response);
                }
                unitOfWork.Save();

                if ((await GetById(entityToUpdate.Id)).IsNotSuccess(out response, out entityDto))
                {
                    return(response);
                }

                unitOfWork.GetContext().Entry(entityToUpdate).State = EntityState.Detached;
                entityToUpdate = null;

                return(await ActionResponse <ExamCommissionDto> .ReturnSuccess(entityDto));
            }
            catch (Exception)
            {
                return(await ActionResponse <ExamCommissionDto> .ReturnError("Greška prilikom ažuriranja ispitne komisije."));
            }
        }
        public async Task <ActionResponse <ExamCommissionDto> > ModifyExamTeachers(ExamCommissionDto examCommission)
        {
            try
            {
                var entity = unitOfWork.GetGenericRepository <ExamCommission>()
                             .FindBy(e => e.Id == examCommission.Id.Value, includeProperties: "UserExamCommissions");

                var currentCommissionMembers = entity.UserExamCommissions.ToList();
                var newCommissionMembers     = examCommission.CommissionMembers;

                var membersToRemove = mapper.Map <List <UserExamCommissionDto> >(currentCommissionMembers.Where(cem => !newCommissionMembers
                                                                                                                .Select(ncm => ncm.Id).Contains(cem.Id)));

                var membersToAdd = newCommissionMembers
                                   .Where(ncm => !ncm.Id.HasValue ||
                                          !currentCommissionMembers.Select(ccm => ccm.Id).Contains(ncm.Id.Value))
                                   .Select(ncm =>
                {
                    ncm.ExamCommissionId = examCommission.Id;
                    return(ncm);
                })
                                   .ToList();

                var membersToModify = newCommissionMembers
                                      .Where(ncm => ncm.Id.HasValue && currentCommissionMembers.Select(ccm => ccm.Id).Contains(ncm.Id.Value))
                                      .ToList();

                if ((await RemoveExamTeachers(membersToRemove))
                    .IsNotSuccess(out ActionResponse <List <UserExamCommissionDto> > actionResponse))
                {
                    return(await ActionResponse <ExamCommissionDto> .ReturnError("Neuspješna promjena nastavnika u ispitnoj komisiji."));
                }

                if ((await AddExamTeachers(membersToAdd))
                    .IsNotSuccess(out actionResponse))
                {
                    return(await ActionResponse <ExamCommissionDto> .ReturnError("Neuspješna promjena nastavnika u ispitnoj komisiji."));
                }

                if ((await ModifyCommissionMembers(membersToModify))
                    .IsNotSuccess(out actionResponse))
                {
                    return(await ActionResponse <ExamCommissionDto> .ReturnError(actionResponse.Message));
                }

                return(await ActionResponse <ExamCommissionDto> .ReturnSuccess(examCommission, "Uspješno izmijenjeni članovi ispitne komisije."));
            }
            catch (Exception)
            {
                return(await ActionResponse <ExamCommissionDto> .ReturnError("Greška prilikom ažuriranja članova ispitne komisije."));
            }
        }
示例#4
0
 public async Task <ActionResponse <ExamCommissionDto> > Update([FromBody] ExamCommissionDto request)
 {
     return(await examCommissionService.Update(request));
 }