-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathBugsController.cs
88 lines (72 loc) · 3.17 KB
/
BugsController.cs
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
using BugLab.API.Extensions;
using BugLab.Business.Commands.Bugs;
using BugLab.Business.Interfaces;
using BugLab.Business.Queries.Bugs;
using BugLab.Data.Extensions;
using BugLab.Shared.QueryParams;
using BugLab.Shared.Requests.Bugs;
using BugLab.Shared.Responses;
using Mapster;
using MediatR;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace BugLab.API.Controllers
{
public class BugsController : BaseApiController
{
private readonly IAuthService _authService;
public BugsController(IMediator mediator, IAuthService authService) : base(mediator)
{
_authService = authService;
}
[HttpGet("{id}", Name = nameof(GetBug))]
public async Task<ActionResult<BugResponse>> GetBug(int id, CancellationToken cancellationToken)
{
var bug = await _mediator.Send(new GetBugQuery(id), cancellationToken);
return bug;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<BugResponse>>> GetBugs([FromQuery] BugParams queryParams, CancellationToken cancellationToken)
{
var query = new GetBugsQuery(User.UserId());
var bugs = await _mediator.Send(queryParams.Adapt(query), cancellationToken);
Response.AddPaginationHeader(bugs.PageNumber, bugs.PageSize, bugs.TotalPages, bugs.TotalItems);
return Ok(bugs);
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBug(int id, CancellationToken cancellationToken)
{
await _authService.HasAccessToBug(User.UserId(), id);
await _mediator.Send(new DeleteBugCommand(id), cancellationToken);
return NoContent();
}
[HttpPost]
public async Task<IActionResult> AddBug(AddBugRequest request, CancellationToken cancellationToken)
{
await _authService.HasAccessToProject(User.UserId(), request.ProjectId);
var id = await _mediator.Send(request.Adapt<AddBugCommand>(), cancellationToken);
return CreatedAtRoute(nameof(GetBug), new { id }, id);
}
[HttpPatch("{id}")]
public async Task<IActionResult> PartialUpdateBug(int id, JsonPatchDocument<UpdateBugRequest> document, CancellationToken cancellationToken)
{
await _authService.HasAccessToBug(User.UserId(), id);
var request = new UpdateBugRequest();
document.ApplyTo(request);
var command = new UpdateBugCommand(id, request.Title, request.Description, request.Priority, request.Status,
request.TypeId, request.AssignedToId, request.SprintId, true);
await _mediator.Send(command, cancellationToken);
return NoContent();
}
[HttpPut("{id}")]
public async Task<IActionResult> UpdateBug(int id, UpdateBugRequest request, CancellationToken cancellationToken)
{
await _authService.HasAccessToBug(User.UserId(), id);
await _mediator.Send(request.Adapt<UpdateBugCommand>(), cancellationToken);
return NoContent();
}
}
}