Esempio n. 1
0
        private bool ValidateNewsEntityData(NewsDataSave newsdata, IConfiguration configuration)
        {
            var HRToken = new JwtSecurityToken(newsdata.HRToken);

            if (Helper.TokenValid(HRToken) == false)
            {
                return(false);
            }

            if (newsdata.FeedItemQueue == null || newsdata.WorkItemGuid == null)
            {
                return(false);
            }

            // Check if HR is up before calling HR routines
            var hrResponse = Helper.GetHRServerStatus(configuration);

            // We expect a 400 - Bad Request, if 404 Not Found, return an error
            if (hrResponse.StatusCode == 404)
            {
                return(false);
            }

            return(true);
        }
        public IActionResult Update([FromBody] NewsDataSave newsdata)
        {
            var result = _repository.UpdateNewsEntity(newsdata, _configuration);

            if (result == null)
            {
                return(Helper.CheckResult(result, false, true));
            }
            else
            {
                return(Helper.CheckResult(result));
            }
        }
        public IActionResult UpdateEntry([FromBody] NewsDataSave objupdate)
        {
            var HRtoken             = objupdate.HRToken;
            var FeedItemQueueObject = objupdate.FeedItemQueue;
            var WorkItemGuid        = objupdate.WorkItemGuid;

            var Message = "";

            // Check if HR is up
            var hruri      = _configuration.GetSection("HumanReview:uri").Value + "auth/token";
            var hrResponse = Common.ServerStatusBy(hruri);

            // We expect a 400 - Bad Request. Anything else specifically 404 Not Found, return an error
            if (hrResponse.StatusCode == 404)
            {
                { return(NotFound("Error: Human Review Service unavailable")); }
            }

            if (HRtoken == null || FeedItemQueueObject == null || WorkItemGuid == null)
            {
                Message = "Invalid Request";
                return(BadRequest(Message));
            }

            var MappingEntry = _context.HRWorkItemDataMap
                               .Where(t => t.WorkItemID == WorkItemGuid && t.WorkUnitTypeID == 5)
                               .FirstOrDefault();

            /*
             * 3	Investigation
             * 4	Alerts
             * 5	News Queue
             * 6	BWQ
             */
            if (MappingEntry == null)
            {
                Message = "Work Item not found";
                return(BadRequest(Message));
            }

            var FeedItemQueueEntry = _NewsDBcontext.FeedItemQueue
                                     .Where(t => t.id == FeedItemQueueObject.id)
                                     .FirstOrDefault();

            if (FeedItemQueueEntry == null)
            {
                Message = "Item entry does not exist";
                return(BadRequest(Message));
            }

            var AppUserId = FeedItemQueueEntry.stateChangedRecipient; // the person that sent this update request

            //Check locks
            var NewsLockEntry = _NewsDBcontext.FeedItemQueueLocks
                                .Where(t => t.fkItemID == FeedItemQueueObject.id && t.LockedByRecipientID == AppUserId)
                                .FirstOrDefault();

            if (NewsLockEntry != null) // lock exists
            {
                var AppUser = _context.AppUser
                              .Where(u => u.AppUserID == AppUserId)
                              .FirstOrDefault();

                if (NewsLockEntry.LockedByRecipientID == AppUserId) // locked to someone else
                {
                    // locked to current user, remove the lock
                    _NewsDBcontext.FeedItemQueueLocks.Remove(NewsLockEntry);
                }
                else
                {
                    if (AppUser == null)
                    {
                        Message = "Record locked by " + AppUserId;
                    }
                    else
                    {
                        Message = "Record locked by " + AppUser.AppUserName;
                    }
                    return(BadRequest(Message));
                }
            }

            // Update News if everything looks ok
            _NewsDBcontext.Entry(FeedItemQueueEntry).CurrentValues.SetValues(FeedItemQueueObject);

            try
            {
                _NewsDBcontext.SaveChanges();
            }
            catch (Exception e)
            {
                var logInfo = e.Message;
                { return(BadRequest(e.Message)); }
            }

            #region Update HR Data
            try
            {
                var Modules   = _context.ApplicationModules;
                var QueueGuid = (from mods in Modules
                                 where mods.ModuleName == "News Queue"
                                 select mods.QueueGuid).FirstOrDefault();

                var JsonData = JsonConvert.SerializeObject(FeedItemQueueObject);

                WorkItemPutRequest HRPutRequest = new WorkItemPutRequest();
                HRPutRequest.isActive             = true;
                HRPutRequest.name                 = "Updating Entries for News Entry " + FeedItemQueueObject.id;
                HRPutRequest.description          = "Updating Entries for News Entry " + FeedItemQueueObject.id;
                HRPutRequest.queueGuid            = QueueGuid;
                HRPutRequest.statusDetailTypeGuid = _configuration.GetSection("HumanReview:statusDetailTypeGuid_upd").Value;
                HRPutRequest.reviewTypeGuid       = _configuration.GetSection("HumanReview:reviewTypeGuid_upd").Value;
                HRPutRequest.formDefinitionJson   = JsonData;
                HRPutRequest.workitemGuid         = WorkItemGuid.ToString();

                var returnDataFromHR = Common.putWorkItemForEntityAsync(HRPutRequest, HRtoken, _configuration);
                if (returnDataFromHR.isSuccessful != true)
                {
                    // TODO: log this error
                    { return(BadRequest("Unable to save HR data")); }
                }
            }
            catch (Exception e)
            {
                // log error
                var logInfo = e.Message;
                { return(BadRequest(e.Message)); }
            }
            #endregion

            return(Ok());
        }
