Spaces:
Running
Running
File size: 4,515 Bytes
4e645a3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using TaskTrackingSystem.Shared;
using TaskTrackingSystem.Shared.Enums;
using TaskTrackingSystem.Shared.Models.Issue;
using TaskTrackingSystem.WebApi.Infrastructure;
namespace TaskTrackingSystem.WebApi.Features.Issue
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class IssueController : ControllerBase
{
private readonly IssueService _issueService;
private readonly PermissionAuthorizationService _permissionAuthorizationService;
public IssueController(IssueService issueService, PermissionAuthorizationService permissionAuthorizationService)
{
_issueService = issueService;
_permissionAuthorizationService = permissionAuthorizationService;
}
[HttpGet]
[ProducesResponseType(typeof(PagedResult<IssueDto>), StatusCodes.Status200OK)]
public async Task<ActionResult> GetIssues(
[FromQuery] string? search,
[FromQuery] long? taskId,
[FromQuery] long? projectId,
[FromQuery] AppTaskStatus? statusId,
[FromQuery] TaskPriority? priorityId,
[FromQuery] bool assignedOnly = false,
[FromQuery] PaginationQuery? paging = null)
{
if (paging == null || (!paging.Page.HasValue && !paging.Limit.HasValue))
{
var issues = await _issueService.GetAllIssuesAsync(User.GetRoleId(), User.GetUserId());
return Ok(issues);
}
var page = PaginationExtensions.NormalizePage(paging.Page);
var limit = PaginationExtensions.NormalizePageSize(paging.Limit ?? 0);
var paged = await _issueService.GetPagedIssuesAsync(
User.GetRoleId(),
User.GetUserId(),
search,
taskId,
projectId,
statusId,
priorityId,
assignedOnly,
page,
limit);
return Ok(paged);
}
[HttpGet("{id}")]
public async Task<ActionResult<IssueDto>> GetIssue(long id)
{
var issue = await _issueService.GetIssueByIdAsync(id, User.GetRoleId(), User.GetUserId());
if (issue == null)
{
return NotFound(new { message = $"Issue with ID {id} not found." });
}
return Ok(issue);
}
[HttpGet("task/{taskId}")]
public async Task<ActionResult<IEnumerable<IssueDto>>> GetIssuesByTask(long taskId)
{
var issues = await _issueService.GetIssuesByTaskIdAsync(taskId, User.GetRoleId(), User.GetUserId());
return Ok(issues);
}
[HttpPost]
public async Task<ActionResult<Result<IssueDto>>> CreateIssue([FromBody] CreateIssueDto dto)
{
if (!await _permissionAuthorizationService.CanAccessAsync(User, "api/Issue", "Create"))
{
return StatusCode(403, Result<IssueDto>.Failure("You do not have permission to create issues.", 403));
}
var result = await _issueService.CreateIssueAsync(dto, User.GetRoleId(), User.GetUserId());
return StatusCode(result.StatusCode, result);
}
[HttpPut("{id}")]
public async Task<ActionResult<Result>> UpdateIssue(long id, [FromBody] UpdateIssueDto dto)
{
if (!await _permissionAuthorizationService.CanAccessAsync(User, "api/Issue", "Update"))
{
return StatusCode(403, Result.Failure("You do not have permission to update issues.", 403));
}
var result = await _issueService.UpdateIssueAsync(id, dto, User.GetRoleId(), User.GetUserId());
return StatusCode(result.StatusCode, result);
}
[HttpDelete("{id}")]
public async Task<ActionResult<Result>> DeleteIssue(long id)
{
if (!await _permissionAuthorizationService.CanAccessAsync(User, "api/Issue", "Delete"))
{
return StatusCode(403, Result.Failure("You do not have permission to delete issues.", 403));
}
var result = await _issueService.SoftDeleteIssueAsync(id, User.GetRoleId(), User.GetUserId());
return StatusCode(result.StatusCode, result);
}
}
}
|