Do Pagination missing sortBy and sortDirection parameters

This commit is contained in:
voltsrage
2026-06-27 16:14:52 +08:00
parent 299e6e1453
commit 1c7e7fee7d
19 changed files with 2082 additions and 102 deletions
@@ -124,13 +124,15 @@ public class DigitizationBatchesController : ControllerBase
[FromQuery] Guid? assignedTo,
[FromQuery] string? track,
[FromQuery] int page = 1,
[FromQuery] int pageSize = 20)
[FromQuery] int pageSize = 20,
[FromQuery] string sortBy = "createdAt",
[FromQuery] string sortDirection = "desc")
{
BatchStatus? parsedStatus = string.IsNullOrEmpty(status) ? null : BatchStatusExtensions.FromDbString(status.ToUpperInvariant());
BatchType? parsedBatchType = string.IsNullOrEmpty(batchType) ? null : BatchTypeExtensions.FromDbString(batchType.ToUpperInvariant());
BatchTrack? parsedTrack = string.IsNullOrEmpty(track) ? null : BatchTrackExtensions.FromDbString(track.ToUpperInvariant());
var result = await _batches.ListAsync(parsedStatus, parsedBatchType, assignedTo, parsedTrack, page, pageSize);
var result = await _batches.ListAsync(parsedStatus, parsedBatchType, assignedTo, parsedTrack, page, pageSize, sortBy, sortDirection);
return Ok(ApiResponse<BatchListResponse>.Ok(new BatchListResponse(
result.Items.Select(b => BatchDetailResponse.FromEntity(b)).ToList(),
result.Page,
@@ -154,6 +156,23 @@ public class DigitizationBatchesController : ControllerBase
return Ok(ApiResponse<BatchDetailResponse>.Ok(BatchDetailResponse.FromEntity(batch)));
}
/// <summary>
/// Cancels a batch permanently. Only batches in UPLOADED, IN_ENTRY, or REJECTED
/// status can be cancelled. Admin only.
/// </summary>
[HttpPost("{id:guid}/cancel")]
[Authorize(Roles = "ADMINISTRATOR")]
[ProducesResponseType(typeof(ApiResponse<BatchDetailResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status409Conflict)]
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status422UnprocessableEntity)]
public async Task<IActionResult> Cancel(Guid id, [FromBody] CancelBatchRequest req)
{
var actorUserId = Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!);
var batch = await _batches.CancelAsync(id, req.Reason, actorUserId);
return Ok(ApiResponse<BatchDetailResponse>.Ok(BatchDetailResponse.FromEntity(batch)));
}
/// <summary>
/// Promotes an approved batch to live clinical data. For correction batches,
/// marks the original batch's live observations as superseded (append-only).
@@ -29,9 +29,11 @@ public class WorkQueueController : ControllerBase
[ProducesResponseType(typeof(ApiResponse<WorkQueueResponse>), StatusCodes.Status200OK)]
public async Task<IActionResult> GetVerificationQueue(
[FromQuery] int page = 1,
[FromQuery] int pageSize = 20)
[FromQuery] int pageSize = 20,
[FromQuery] string sortBy = "updatedAt",
[FromQuery] string sortDirection = "asc")
{
var result = await _workQueue.GetVerificationQueueAsync(page, pageSize);
var result = await _workQueue.GetVerificationQueueAsync(page, pageSize, sortBy, sortDirection);
return Ok(ApiResponse<WorkQueueResponse>.Ok(result));
}
@@ -46,9 +48,11 @@ public class WorkQueueController : ControllerBase
[ProducesResponseType(typeof(ApiResponse<WorkQueueResponse>), StatusCodes.Status200OK)]
public async Task<IActionResult> GetEntryQueue(
[FromQuery] int page = 1,
[FromQuery] int pageSize = 20)
[FromQuery] int pageSize = 20,
[FromQuery] string sortBy = "updatedAt",
[FromQuery] string sortDirection = "asc")
{
var result = await _workQueue.GetEntryQueueAsync(page, pageSize);
var result = await _workQueue.GetEntryQueueAsync(page, pageSize, sortBy, sortDirection);
return Ok(ApiResponse<WorkQueueResponse>.Ok(result));
}
@@ -63,9 +67,11 @@ public class WorkQueueController : ControllerBase
[ProducesResponseType(typeof(ApiResponse<WorkQueueResponse>), StatusCodes.Status200OK)]
public async Task<IActionResult> GetClinicalApprovalQueue(
[FromQuery] int page = 1,
[FromQuery] int pageSize = 20)
[FromQuery] int pageSize = 20,
[FromQuery] string sortBy = "updatedAt",
[FromQuery] string sortDirection = "asc")
{
var result = await _workQueue.GetClinicalApprovalQueueAsync(page, pageSize);
var result = await _workQueue.GetClinicalApprovalQueueAsync(page, pageSize, sortBy, sortDirection);
return Ok(ApiResponse<WorkQueueResponse>.Ok(result));
}