/// <summary> /// Saves site item. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="item">Site object</param> /// <returns>Result with save status and messages if error occurs. Does not return an identifier.</returns> public static async Task <Result> Save(models.Site item) { var messages = new List <string>(); if (item == null) { return(new Result(ResultStatus.Failed, "Site cannot be null.")); } Rules.StringRequiredMaxLength(item.Name, "Name", 25, ref messages); if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } Tables.dbo.Site convertedSite = Convert(item); if (convertedSite == null) { return(new Result(ResultStatus.Failed, "Could not convert Site model to table.")); } Result saveResult = await dbWrite.Item(convertedSite); return(saveResult); }
/// <summary> /// Saves work and child items. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site related to work.</param> /// <param name="inputItem">Work object.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, models.Work inputItem) { var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Work cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Tables.dbo.Image convertImage = Image.Convert(inputItem.Cover, siteItem.Id); if (convertImage == null) { return(new Result(ResultStatus.Failed, "Work must have a cover image.")); } Result saveImageResult = await Image.Save(site, inputItem.Cover); if (saveImageResult.Status == ResultStatus.Failed) { return(new Result(saveImageResult.Status, messages)); } Rules.StringRequiredMaxLength(inputItem.Title, "Title", 100, ref messages); Rules.StringRequiredMaxLength(inputItem.Authors, "Authors", 255, ref messages); if (Rules.StringRequiredMaxLength(inputItem.Href, "Href", 2048, ref messages) == Rules.Passed.Yes) { Rules.ValidateUrl(inputItem.Href, "Href", ref messages); } if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } Tables.dbo.Work convertedWork = Convert(inputItem, siteItem.Id); if (convertedWork == null) { return(new Result(ResultStatus.Failed, "Could not convert Work model to table.")); } Result output = await dbWrite.Item(site, convertedWork); if (output.Status == ResultStatus.PartialSuccess || output.Status == ResultStatus.Succeeded) { output.ReturnId = inputItem.Id; } return(output); }
/// <summary> /// Saves page and child items. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site to which page is related.</param> /// <param name="area">Area where page resides.</param> /// <param name="inputItem">Subscriber object.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, Area area, models.Subscriber inputItem) { var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Subscriber cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.FirstName, "Name", 50, ref messages); Rules.StringRequiredMaxLength(inputItem.LastName, "Name", 50, ref messages); if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 255, ref messages) == Rules.Passed.Yes) { Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages); } if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } models.Subscriber existingItem = await Item(site, area, inputItem.EmailAddress); Guid returnId = existingItem?.Id ?? Guid.NewGuid(); int areaId = Enumerators.Values.Area(area); var saveItem = new Tables.dbo.Subscriber { Id = returnId, SiteId = siteItem.Id, AreaId = areaId, FirstName = inputItem.FirstName, LastName = inputItem.LastName, EmailAddress = inputItem.EmailAddress }; Result saveSubscriberResult = await dbWrite.Item(site, saveItem); messages = saveSubscriberResult.Messages; return(new Result(saveSubscriberResult.Status, messages, returnId)); }
/// <summary> /// Save image. /// </summary> /// /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site for image.</param> /// <param name="inputItem">Image object.</param> /// <note>See https://stackoverflow.com/questions/39322085/how-to-save-iformfile-to-disk for admin save file.</note> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, models.Image inputItem) { var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Image cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.Path, "Path", 440, ref messages); if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } Tables.dbo.Image convertedImage = Convert(inputItem, siteItem.Id); if (convertedImage == null) { return(new Result(ResultStatus.Failed, "Could not convert Image model to table.")); } Result saveImageResult = await dbWrite.Item(site, convertedImage); if (saveImageResult.Status == ResultStatus.PartialSuccess || saveImageResult.Status == ResultStatus.Succeeded) { saveImageResult.ReturnId = inputItem.Id; } return(saveImageResult); }
/// <summary> /// Saves page and child items. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site to which page is related.</param> /// <param name="area">Area where page resides.</param> /// <param name="inputItem">Page object.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, Area area, models.Page inputItem) { var saveStatus = ResultStatus.Undetermined; var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Page cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.Name, "Name", 50, ref messages); if (messages.Any()) { return(new Result(saveStatus, messages)); } models.Page existingItem = await Item(site, area, inputItem.Name); Guid returnId = existingItem?.Id ?? Guid.NewGuid(); int areaId = Enumerators.Values.Area(area); var saveItem = new Tables.dbo.Page { Id = returnId, SiteId = siteItem.Id, AreaId = areaId, Name = inputItem.Name }; Result savePageResult = await dbWrite.Item(site, saveItem); if (savePageResult.Status == ResultStatus.Failed) { return(new Result(savePageResult.Status, savePageResult.Messages)); } // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator //foreach (Models.ProfessionalTranslator.Net.Localized.Page localizedPage in inputItem.Bodies) //{ // var saveLocalization = new Tables.Localization.Page // { // Id = saveItem.Id, // Html = localizedPage.Html, // Title = localizedPage.Title, // Lcid = localizedPage.Lcid // }; // Result localizedResult = await DatabaseOperations.Localization.Write.Page.Item(site, saveLocalization); // if (localizedResult.Status != ResultStatus.Failed) continue; // saveStatus = ResultStatus.PartialSuccess; // messages.AddRange(localizedResult.Messages); //} if (saveStatus == ResultStatus.Undetermined) { saveStatus = ResultStatus.Succeeded; } return(new Result(saveStatus, messages, returnId)); }
/// <summary> /// Saves testimonial and child items. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site related to testimonial.</param> /// <param name="inputItem">Testimonial object.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, models.Testimonial inputItem) { var saveStatus = ResultStatus.Undetermined; var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Testimonial cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Tables.dbo.Work convertedWork = Work.Convert(inputItem.Work, siteItem.Id); if (convertedWork == null) { return(new Result(ResultStatus.Failed, "Could not convert work model to table.")); } Tables.dbo.Image convertedPortrait = Image.Convert(inputItem.Portrait, siteItem.Id); if (convertedPortrait == null) { return(new Result(ResultStatus.Failed, "Could not convert portrait model to table.")); } // Disabled until portraits are used for testimonials rather than covers. //Result savePortraitResult = await Image.Save(site, inputItem.Portrait); //if (savePortraitResult.Status == SaveStatus.Failed) //{ // return savePortraitResult; //} inputItem.Portrait.Id = convertedPortrait.Id; Rules.StringRequiredMaxLength(inputItem.Name, "Name", 100, ref messages); if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 256, ref messages) == Rules.Passed.Yes) { Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages); } if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } var saveItem = new Tables.dbo.Testimonial { Id = inputItem.Id, SiteId = siteItem.Id, WorkId = convertedWork.Id, PortraitImageId = convertedPortrait.Id, Name = inputItem.Name, EmailAddress = inputItem.EmailAddress, Approved = inputItem.Approved }; Result saveTestimonialResult = await dbWrite.Item(site, saveItem); if (saveTestimonialResult.Status == ResultStatus.Failed) { return(saveTestimonialResult); } // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (Models.ProfessionalTranslator.Net.Localized.Testimonial localizedPage in inputItem.Entries) { var saveLocalization = new Tables.Localization.Testimonial { Id = saveItem.Id, Html = localizedPage.Html, Lcid = localizedPage.Lcid }; Result localizedResult = await DatabaseOperations.Localization.Write.Testimonial.Item(site, saveLocalization); if (localizedResult.Status != ResultStatus.Failed) { continue; } saveStatus = ResultStatus.Failed; messages.AddRange(localizedResult.Messages); break; } if (saveStatus == ResultStatus.Undetermined) { saveStatus = ResultStatus.Succeeded; } return(new Result(saveStatus, messages, inputItem.Id)); }
/// <summary> /// Saves inquiry and client. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site for image.</param> /// <param name="inputItem">Inquiry object.</param> /// /// <param name="clientItem">Client to be associated with this inquiry.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, Models.ProfessionalTranslator.Net.Log.Inquiry inputItem, models.Client clientItem) { var saveStatus = ResultStatus.Undetermined; var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Inquiry cannot be null.")); } Tables.dbo.Site siteItem = await dboDbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.TranslationType, "Translation Type", 25, ref messages); Rules.StringRequiredMaxLength(inputItem.TranslationDirection, "Translation Direction", 25, ref messages); Rules.StringRequiredMaxLength(inputItem.SubjectMatter, "SubjectMatter", 50, ref messages); Rules.MinIntValue(inputItem.WordCount, "Word Count", 1, ref messages); Rules.StringRequired(inputItem.Message, "Message", ref messages); if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } Tables.Log.Inquiry convertedInquiry = Convert(inputItem, siteItem.Id); if (convertedInquiry == null) { return(new Result(ResultStatus.Failed, "Could not convert Inquiry model to table.")); } Guid returnId = convertedInquiry.Id; Result saveInquiryResult = await dbWrite.Item(site, convertedInquiry); if (saveInquiryResult.Status == ResultStatus.PartialSuccess || saveInquiryResult.Status == ResultStatus.Succeeded) { saveInquiryResult.ReturnId = returnId; } else { saveStatus = saveInquiryResult.Status; } if (saveStatus == ResultStatus.Undetermined) { foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in clientItem.Uploads) { Result uploadResult = await ClientInquiry.Item(uploads.Id, returnId); if (uploadResult.Status != ResultStatus.Failed) { continue; } saveStatus = ResultStatus.Failed; messages.AddRange(uploadResult.Messages); } } if (saveStatus == ResultStatus.Undetermined) { saveStatus = ResultStatus.Succeeded; } return(new Result(saveStatus, messages, returnId)); }
/// <summary> /// Saves client and client uploads. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site related to testimonial.</param> /// <param name="inputItem">Client object.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, models.Client inputItem) { var saveStatus = ResultStatus.Undetermined; var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Client cannot be null.")); } Tables.dbo.Site siteItem = await dbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.Name, "Name", 150, ref messages); if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 256, ref messages) == Rules.Passed.Yes) { Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages); } foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in inputItem.Uploads) { Rules.StringRequiredMaxLength(uploads.GeneratedFilename, "Generated filename", 45, ref messages); Rules.StringRequiredMaxLength(uploads.OriginalFilename, "Original filename", 256, ref messages); } if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } var saveItem = new Tables.dbo.Client { Id = inputItem.Id, SiteId = siteItem.Id, Name = inputItem.Name, EmailAddress = inputItem.EmailAddress }; Result saveClientResult = await dbWrite.Item(site, saveItem); if (saveClientResult.Status == ResultStatus.Failed) { return(saveClientResult); } // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in inputItem.Uploads) { var saveUpload = new Tables.Upload.Client { Id = uploads.Id, ClientId = saveItem.Id, GeneratedFilename = uploads.GeneratedFilename, OriginalFilename = uploads.OriginalFilename }; Result uploadResult = await DatabaseOperations.Upload.Write.Client.Item(saveUpload); if (uploadResult.Status != ResultStatus.Failed) { continue; } saveStatus = ResultStatus.PartialSuccess; messages.AddRange(uploadResult.Messages); } if (saveStatus == ResultStatus.Undetermined) { saveStatus = ResultStatus.Succeeded; } return(new Result(saveStatus, messages, inputItem.Id)); }