public Tagge.Common.Models.CategorySetResponse ConvertToResponse() { var response = new Tagge.Common.Models.CategorySetResponse(); // Properties response.Id = Id; response.Name = Name; response.Description = Description; // Categories if (Categories != null) { response.Categories = new List <Sheev.Common.Models.GenericResponse>(); foreach (var category in Categories) { var singleSimpleResponse = new Sheev.Common.Models.GenericResponse() { Id = category.InternalId.ToString(), Name = category.Name }; response.Categories.Add(singleSimpleResponse); } } // Custom Fields if (CustomFields != null) { response.CustomFields = new List <Tagge.Common.Models.GenericCustomFieldResponse>(); foreach (var customField in CustomFields) { response.CustomFields.Add(customField.ConvertToResponse()); } } // ExternalIds - Managed in PC_ExternalId return(response); }
/// <summary> /// Updates an existing category set /// </summary> /// <param name="id"></param> /// <param name="request"></param> /// <param name="context"></param> /// <param name="trackingGuid"></param> /// <returns></returns> //public async Task<Tagge.Common.Models.CategorySetResponse> Update(long id, Tagge.Common.Models.CategorySetRequest request, Models.ContextModel context, Guid trackingGuid) public async Task <Tagge.Common.Models.CategorySetResponse> Update(IBaseContextModel context, long id, Tagge.Common.Models.CategorySetRequest request, Guid trackingGuid) { var response = new Tagge.Common.Models.CategorySetResponse(); var companyId = context.Security.GetCompanyId(); try { //// MongoDB Settings //var database = context.MongoDbSettings.Value.Databases.FirstOrDefault(x => x.Name == "DeathStar"); //string collectionName = database.Collections.FirstOrDefault(x => x.Name == "PC_CategorySet").Name; //// Get MongoDB //var db = context.Database; //var categorySetCollection = db.GetCollection<Deathstar.Data.Models.PC_CategorySet>(collectionName); var counterCollection = context.Database.GetCollection <Deathstar.Data.Models.Counter>("Counters"); // Word var dbCategorySet = new Deathstar.Data.Models.PC_CategorySet(); // Check to see if the Category Set is a duplicate var duplicatefilter = Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.DV_CompanyId, companyId.ToString()); duplicatefilter = duplicatefilter & Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.Id, id); duplicatefilter = duplicatefilter & Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.IsActive, true); var categoryExists = _categorySetCollection.Find(duplicatefilter).FirstOrDefault(); if (categoryExists == null) { throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status400BadRequest, ReasonPhrase = $"Category Set Already Exists. Use PUT to update category. (Id = {categoryExists.Id})!" } } ; // Validate Category Sets await Validate(context, request.Categories, trackingGuid);////new CategoryModel(context).Validate(request.Categories, trackingGuid); // Convert request to Category dbCategorySet.ConvertToDatabaseObject(companyId.ToString(), request); // Categories if (request.Categories != null && request.Categories.Count > 0) { foreach (var category in request.Categories) { dbCategorySet.Categories.Add(new Deathstar.Data.Models.TM_GenericEntry() { Name = category.Name, InternalId = category.Id }); } } // Custom Fields if (request.CustomFields != null && request.CustomFields.Count > 0) { dbCategorySet.CustomFields = await _customFielModel.SaveOrUpdateGenericCustomFields(request.CustomFields, categoryExists.CustomFields, "PC_CategorySet", id.ToString(), trackingGuid); } // Add Created By & Timestamp dbCategorySet.UpdatedBy = context.Security.GetEmail(); dbCategorySet.UpdatedDateTime = DateTimeOffset.Now.ToString("yyyy/MM/dd HH:mm:ss.fff zzz"); dbCategorySet.IsActive = true; // filter var filters = Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.Id, id); filters = filters & Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.IsActive, true); filters = filters & Builders <Deathstar.Data.Models.PC_CategorySet> .Filter.Eq(x => x.DV_CompanyId, companyId.ToString()); var serializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; var update = new BsonDocument() { { "$set", BsonDocument.Parse(JsonConvert.SerializeObject(dbCategorySet, serializerSettings)) } }; // Save or Update database record await _categorySetCollection.UpdateOneAsync(filters, update); // Building the Response response = dbCategorySet.ConvertToResponse(); // Add Id response.Id = id; // ExternalIds if (request.ExternalIds != null && request.ExternalIds.Count > 0) { response.ExternalIds = await _externalIdModel.SaveOrUpdateGenericExternalId(request.ExternalIds, "PC_CategorySet", id.ToString(), trackingGuid); } IG2000.Data.Utilities.Logging.LogTrackingEvent($"Category Set (id: {dbCategorySet.Id}, name: {dbCategorySet.Name}) successfully saved.", "Save Category Set", LT319.Common.Utilities.Constants.TrackingStatus.Complete, context, trackingGuid); // Trigger the Webhook event //if (_useWebhook) //{ // var whRequest = new WebhookResponse() // { // CompanyId = companyId.ToString(), // Type = "Product Category", // Scope = "category/product/created", // Id = response.Id.ToString(), // TrackingGuid = trackingGuid // }; // WebhookModel.WebhookTriggerEvent(whRequest, trackingGuid); //} return(response); } catch (HttpResponseException webEx) { IG2000.Data.Utilities.Logging.LogTrackingEvent($"Category Set ( Name: {request.Name}) failed to save! Reason: {webEx.ReasonPhrase}", $"Status Code: {webEx.StatusCode}", LT319.Common.Utilities.Constants.TrackingStatus.Error, context, trackingGuid); throw; } catch (Exception ex) { IG2000.Data.Utilities.Logging.LogTrackingEvent($"See logs for additional details", "Failed", LT319.Common.Utilities.Constants.TrackingStatus.Error, context, trackingGuid); IG2000.Data.Utilities.ErrorLogger.Report(ex.Message, "CategorySet.Save()", context, trackingGuid, System.Diagnostics.EventLogEntryType.Error); throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError, ReasonPhrase = ex.Message }; } }