Esempio n. 4
0
        /// <summary>
        /// Updates the status for a news Entity entry
        /// this routine also updates the WorkItem record in Human Review
        /// </summary>
        /// <param name="newsdata"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public object UpdateNewsEntity(NewsDataSave newsdata, IConfiguration configuration)
        {
            bool DataValid = ValidateNewsEntityData(newsdata, configuration);

            if (DataValid == false)
            {
                return(null);
            }

            string        HRtoken             = newsdata.HRToken;
            FeedItemQueue FeedItemQueueObject = newsdata.FeedItemQueue;

            System.Guid WorkItemGuid = newsdata.WorkItemGuid;

            /*
             * 3	Investigation
             * 4	Alerts
             * 5	News Queue
             * 6	BWQ
             */
            var MappingEntry = _context.HRWorkItemDataMap.Where(t => t.WorkItemID == WorkItemGuid && t.WorkUnitTypeID == 5) // 5 = News Queue
                               .FirstOrDefault();

            if (MappingEntry == null)
            {
                return(null);
            }

            var FeedItemQueueEntry = _newsfeedcontext.FeedItemQueue.Where(t => t.id == FeedItemQueueObject.id).FirstOrDefault();

            // Check if entry exists
            if (FeedItemQueueEntry == null)
            {
                return(null);
            }
            // Check the state, it should only be NULL or 0
            if (!(FeedItemQueueEntry.state == null || FeedItemQueueEntry.state == 0))
            {
                return(null);
            }



            var AppUserId = FeedItemQueueEntry.stateChangedRecipient;
            // the user that sent this update request, according to the newsfeed entry table [FeedItemQueue]

            //Check locks
            var NewsLockEntry = _newsfeedcontext.FeedItemQueueLocks
                                //.Where(t => t.fkItemID == FeedItemQueueObject.id && t.LockedByRecipientID == AppUserId).FirstOrDefault();
                                .Where(t => t.fkItemID == FeedItemQueueObject.id).FirstOrDefault();

            if (NewsLockEntry != null) // lock exists
            {
                var AppUser = _context.AppUser.Where(u => u.AppUserID == AppUserId).FirstOrDefault();

                if (NewsLockEntry.LockedByRecipientID == AppUserId) // entry is locked to this user
                {
                    // locked to current user, remove the lock
                    _newsfeedcontext.FeedItemQueueLocks.Remove(NewsLockEntry);
                }
                else // locked to someone else
                {
                    return(null);
                }
            }

            // Update News if everything looks ok
            _newsfeedcontext.Entry(FeedItemQueueEntry).CurrentValues.SetValues(FeedItemQueueObject);
            _newsfeedcontext.SaveChanges();

            // Human Review routines
            var QueueGuid = (from module in _context.ApplicationModules
                             where module.ModuleName == EditorialModules.News
                             select module.QueueGuid).FirstOrDefault();

            var QueueGuidString = QueueGuid.ToString();
            var JsonData        = JsonConvert.SerializeObject(FeedItemQueueObject);

            var HRCreateRequest = Helper.BuildHRWorkItemRequest(EditorialModules.News,
                                                                QueueGuidString, JsonData,
                                                                configuration, WorkItemGuid.ToString(), HRRequestMode.Update);

            var GuidResult = Helper.PutHRWorkItem((WorkItemPutRequest)HRCreateRequest, HRtoken, configuration);

            return(FeedItemQueueObject);
        }