From 40a3b657d97a11c22b8b0baa7d3471a28035ac6f Mon Sep 17 00:00:00 2001 From: Colin Dawson Date: Mon, 16 Mar 2026 22:39:01 +0000 Subject: [PATCH] Working on getMyAssignments --- .../e-suite.API.Common/GetMyAssignments.cs | 18 ++++++++++ .../e-suite.API.Common/GetWorkflowTemplate.cs | 1 - .../e-suite.API.Common/IActivityManager.cs | 2 ++ .../repository/IActivityRepository.cs | 1 + .../eSuite.API/Controllers/TasksController.cs | 10 +++--- .../Tables/Domain/Role.cs | 3 ++ .../ActivityManager.cs | 33 +++++++++++++++++++ .../repository/ActivityRepository.cs | 10 ++++++ 8 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 e-suite.API.Common/e-suite.API.Common/GetMyAssignments.cs diff --git a/e-suite.API.Common/e-suite.API.Common/GetMyAssignments.cs b/e-suite.API.Common/e-suite.API.Common/GetMyAssignments.cs new file mode 100644 index 0000000..2da6814 --- /dev/null +++ b/e-suite.API.Common/e-suite.API.Common/GetMyAssignments.cs @@ -0,0 +1,18 @@ +using e_suite.Database.Core.Models; +using eSuite.Core.Miscellaneous; + +namespace e_suite.API.Common; + +public class GetMyAssignments : IGeneralId +{ + public long Id { get; set; } + public Guid Guid { get; set; } + + public GeneralIdRef? User { get; set; } + + public GeneralIdRef? Role { get; set; } + public string TaskType { get; set; } + public string TaskName { get; set; } + public DateTimeOffset? StartDateTime { get; set; } + +} \ No newline at end of file diff --git a/e-suite.API.Common/e-suite.API.Common/GetWorkflowTemplate.cs b/e-suite.API.Common/e-suite.API.Common/GetWorkflowTemplate.cs index 49240a7..f5172cd 100644 --- a/e-suite.API.Common/e-suite.API.Common/GetWorkflowTemplate.cs +++ b/e-suite.API.Common/e-suite.API.Common/GetWorkflowTemplate.cs @@ -1,5 +1,4 @@ using e_suite.Database.Core.Models; -using e_suite.Database.Core.Tables.Workflow; namespace e_suite.API.Common; diff --git a/e-suite.API.Common/e-suite.API.Common/IActivityManager.cs b/e-suite.API.Common/e-suite.API.Common/IActivityManager.cs index 86ab271..933857c 100644 --- a/e-suite.API.Common/e-suite.API.Common/IActivityManager.cs +++ b/e-suite.API.Common/e-suite.API.Common/IActivityManager.cs @@ -1,8 +1,10 @@ using e_suite.Database.Audit; +using e_suite.Utilities.Pagination; namespace e_suite.API.Common; public interface IActivityManager { Task CreateActivity(AuditUserDetails auditUserDetails, CreateActivity template, CancellationToken cancellationToken); + Task> GetMyActiveAssignmentsAsync(AuditUserDetails auditUserDetails, Paging paging, CancellationToken cancellationToken); } \ No newline at end of file diff --git a/e-suite.API.Common/e-suite.API.Common/repository/IActivityRepository.cs b/e-suite.API.Common/e-suite.API.Common/repository/IActivityRepository.cs index 1a933a0..09748e0 100644 --- a/e-suite.API.Common/e-suite.API.Common/repository/IActivityRepository.cs +++ b/e-suite.API.Common/e-suite.API.Common/repository/IActivityRepository.cs @@ -23,4 +23,5 @@ public interface IActivityRepository : IRepository Task AddActivityTasksAsync(AuditUserDetails auditUserDetails, IEnumerable activityTasks, CancellationToken cancellationToken); Task UpdateActivityTasksAsync(AuditUserDetails auditUserDetails, ICollection tasks, CancellationToken cancellationToken); + IQueryable GetAssignments(); } \ No newline at end of file diff --git a/e-suite.API/eSuite.API/Controllers/TasksController.cs b/e-suite.API/eSuite.API/Controllers/TasksController.cs index 8498cc4..b87148b 100644 --- a/e-suite.API/eSuite.API/Controllers/TasksController.cs +++ b/e-suite.API/eSuite.API/Controllers/TasksController.cs @@ -14,11 +14,12 @@ namespace eSuite.API.Controllers; [ApiController] public class TasksController : ESuiteControllerBase { - private readonly IWorkflowTemplateManager _workflowTemplateManager; + private readonly IActivityManager _activityManager; + //private readonly IWorkflowTemplateManager _workflowTemplateManager; - public TasksController() + public TasksController(IActivityManager activityManager) { - + _activityManager = activityManager; } @@ -37,6 +38,7 @@ public class TasksController : ESuiteControllerBase CancellationToken cancellationToken = default! ) { - return Ok(); + var result = await _activityManager.GetMyActiveAssignmentsAsync(AuditUserDetails, paging, cancellationToken); + return Ok(result); } } \ No newline at end of file diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Domain/Role.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Domain/Role.cs index f0928a2..c321282 100644 --- a/e-suite.Database.Core/e-suite.Database.Core/Tables/Domain/Role.cs +++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Domain/Role.cs @@ -54,6 +54,9 @@ public class Role : IGeneralId, ISoftDeletable [ForeignKey(nameof(DomainId))] public virtual Domain Domain { get; set; } = null!; + [ForeignKey(nameof(Id))] + public virtual ICollection UserRoles { get; set; } + public static void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasData(new Role diff --git a/e-suite.Modules.RunningActivityManager/ActivityManager.cs b/e-suite.Modules.RunningActivityManager/ActivityManager.cs index 08210bf..9072db6 100644 --- a/e-suite.Modules.RunningActivityManager/ActivityManager.cs +++ b/e-suite.Modules.RunningActivityManager/ActivityManager.cs @@ -4,8 +4,12 @@ using e_suite.Database.Audit; using e_suite.Database.Core.Extensions; using e_suite.Database.Core.Tables.Activity; using e_suite.Messaging.Common; +using e_suite.Utilities.Pagination; using eSuite.Core.Miscellaneous; using Microsoft.EntityFrameworkCore; +using System.Linq.Expressions; +using System.Runtime.CompilerServices; +using eSuite.Core.Enums; namespace e_suite.Modules.RunningActivityManager; @@ -49,4 +53,33 @@ public class ActivityManager : IActivityManager if (progressActivityRef != null) _activityMessageSender.ProgressActivity(progressActivityRef); } + + public async Task> GetMyActiveAssignmentsAsync(AuditUserDetails auditUserDetails, Paging paging, CancellationToken cancellationToken) + { + var myAssignments = _activityRepository.GetAssignments().Where(x => x.Deleted == false ); + + myAssignments = myAssignments.Where(x => x.ActivityState == ActivityState.Active); + myAssignments = myAssignments.Where(x => x.UserId != null && x.UserId == auditUserDetails.UserId + || ( + x.Role.UserRoles.Any( u => u.UserId == auditUserDetails.UserId) + ) + ); + + var paginatedData = await PaginatedData.Paginate(myAssignments, paging, + MyActiveAssignmentsKeySelector, cancellationToken); + + return paginatedData; + } + + private Expression> MyActiveAssignmentsKeySelector(string sortKey) + { + return sortKey?.ToLowerInvariant() switch + { + "id" => x => x.Id, + "guid" => x => x.Guid, + "startdatetime" => x => x.StartDateTime, + "lastupdated" => x => x.LastUpdated, + _ => x => x.Id + }; + } } \ No newline at end of file diff --git a/e-suite.Modules.RunningActivityManager/repository/ActivityRepository.cs b/e-suite.Modules.RunningActivityManager/repository/ActivityRepository.cs index 1239874..a759c4e 100644 --- a/e-suite.Modules.RunningActivityManager/repository/ActivityRepository.cs +++ b/e-suite.Modules.RunningActivityManager/repository/ActivityRepository.cs @@ -57,4 +57,14 @@ public class ActivityRepository : RepositoryBase, IActivityRepository { await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken); } + + public IQueryable GetAssignments() + { + return DatabaseDbContext.ActivityAssignments + .Include( x => x.User) + .Include(x => x.Role) + .ThenInclude( x => x.UserRoles) + .ThenInclude( x=> x.User) + .Include(x => x.Task); + } } \ No newline at end of file