コード例 #1
0
        public async Task <ChangeRequestStore> AddToChangeRequestStoreAsync(long changeRequestId,
                                                                            ChangeRequestStatus status,
                                                                            string decisionBy)
        {
            try
            {
                long id = Convert.ToInt64(changeRequestId);

                ChangeRequestStaging staging = await this.ChangeRequestStagingRepositoryService.FindAsync(id);

                List <ChangeRequestItemStaging> items =
                    await ChangeRequestItemStagingBusinessService.GetChangeRequestItemsAsync(
                        item => item.ChangeRequestId == id);

                List <CommentsStaging> comments =
                    await CommentsStagingBusinessService.GetChangeRequestCommentsAsync(
                        item => item.ChangeRequestId == id);

                List <AttachmentsStaging> attachments =
                    await AttachmentStagingBusinessService.GetChangeRequestAttachmentsAsync(
                        item => item.ChangeRequestId == id);

                List <ChangeRequestAssignmentStaging> assignments =
                    await AssignmentStagingRepositoryService.GetAsync(
                        item => item.ChangeRequestId == id);

                List <LikesStaging> likes =
                    await LikesStagingRepositoryService.GetAsync(item => item.ChangeRequestId == id);

                staging.ChangeRequestItemStagings       = items;
                staging.CommentsStagings                = comments;
                staging.AttachmentsStagings             = attachments;
                staging.ChangeRequestAssignmentStagings = assignments;
                staging.LikesStagings = likes;

                // todo: use automapper for map ChangeRequestStaging to ChangeRequesStore
                ChangeRequestStore changeRequestStoreItem = this.MapToChangeRequestStore(staging);
                changeRequestStoreItem.DecisionBy        = decisionBy;
                changeRequestStoreItem.Status            = status;
                changeRequestStoreItem.CompletedDateTime = DateTime.UtcNow;

                this.ChangeRequestStoreRepositoryService.Add(changeRequestStoreItem);
                return(changeRequestStoreItem);
            }
            catch (Exception)
            {
                throw;
            }
        }
コード例 #2
0
        public Task <bool> UpdateToTransactionalTableAsync(ChangeRequestStore changeRequestStore, long changeRequestId)
        {
            return(Task.Run(async() =>
            {
                long id = Convert.ToInt64(changeRequestId);

                IList <ChangeRequestItem> changeRequestItems =
                    changeRequestStore.ChangeRequestItems.Where(x => x.ChangeRequestId == id).ToList();

                foreach (ChangeRequestItem item in changeRequestItems)
                {
                    if (String.IsNullOrWhiteSpace(item.EntityFullName))
                    {
                        // note: all modelType share common namesapce
                        string namespaceName = typeof(Make).Namespace;
                        //string namespaceName = typeof(MakeBusinessService).Namespace;
                        // note: all modelType sharte common assembly
                        string assemblyFullName = typeof(Make).Assembly.FullName;
                        //string assemblyFullName = typeof(MakeBusinessService).Assembly.FullName;

                        string entityName = item.Entity;
                        //string entityName = item.Entity + "BusinessService";
                        item.EntityFullName = $"{namespaceName}.{entityName},{assemblyFullName}";
                    }

                    Type deletedEventType =
                        typeof(DeletedEvent <>).MakeGenericType(Type.GetType(item.EntityFullName));

                    var deleteEventInstance = (ChangeRequestReviewEvent)Activator.CreateInstance(deletedEventType);
                    deleteEventInstance.Entity = item.Entity;
                    deleteEventInstance.EntityId = item.EntityId;
                    deleteEventInstance.Payload = item.Payload;
                    deleteEventInstance.ChangeType = changeRequestStore.ChangeType;    //NOTE: for capturing Replace type
                    //deleteEventInstance.ChangeRequestStatus = changeRequestStore.Status;
                    deleteEventInstance.ChangeRequestId = id;

                    await _eventBus.SendAsync(Convert.ChangeType(deleteEventInstance, deletedEventType) as IEvent);
                }

                return true;
            }));
        }
