public async Task <IHttpActionResult> Post(int serviceId, [FromBody] ProviderAddLanguagesBindingModel model) { if (ModelState.IsValid) { OperationResult <IEnumerable <ServiceLanguageInfo> > result = await LanguageManager.AddLanguagesAsync(serviceId, model, UserId); if (result.Success) { var newComers = Mapper.Map <IEnumerable <ServiceLanguageViewModel> >(result.Data); return(Ok(newComers)); } else { return(BadRequest(result.ErrorMessage)); } } else { return(BadRequest("Некорректные данные. Сохранение невозможно")); } }
public async Task <OperationResult <IEnumerable <ServiceLanguageInfo> > > AddLanguagesAsync(int serviceId, ProviderAddLanguagesBindingModel model, int userId) { var newLanguages = new List <ServiceLanguageInfo>(); foreach (var id in model.Languages) { var newLanguage = new ServiceLanguageInfo { CreatedDate = DateTime.Now, Comment = model.Comment, LanguagePairId = id, QA = new QA { Comment = model.qaComment, Grade = 0, Stars = (Stars)model.Stars }, Rate = new ServiceRate { Minrate = model.MinRate, MaxRate = model.MaxRate }, ProductivityMax = model.ProductivityMax, ProductivityMin = model.ProductivityMin, ServiceId = serviceId, NativeSpeaker = model.NativeSpeaker }; newLanguages.Add(newLanguage); Repo.AddOrUpdate(newLanguage); // I used to do it in two passes, but it causes error. // So I save after each add/update try { await Repo.SaveAsUserAsync(userId); Repo.BindGrades(newLanguage); await Repo.SaveAsUserAsync(userId); } catch (Exception ex) { return(OperationResult <IEnumerable <ServiceLanguageInfo> > .Error(string.Format("{0}{1}.", CANNOT_ADD_LANGUAGES, ex.Message))); } } var newLanguageIds = newLanguages.Select(x => x.Id); var result = Repo .Get(x => newLanguageIds.Contains(x.Id)) .Include(x => x.LanguagePair) .Include(x => x.CreatedBy) .Include(x => x.ModifiedBy) .ToList(); return(OperationResult <IEnumerable <ServiceLanguageInfo> > .Ok(result)); }