diff --git a/src/Api/Controllers/BorrowsController.cs b/src/Api/Controllers/BorrowsController.cs index 394e8fb8..484c3949 100644 --- a/src/Api/Controllers/BorrowsController.cs +++ b/src/Api/Controllers/BorrowsController.cs @@ -151,7 +151,7 @@ public async Task>>> GetAllRequests /// /// /// - [RequiresRole(IdentityData.Roles.Employee)] + [RequiresRole(IdentityData.Roles.Admin, IdentityData.Roles.Staff)] [HttpGet("documents/{documentId:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status403Forbidden)] @@ -168,6 +168,7 @@ public async Task>>> GetAllRequests Size = queryParameters.Size, SortBy = queryParameters.SortBy, SortOrder = queryParameters.SortOrder, + Status = queryParameters.Status, }; var result = await Mediator.Send(command); return Ok(Result>.Succeed(result)); diff --git a/src/Api/Controllers/Payload/Requests/Borrows/GetAllBorrowRequestsPaginatedForDocumentQueryParameters.cs b/src/Api/Controllers/Payload/Requests/Borrows/GetAllBorrowRequestsPaginatedForDocumentQueryParameters.cs index a44619fe..ca2c22b7 100644 --- a/src/Api/Controllers/Payload/Requests/Borrows/GetAllBorrowRequestsPaginatedForDocumentQueryParameters.cs +++ b/src/Api/Controllers/Payload/Requests/Borrows/GetAllBorrowRequestsPaginatedForDocumentQueryParameters.cs @@ -2,5 +2,5 @@ namespace Api.Controllers.Payload.Requests.Borrows; public class GetAllBorrowRequestsPaginatedForDocumentQueryParameters : PaginatedQueryParameters { - + public string? Status { get; set; } } \ No newline at end of file diff --git a/src/Application/Borrows/Commands/BorrowDocument.cs b/src/Application/Borrows/Commands/BorrowDocument.cs index 602003bc..ad1df6fd 100644 --- a/src/Application/Borrows/Commands/BorrowDocument.cs +++ b/src/Application/Borrows/Commands/BorrowDocument.cs @@ -105,7 +105,9 @@ public async Task Handle(Command request, CancellationToken cancellat { // Does not make sense if the same person go up and want to borrow the same document again // even if the borrow day will be after the due day - if (existedBorrow.Borrower.Id == request.BorrowerId) + if (existedBorrow.Borrower.Id == request.BorrowerId + && existedBorrow.Status is BorrowRequestStatus.Pending + or BorrowRequestStatus.Approved) { throw new ConflictException("This document is already requested borrow from the same user."); } diff --git a/src/Application/Borrows/Queries/GetAllBorrowRequestsPaginated.cs b/src/Application/Borrows/Queries/GetAllBorrowRequestsPaginated.cs index bc5c138e..5e30d3ec 100644 --- a/src/Application/Borrows/Queries/GetAllBorrowRequestsPaginated.cs +++ b/src/Application/Borrows/Queries/GetAllBorrowRequestsPaginated.cs @@ -4,6 +4,7 @@ using Application.Common.Models; using Application.Common.Models.Dtos.Physical; using AutoMapper; +using Domain.Statuses; using FluentValidation; using MediatR; using Microsoft.EntityFrameworkCore; @@ -29,6 +30,7 @@ public record Query : IRequest> public int? Size { get; init; } public string? SortBy { get; init; } public string? SortOrder { get; init; } + public string? Status { get; init; } } public class QueryHandler : IRequestHandler> @@ -71,6 +73,21 @@ public async Task> Handle(Query request, { borrows = borrows.Where(x => x.Document.Id == request.DocumentId); } + + if (request.Status is not null) + { + var statuses = request.Status.Split(","); + var enums = new List(); + foreach (var status in statuses) + { + if (Enum.TryParse(status, true, out BorrowRequestStatus s)) + { + enums.Add(s); + } + } + + borrows = borrows.Where(x => enums.Contains(x.Status)); + } var sortBy = request.SortBy; if (sortBy is null || !sortBy.MatchesPropertyName())