/// <summary> /// Updates an existing Alternate Id Type /// </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.AlternateIdTypeResponse> Update(IBaseContextModel context, long id, Tagge.Common.Models.AlternateIdTypeRequest request, Guid trackingGuid) { // Response var response = new Tagge.Common.Models.AlternateIdTypeResponse(); // Company Id 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_AlternateIdType").Name; // Get MongoDB var db = context.Database; var alternateIdTypeCollection = db.GetCollection <Deathstar.Data.Models.PC_AlternateIdType>(collectionName); // Word var dbAlternateIdType = new Deathstar.Data.Models.PC_AlternateIdType(); // Build the filters that will be used for both updating the record and checking to see if it exists // Check to see if the Alternate Id Type exists var filters = Builders <Deathstar.Data.Models.PC_AlternateIdType> .Filter.Eq(x => x.Id, id); filters = filters & Builders <Deathstar.Data.Models.PC_AlternateIdType> .Filter.Eq(x => x.DV_CompanyId, companyId.ToString()); filters = filters & Builders <Deathstar.Data.Models.PC_AlternateIdType> .Filter.Eq(x => x.IsActive, true); // Find that alternate id type var dbExistingAlternateIdType = alternateIdTypeCollection.Find(filters).FirstOrDefault(); // Could it be missing? if so throw error if (dbExistingAlternateIdType == null) { throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status404NotFound, ReasonPhrase = $"Alternate Id Type not found by Id: {id}" } } ; // Convert to DB Object dbAlternateIdType.ConvertToDatabaseObject(companyId.ToString(), request); // Custom Fields if (request.CustomFields != null && request.CustomFields.Count > 0) { dbAlternateIdType.CustomFields = await _customFieldModel.SaveOrUpdateGenericCustomFields(request.CustomFields, dbExistingAlternateIdType.CustomFields, "PC_AlternateIdType", id.ToString(), trackingGuid); } // Add Updated By & Timestamp dbAlternateIdType.UpdatedBy = context.Security.GetEmail(); dbAlternateIdType.UpdatedDateTime = DateTimeOffset.Now.ToString("yyyy/MM/dd HH:mm:ss.fff zzz"); var serializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }; var update = new BsonDocument() { { "$set", BsonDocument.Parse(JsonConvert.SerializeObject(dbAlternateIdType, serializerSettings)) } }; // Update database record await alternateIdTypeCollection.UpdateOneAsync(filters, update); // Convert To Response response = dbAlternateIdType.ConvertToResponse(); // ExternalIds if (request.ExternalIds != null && request.ExternalIds.Count > 0) { response.ExternalIds = await _externalIdModel.SaveOrUpdateGenericExternalId(request.ExternalIds, "PC_AlternateIdType", id.ToString(), trackingGuid); } // Add Id response.Id = id; ////Trigger the Webhook event //if (_useWebhook) //{ // var whRequest = new WebhookResponse() // { // CompanyId = companyId.ToString(), // Type = "Product", // Scope = "product/updated", // Id = response.Id.ToString() // }; // Models.WebhookModel.WebhookTriggerEvent(whRequest, trackingGuid); //} return(response); } catch (HttpResponseException webEx) { IG2000.Data.Utilities.Logging.LogTrackingEvent($"Location Group ( 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, "LocationGroupModel.Save()", context, trackingGuid, System.Diagnostics.EventLogEntryType.Error); throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError, ReasonPhrase = ex.Message }; } }
public async Task <Tagge.Common.Models.AlternateIdTypeResponse> Save(IBaseContextModel context, Tagge.Common.Models.AlternateIdTypeRequest request, Guid trackingGuid) { var response = new Tagge.Common.Models.AlternateIdTypeResponse(); 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_AlternateIdType").Name; // Get MongoDB var db = context.Database; var alternateIdTypeCollection = db.GetCollection <Deathstar.Data.Models.PC_AlternateIdType>(collectionName); var counterCollection = db.GetCollection <Deathstar.Data.Models.Counter>("Counters"); // Word var dbAlternateIdType = new Deathstar.Data.Models.PC_AlternateIdType(); // filter var filter = Builders <Deathstar.Data.Models.Counter> .Filter.Eq(x => x.Id, "alternateidtype_id"); var update = Builders <Deathstar.Data.Models.Counter> .Update.Inc("Seq", 1); // Get Id var id = counterCollection.FindOneAndUpdate(filter, update).Seq; // Convert request to AlternateIdType dbAlternateIdType.ConvertToDatabaseObject(companyId.ToString(), request); // Custom Fields if (request.CustomFields != null && request.CustomFields.Count > 0) { dbAlternateIdType.CustomFields = await _customFieldModel.SaveGenericCustomField(request.CustomFields, "PC_AlternateIdType", id.ToString(), trackingGuid); } // Add Id dbAlternateIdType.Id = id; // Add Created By & Timestamp dbAlternateIdType.CreatedBy = context.Security.GetEmail(); dbAlternateIdType.CreatedDateTime = DateTimeOffset.Now.ToString("yyyy/MM/dd HH:mm:ss.fff zzz"); dbAlternateIdType.IsActive = true; // Insert await alternateIdTypeCollection.InsertOneAsync(dbAlternateIdType); IG2000.Data.Utilities.Logging.LogTrackingEvent($"Alternate Id Type (id: {dbAlternateIdType.Id}) successfully saved.", "Save Alternate Id Type", LT319.Common.Utilities.Constants.TrackingStatus.Complete, context, trackingGuid); // Building the Response response = dbAlternateIdType.ConvertToResponse(); // ExternalIds if (request.ExternalIds != null && request.ExternalIds.Count > 0) { response.ExternalIds = await _externalIdModel.SaveOrUpdateGenericExternalId(request.ExternalIds, "PC_AlternateIdType", id.ToString(), trackingGuid); } return(response); } catch (HttpResponseException webEx) { IG2000.Data.Utilities.Logging.LogTrackingEvent($"Alternate Id Type 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, "AlternateIdTypeModel.Save()", context, trackingGuid, System.Diagnostics.EventLogEntryType.Error); throw new HttpResponseException() { StatusCode = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError, ReasonPhrase = ex.Message }; } }