protected async Task ReleaseCompletedAsync(Product product, ReleaseResponse buildEngineRelease) { ClearRecurringJob(product.Id); product.DatePublished = DateTime.UtcNow; await ProductRepository.UpdateAsync(product); await UpdateProductPublication(buildEngineRelease, product, true); var messageParms = new Dictionary <string, object>() { { "projectName", product.Project.Name }, { "productName", product.ProductDefinition.Name } }; await sendNotificationService.SendNotificationToUserAsync(product.Project.Owner, "releaseCompletedSuccessfully", messageParms); }
protected async Task CreateBuildEngineProductAsync(Product product, PerformContext context) { var buildEngineJob = new BuildEngineJob { RequestId = product.Id.ToString(), GitUrl = product.Project.WorkflowProjectUrl, AppId = product.Project.Type.Name, PublisherId = product.Store.Name }; JobResponse jobResponse = null; if (SetBuildEngineEndpoint(product.Project.Organization)) { jobResponse = BuildEngineApi.CreateJob(buildEngineJob); } if ((jobResponse != null) && (jobResponse.Id != 0)) { product.WorkflowJobId = jobResponse.Id; await ProductRepository.UpdateAsync(product); var messageParms = new Dictionary <string, object>() { { "projectName", product.Project.Name }, { "productName", product.ProductDefinition.Name } }; await sendNotificationService.SendNotificationToUserAsync(product.Project.Owner, "productCreatedSuccessfully", messageParms); return; } else { var buildEngineUrl = product.Project.Organization.BuildEngineUrl + "/job-admin"; var messageParms = new Dictionary <string, object>() { { "projectName", product.Project.Name }, { "productName", product.ProductDefinition.Name }, { "buildEngineUrl", buildEngineUrl } }; await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "productCreationFailedOwner", "productCreationFailedAdmin", messageParms, buildEngineUrl); throw new Exception("Create job failed"); } }
private async Task SendNotificationForTask(UserTask task, User user, Product product) { var comment = task.Comment ?? ""; var messageParms = new Dictionary <string, object>() { { "activityName", task.ActivityName }, { "project", product.Project.Name }, { "productName", product.ProductDefinition.Name }, { "status", task.Status }, { "originator", product.Project.Owner.Name }, { "to", user.Name }, { "comment", task.Comment ?? "" } }; await SendNotificationService.SendNotificationToUserAsync(user, "userTaskAdded", messageParms); Log.Information($"Notification: task={task.Id}, user={user.Name}, product={product.Id}, messageParms={messageParms}"); }
public async Task ProductProcessChangedAsync(ProductProcessChangedArgs args) { // Clear PreExecute entries var emptyItems = ProductTransitionRepository.Get() .Where(pt => pt.WorkflowUserId == null && pt.ProductId == args.ProcessId) .Select(pt => pt.Id).ToList(); foreach (var item in emptyItems) { await ProductTransitionRepository.DeleteAsync(item); } // Create PreExecute entries await Runtime.PreExecuteFromCurrentActivityAsync(args.ProcessId); // Find the Product assoicated with the ProcessId var product = await ProductRepository.Get() .Where(p => p.Id == args.ProcessId) .Include(p => p.ProductDefinition) .Include(p => p.Project) .ThenInclude(pr => pr.Owner) .FirstOrDefaultAsync(); if (product == null) { Log.Error($"Could find Product for ProcessId={args.ProcessId}"); return; } await RemoveTasksByProductId(product.Id); // Find all users who could perform the current activity and create tasks for them var workflowUserIds = Runtime.GetAllActorsForDirectCommandTransitions(args.ProcessId, activityName: args.CurrentActivityName).ToList(); var users = UserRepository.Get().Where(u => workflowUserIds.Contains(u.WorkflowUserId.GetValueOrDefault().ToString())).ToList(); var workflowComment = product.WorkflowComment; foreach (var user in users) { var task = new UserTask { UserId = user.Id, ProductId = product.Id, ActivityName = args.CurrentActivityName, Status = args.CurrentState, Comment = workflowComment }; task = await TaskRepository.CreateAsync(task); var messageParms = new Dictionary <string, object>() { { "activityName", task.ActivityName }, { "project", product.Project.Name }, { "productName", product.ProductDefinition.Name }, { "fromActivity", args.PreviousActivityName ?? "" }, { "status", task.Status }, { "originator", user.Name }, { "to", product.Project.Owner.Name }, { "comment", task.Comment ?? "" } }; await SendNotificationService.SendNotificationToUserAsync(user, "userTaskAdded", messageParms); Log.Information($"Notification: user={user.Name}, command={args.ExecutingCommand}, fromActivity:{args.PreviousActivityName}, toActivity:{args.CurrentState}, comment:{product.WorkflowComment}"); } // Clear the WorkflowComment if (!String.IsNullOrWhiteSpace(workflowComment)) { // Clear the comment product.WorkflowComment = ""; await ProductRepository.UpdateAsync(product); } }