/// <summary> /// Validates the specified request. /// </summary> /// <param name="request">The request.</param> /// <param name="languageToSave">The language to save.</param> /// <param name="languages">The languages.</param> private static void Validate(PutLanguageRequest request, Module.Root.Models.Language languageToSave, List <Module.Root.Models.Language> languages) { if (languageToSave == null) { throw new ArgumentNullException("languageToSave"); } if (languageToSave.Code != request.Data.Code) { throw new CmsApiValidationException("Language code changing is not allowed."); } if (CultureInfo.GetCultures(CultureTypes.AllCultures).All(c => c.Name != request.Data.Code)) { var message = string.Format("Language with code '{0}' doesn't exist.", request.Data.Code); throw new CmsApiValidationException(message); } if (languages.Any(l => l.Id != request.Id && l.Code == request.Data.Code)) { var message = string.Format("Language with code '{0}' already exists.", request.Data.Code); throw new CmsApiValidationException(message); } if (languages.Any(l => l.Id != request.Id && l.Name == request.Data.Name)) { var message = string.Format("Language with name '{0}' already exists.", request.Data.Name); throw new CmsApiValidationException(message); } }
/// <summary> /// Puts the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns><c>PutLanguageResponse</c> with id of created/updated language.</returns> public PutLanguageResponse Put(PutLanguageRequest request) { var languages = repository.AsQueryable <Module.Root.Models.Language>() .Where(l => l.Id == request.Id || l.Code == request.Data.Code || l.Name == request.Data.Name) .ToList(); var languageToSave = languages.FirstOrDefault(l => l.Id == request.Id); var createLanguage = languageToSave == null; if (createLanguage) { languageToSave = new Module.Root.Models.Language { Id = request.Id.GetValueOrDefault(), Code = request.Data.Code }; } else if (request.Data.Version > 0) { languageToSave.Version = request.Data.Version; } Validate(request, languageToSave, languages); unitOfWork.BeginTransaction(); languageToSave.Name = request.Data.Name; repository.Save(languageToSave); unitOfWork.Commit(); // Fire events. if (createLanguage) { Events.RootEvents.Instance.OnLanguageCreated(languageToSave); } else { Events.RootEvents.Instance.OnLanguageUpdated(languageToSave); } return(new PutLanguageResponse { Data = languageToSave.Id }); }
/// <summary> /// Puts the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns><c>PutLanguageResponse</c> with id of created/updated language.</returns> public PutLanguageResponse Put(PutLanguageRequest request) { var languages = repository.AsQueryable<Module.Root.Models.Language>() .Where(l => l.Id == request.Id || l.Code == request.Data.Code || l.Name == request.Data.Name) .ToList(); var languageToSave = languages.FirstOrDefault(l => l.Id == request.Id); var createLanguage = languageToSave == null; if (createLanguage) { languageToSave = new Module.Root.Models.Language { Id = request.Id.GetValueOrDefault(), Code = request.Data.Code }; } else if (request.Data.Version > 0) { languageToSave.Version = request.Data.Version; } Validate(request, languageToSave, languages); unitOfWork.BeginTransaction(); languageToSave.Name = request.Data.Name; repository.Save(languageToSave); unitOfWork.Commit(); // Fire events. if (createLanguage) { Events.RootEvents.Instance.OnLanguageCreated(languageToSave); } else { Events.RootEvents.Instance.OnLanguageUpdated(languageToSave); } return new PutLanguageResponse { Data = languageToSave.Id }; }