Esempio n. 1
0
        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("Некорректные данные. Сохранение невозможно"));
            }
        }
Esempio n. 2
0
        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));
        }