/// <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)); }