Exemple #1
0
        /// <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
                      };
            }
        }
Exemple #2
0
        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
                      };
            }
        }