using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application.Modules.TaskSectionTimeRequests.Commands.AcceptTimeRequest; using GozareshgirProgramManager.Application.Modules.TaskSectionTimeRequests.Commands.CreateTimeRequest; using GozareshgirProgramManager.Application.Modules.TaskSectionTimeRequests.Queries.CreateTimeRequestDetails; using GozareshgirProgramManager.Domain.ProjectAgg.Entities.Task.TaskSection; using GozareshgirProgramManager.Domain.ProjectAgg.Enums; using MediatR; using Microsoft.AspNetCore.Mvc; using ServiceHost.BaseControllers; namespace ServiceHost.Areas.Admin.Controllers.ProgramManager; public class TimeRequestController:ProgramManagerBaseController { private readonly IMediator _mediator; public TimeRequestController(IMediator mediator) { _mediator = mediator; } [HttpGet("Rejected")] public async Task> GetCreateRejectedTimeRequest(Guid taskSectionId) { var command = new CreateTimeRequestDetailsQuery(taskSectionId); var res = await _mediator.Send(command); return res; } [HttpPost("Rejected")] public async Task> CreateRejectedTimeRequest(CreateTimeRequest request) { var command = new CreateTimeRequestCommand(request.Hours, request.Minutes, request.Description, TaskSectionTimeRequestType.RejectedTime,request.TaskSectionId); var res = await _mediator.Send(command); return res; } [HttpPost("Initial")] public async Task> CreateInitialTimeRequest(CreateTimeRequest request) { var command = new CreateTimeRequestCommand(request.Hours, request.Minutes, request.Description, TaskSectionTimeRequestType.InitialTime,request.TaskSectionId); var res = await _mediator.Send(command); return res; } [HttpPost("Additional")] public async Task> CreateAdditionalTimeRequest(CreateTimeRequest request) { var command = new CreateTimeRequestCommand(request.Hours, request.Minutes, request.Description, TaskSectionTimeRequestType.AdditionalTime,request.TaskSectionId); var res = await _mediator.Send(command); return res; } [HttpPost("Accept")] public async Task> AcceptTimeRequest(AcceptTimeRequestDto request) { var command = new AcceptTimeRequestCommand(request.TimeRequestId, request.SectionId, request.TimeType, request.Hour, request.Minute); var res = await _mediator.Send(command); return res; } } public record CreateTimeRequest(int Hours, int Minutes, string Description,Guid TaskSectionId); public record AcceptTimeRequestDto(Guid TimeRequestId, Guid SectionId, TaskSectionAdditionalTimeType TimeType, int Hour, int Minute);