blob: d60f974eac4611828358df1b1e5fc41852350591 (
plain) (
blame)
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
|
using MR.AspNetCore.Pagination;
namespace IOL.GreatOffice.Api.Endpoints.V1.Projects;
public class GetProjectsRoute : RouteBaseAsync.WithRequest<GetProjectsQueryParameters>.WithActionResult<KeysetPaginationResult<GetProjectsResponseDto>>
{
private readonly MainAppDatabase _database;
private readonly PaginationService _pagination;
public GetProjectsRoute(MainAppDatabase database, PaginationService pagination) {
_database = database;
_pagination = pagination;
}
[HttpGet("~/v{version:apiVersion}/projects")]
public override async Task<ActionResult<KeysetPaginationResult<GetProjectsResponseDto>>> HandleAsync(GetProjectsQueryParameters request, CancellationToken cancellationToken = default) {
var result = await _pagination.KeysetPaginateAsync(
_database.Projects.ForTenant(LoggedInUser),
b => b.Descending(x => x.CreatedAt),
async id => await _database.Projects.FindAsync(id),
query => query.Select(p => new GetProjectsResponseDto() {
Id = p.Id,
Name = p.Name
})
);
return Ok(result);
}
}
public class GetProjectsResponseDto
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class GetProjectsQueryParameters
{
[FromQuery]
public int Page { get; set; }
[FromQuery]
public int Size { get; set; }
}
|