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; } }
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; })); }
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; })); }
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); }