# Conflicts: # ServiceHost/Areas/Admin/Controllers/ProgramManager/ProjectController.cs
180 lines
7.1 KiB
C#
180 lines
7.1 KiB
C#
using System.Runtime.InteropServices;
|
|
using GozareshgirProgramManager.Application._Common.Models;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.ApproveTaskSectionCompletion;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AssignProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AutoStopOverTimeTaskSections;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AutoUpdateDeployStatus;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeDeployStatusProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeStatusSection;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.CreateProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.DeleteProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.EditProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.SetTimeProject;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.TransferSection;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.GetProjectAssignDetails;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.GetProjectsList;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.ProjectBoardDetail;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.ProjectBoardList;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.ProjectDeployBoardDetail;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.ProjectDeployBoardList;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.ProjectSetTimeDetails;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Queries.GetProjectHierarchySearch;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using ServiceHost.BaseControllers;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeTaskPriority;
|
|
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AutoPendingFullTimeTaskSections;
|
|
|
|
namespace ServiceHost.Areas.Admin.Controllers.ProgramManager;
|
|
|
|
public class ProjectController : ProgramManagerBaseController
|
|
{
|
|
private readonly IMediator _mediator;
|
|
|
|
public ProjectController(IMediator mediator)
|
|
{
|
|
_mediator = mediator;
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<ActionResult<OperationResult<GetProjectsListResponse>>> Get(
|
|
[FromQuery] GetProjectsListQuery query)
|
|
{
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("search")]
|
|
public async Task<ActionResult<OperationResult<GetProjectSearchResponse>>> Search(
|
|
[FromQuery] string search)
|
|
{
|
|
var searchQuery = new GetProjectSearchQuery(search);
|
|
var res = await _mediator.Send(searchQuery);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ActionResult<OperationResult>> Create([FromBody] CreateProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpPut]
|
|
public async Task<ActionResult<OperationResult>> Edit([FromBody] EditProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpDelete]
|
|
public async Task<ActionResult<OperationResult>> Delete([FromQuery] DeleteProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("assign")]
|
|
public async Task<ActionResult<OperationResult<GetProjectAssignDetailsResponse>>> GetAssignableProjects(
|
|
GetProjectAssignDetailsQuery query)
|
|
{
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("assign")]
|
|
public async Task<ActionResult<OperationResult>> Assign(AssignProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("set-time")]
|
|
public async Task<ActionResult<OperationResult<ProjectSetTimeResponse>>> GetSetTimeProjectDetails(
|
|
ProjectSetTimeDetailsQuery query)
|
|
{
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("set-time")]
|
|
public async Task<ActionResult<OperationResult>> SetTimeProject(SetTimeProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("change-status")]
|
|
public async Task<ActionResult<OperationResult>> ChangeStatus(ChangeStatusSectionCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("transfer-section")]
|
|
public async Task<ActionResult<OperationResult>> TransferSection([FromBody] TransferSectionCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("board")]
|
|
public async Task<ActionResult<OperationResult<List<ProjectBoardListResponse>>>> GetProjectBoard(
|
|
[FromQuery] ProjectBoardListQuery query)
|
|
{
|
|
// اجرای Command برای متوقف کردن تسکهای overtime قبل از نمایش
|
|
await _mediator.Send(new AutoStopOverTimeTaskSectionsCommand());
|
|
// سپس تسکهایی که به 100% زمان تخمینی رسیدهاند را به حالت PendingForCompletion ببریم
|
|
await _mediator.Send(new AutoPendingFullTimeTaskSectionsCommand());
|
|
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("board/details")]
|
|
public async Task<ActionResult<OperationResult<ProjectBoardDetailResponse>>> GetProjectBoardDetails(Guid id)
|
|
{
|
|
var query = new ProjectBoardDetailQuery(id);
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpGet("deploy-board")]
|
|
public async Task<ActionResult<OperationResult<GetProjectsDeployBoardListResponse>>> GetProjectDeployBoard()
|
|
{
|
|
// قبل از دریافت دیتا، وضعیت دیپلوی را بر اساس تکمیل شدن تمام سکشنها بهروزرسانی میکنیم
|
|
await _mediator.Send(new AutoUpdateDeployStatusCommand());
|
|
var request = new GetProjectDeployBoardListQuery();
|
|
return await _mediator.Send(request);
|
|
}
|
|
|
|
[HttpGet("deploy-board/details")]
|
|
public async Task<ActionResult<OperationResult<ProjectDeployBoardDetailsResponse>>> GetProjectDeployBoardDetails(Guid id)
|
|
{
|
|
var query = new ProjectDeployBoardDetailsQuery(id);
|
|
var res = await _mediator.Send(query);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("deploy-board/change-status")]
|
|
public async Task<ActionResult<OperationResult>> ChangeDeployStatus(ChangeDeployStatusProjectCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("approve-completion")]
|
|
public async Task<ActionResult<OperationResult>> ApproveTaskSectionCompletion([FromBody] ApproveTaskSectionCompletionCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
[HttpPost("change-priority")]
|
|
public async Task<ActionResult<OperationResult>> ChangePriority([FromBody] ChangeTaskPriorityCommand command)
|
|
{
|
|
var res = await _mediator.Send(command);
|
|
return res;
|
|
}
|
|
|
|
} |