From 16b11a8bb8783c9e90469921ec55f8aa62dba406 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 6 Jan 2026 10:51:56 +0330 Subject: [PATCH 1/3] feat: add ChangePriority method to ProjectController for task priority updates --- .../Admin/Controllers/ProgramManager/ProjectController.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs index 95d6da94..c3e0441b 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs @@ -165,4 +165,11 @@ public class ProjectController : ProgramManagerBaseController var res = await _mediator.Send(command); return res; } + + public async Task> ChangePriority(ChangeTaskPriorityCommand command) + { + var res = await _mediator.Send(command); + return res; + } + } \ No newline at end of file From a9789023ac85b1ab5ba3fb962aa2392f00ad308f Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 6 Jan 2026 13:46:45 +0330 Subject: [PATCH 2/3] feat: add HTTP POST endpoint for ChangePriority method in ProjectController --- .../Admin/Controllers/ProgramManager/ProjectController.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs index c3e0441b..290c5cab 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs @@ -166,7 +166,8 @@ public class ProjectController : ProgramManagerBaseController return res; } - public async Task> ChangePriority(ChangeTaskPriorityCommand command) + [HttpPost("change-priority")] + public async Task> ChangePriority([FromBody] ChangeTaskPriorityCommand command) { var res = await _mediator.Send(command); return res; From 2bea2659895fffce4709202c5b4d686ef1defd73 Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 7 Jan 2026 12:11:24 +0330 Subject: [PATCH 3/3] feat: implement task priority change command and update project/task DTOs --- .../ChangeTaskPriorityCommand.cs | 41 +++++++++++++++++++ .../GetProjectsListQueryHandler.cs | 1 + .../Queries/GetProjectsList/GetTaskListDto.cs | 1 + .../ProgramManager/ProjectController.cs | 1 + 4 files changed, 44 insertions(+) create mode 100644 ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Commands/ChangeTaskPriority/ChangeTaskPriorityCommand.cs diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Commands/ChangeTaskPriority/ChangeTaskPriorityCommand.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Commands/ChangeTaskPriority/ChangeTaskPriorityCommand.cs new file mode 100644 index 00000000..23d23830 --- /dev/null +++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Commands/ChangeTaskPriority/ChangeTaskPriorityCommand.cs @@ -0,0 +1,41 @@ +using GozareshgirProgramManager.Application._Common.Interfaces; +using GozareshgirProgramManager.Application._Common.Models; +using GozareshgirProgramManager.Domain._Common; +using GozareshgirProgramManager.Domain.ProjectAgg.Enums; +using GozareshgirProgramManager.Domain.ProjectAgg.Repositories; + +namespace GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeTaskPriority; + +/// +/// Command to change a task priority. +/// +public record ChangeTaskPriorityCommand(Guid TaskId, TaskPriority Priority) : IBaseCommand; + +public class ChangeTaskPriorityCommandHandler : IBaseCommandHandler +{ + private readonly IProjectTaskRepository _taskRepository; + private readonly IUnitOfWork _unitOfWork; + + public ChangeTaskPriorityCommandHandler(IProjectTaskRepository taskRepository, IUnitOfWork unitOfWork) + { + _taskRepository = taskRepository; + _unitOfWork = unitOfWork; + } + + public async Task Handle(ChangeTaskPriorityCommand request, CancellationToken cancellationToken) + { + var task = await _taskRepository.GetByIdAsync(request.TaskId, cancellationToken); + if (task is null) + return OperationResult.NotFound("تسک یافت نشد"); + + // Idempotent: if already same priority, skip extra work + if (task.Priority != request.Priority) + { + task.SetPriority(request.Priority); + } + + await _unitOfWork.SaveChangesAsync(cancellationToken); + return OperationResult.Success(); + } +} + diff --git a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/GetProjectsList/GetProjectsListQueryHandler.cs b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/GetProjectsList/GetProjectsListQueryHandler.cs index d26a06b1..a982caf3 100644 --- a/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/GetProjectsList/GetProjectsListQueryHandler.cs +++ b/ProgramManager/src/Application/GozareshgirProgramManager.Application/Modules/Projects/Queries/GetProjectsList/GetProjectsListQueryHandler.cs @@ -189,6 +189,7 @@ public class GetProjectsListQueryHandler : IBaseQueryHandler Sections { get; init; } } diff --git a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs index 290c5cab..fe3dbb6f 100644 --- a/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs @@ -22,6 +22,7 @@ using GozareshgirProgramManager.Application.Modules.Projects.Queries.GetProjectH using MediatR; using Microsoft.AspNetCore.Mvc; using ServiceHost.BaseControllers; +using GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeTaskPriority; namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;