コード例 #3
0
        public Task <bool> UpdateToTransactionalTableAsync(ChangeRequestStore changeRequestStore, long changeRequestId)
        {
            return(Task.Run(async() =>
            {
                bool isSuccess = false;

                long id = Convert.ToInt64(changeRequestId);

                IList <ChangeRequestItem> changeRequestItems =
                    changeRequestStore.ChangeRequestItems.Where(x => x.ChangeRequestId == id).ToList();

                foreach (ChangeRequestItem item in changeRequestItems)
                {
                    if (String.IsNullOrWhiteSpace(item.EntityFullName))
                    {
                        // note: all modelType share common namesapce
                        string namespaceName = typeof(Make).Namespace;
                        //string namespaceName = typeof(MakeBusinessService).Namespace;
                        // note: all modelType sharte common assembly
                        string assemblyFullName = typeof(Make).Assembly.FullName;
                        //string assemblyFullName = typeof(MakeBusinessService).Assembly.FullName;

                        string entityName = item.Entity;
                        //string entityName = item.Entity + "BusinessService";
                        item.EntityFullName = $"{namespaceName}.{entityName},{assemblyFullName}";
                    }
                    //Push changes to transaction table
                    //IChangeRequestReviewEventHandler changeRequestReviewEventHandler =
                    //    Utility.GetGenericTypeInstance(typeof(VcdbBusinessService<>),
                    //        new Type[] { Type.GetType(item.EntityFullName) },
                    //        new object[] { _unitofWork, this, _serializer }) as IChangeRequestReviewEventHandler;

                    // ALTERNATIVE: get instance of modelType-Business Service
                    //Type serviceType = Type.GetType(entity);
                    //if (serviceType == null)
                    //    return isSuccess;
                    //IChangeRequestApprovedEventHandler changeRequestApprovedEventHandler =
                    //    Activator.CreateInstance(serviceType, new object[] {_vcdbUnitOfWork, this, _serializer}) as
                    //        IChangeRequestApprovedEventHandler;

                    //if (changeRequestReviewEventHandler == null)
                    //{
                    //    return false;
                    //}

                    //isSuccess = changeRequestReviewEventHandler.Handle(new ChangeRequestApprovedEvent
                    //{
                    //    Entity = item.Entity,
                    //    EntityId = item.EntityId,
                    //    Payload = item.Payload,
                    //    ChangeType = item.ChangeType,
                    //    ChangeRequestStatus = changeRequestStore.Status,
                    //    ChangeRequestId = id
                    //});

                    Type approvedEventType =
                        typeof(ApprovedEvent <>).MakeGenericType(Type.GetType(item.EntityFullName));

                    var approveEventInstance = (ChangeRequestReviewEvent)Activator.CreateInstance(approvedEventType);
                    approveEventInstance.Entity = item.Entity;
                    approveEventInstance.EntityId = item.EntityId;
                    approveEventInstance.Payload = item.Payload;
                    approveEventInstance.ChangeType = changeRequestStore.ChangeType;    //NOTE: for capturing Replace type
                    //approveEventInstance.ChangeRequestStatus = changeRequestStore.Status;
                    approveEventInstance.ChangeRequestId = id;

                    await _eventBus.SendAsync(Convert.ChangeType(approveEventInstance, approvedEventType) as IEvent);
                }

                return true;
            }));
        }
コード例 #4
0
        private ChangeRequestStore MapToChangeRequestStore(ChangeRequestStaging staging)
        {
            ChangeRequestStore store = new ChangeRequestStore()
            {
                Id                  = staging.Id,
                EntityId            = staging.EntityId,
                ChangeRequestTypeId = staging.ChangeRequestTypeId,
                TaskControllerId    = staging.TaskControllerId,
                Entity              = staging.Entity,
                ChangeType          = staging.ChangeType,
                Status              = staging.Status,
                RequestedBy         = staging.RequestedBy,
                RequestedDateTime   = staging.CreatedDateTime // // note: requested on store equals created on staging
            };

            // map item
            List <ChangeRequestItem> storeItems = staging.ChangeRequestItemStagings?.Select(item
                                                                                            => new ChangeRequestItem()
            {
                ChangeRequestItemId = item.Id,
                ChangeRequestId     = item.ChangeRequestId,
                EntityId            = item.EntityId,
                Entity          = item.Entity,
                EntityFullName  = "",
                Payload         = item.Payload,
                ExistingPayload = item.ExistingPayload,     // existing payload
                ChangeType      = item.ChangeType,
                CreatedDateTime = item.CreatedDateTime
            }).ToList();
            // map comment
            List <Comments> comments = staging.CommentsStagings?.Select(item
                                                                        => new Comments()
            {
                Id = item.Id,
                ChangeRequestId = item.ChangeRequestId,
                Comment         = item.Comment,
                AddedBy         = item.AddedBy,
                CreatedDatetime = item.CreatedDatetime
            }).ToList();
            // map attachment
            List <Attachments> attachments = staging.AttachmentsStagings?.Select(item
                                                                                 => new Attachments()
            {
                AttachmentId       = item.AttachmentId,
                ChangeRequestId    = item.ChangeRequestId,
                DirectoryPath      = item.DirectoryPath,
                FileName           = item.FileName,
                FileExtension      = item.FileExtension,
                AttachedBy         = item.AttachedBy,
                CreatedDateTime    = item.CreatedDateTime,
                AzureContainerName = item.AzureContainerName,
                ContentType        = item.ContentType,
                FileSize           = item.FileSize
            }).ToList();

            List <ChangeRequestAssignment> assignments = staging.ChangeRequestAssignmentStagings?.Select(item
                                                                                                         => new ChangeRequestAssignment()
            {
                Id = item.Id,
                ChangeRequestId  = item.ChangeRequestId,
                AssignedByUserId = item.AssignedByUserId,
                AssignedToUserId = item.AssignedToUserId,
                AssignedToRoleId = item.AssignedToRoleId,
                CreatedDateTime  = item.CreatedDateTime,
                Comments         = item.Comments
            }).ToList();
            List <Likes> likes = staging.LikesStagings?.Select(item
                                                               => new Likes()
            {
                Id = item.Id,
                ChangeRequestId = item.ChangeRequestId,
                LikeStatus      = item.LikeStatus,
                LikedBy         = item.LikedBy,
                UpdatedDatetime = item.UpdatedDatetime,
                CreatedDatetime = item.CreatedDatetime
            }).ToList();

            // todo: map taskcontroller


            // fill up children/ details
            store.ChangeRequestItems       = storeItems;
            store.Comments                 = comments;
            store.Attachments              = attachments;
            store.ChangeRequestAssignments = assignments;
            store.Likes = likes;
            // todo: fill taskcontoller

            return(store);
        }