feature: RBAC + Clinical Audit Logging
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
|
||||
@@ -6,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
[Authorize]
|
||||
public class OrdersController : ControllerBase
|
||||
{
|
||||
private readonly IOrderService _orders;
|
||||
@@ -16,6 +18,7 @@ public class OrdersController : ControllerBase
|
||||
/// Creates a new clinical order for an encounter.
|
||||
/// </summary>
|
||||
[HttpPost("api/v1/encounters/{encounterId:guid}/orders")]
|
||||
[AuthorizePermission(ClinicalPermissions.OrdersWrite)]
|
||||
[ProducesResponseType(typeof(ApiResponse<Order>), StatusCodes.Status201Created)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status409Conflict)]
|
||||
@@ -29,6 +32,7 @@ public class OrdersController : ControllerBase
|
||||
/// Lists orders for an encounter with optional status filter.
|
||||
/// </summary>
|
||||
[HttpGet("api/v1/encounters/{encounterId:guid}/orders")]
|
||||
[AuthorizePermission(ClinicalPermissions.EncountersRead)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status400BadRequest)]
|
||||
public async Task<IActionResult> ListByEncounter(
|
||||
@@ -65,6 +69,7 @@ public class OrdersController : ControllerBase
|
||||
/// Gets a single order by id with its encounter.
|
||||
/// </summary>
|
||||
[HttpGet("api/v1/orders/{id:guid}")]
|
||||
[AuthorizePermission(ClinicalPermissions.EncountersRead)]
|
||||
[ProducesResponseType(typeof(ApiResponse<Order>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
|
||||
public async Task<IActionResult> Get(Guid id)
|
||||
@@ -77,6 +82,7 @@ public class OrdersController : ControllerBase
|
||||
/// Transitions an order to a new status.
|
||||
/// </summary>
|
||||
[HttpPatch("api/v1/orders/{id:guid}/status")]
|
||||
[AuthorizePermission(ClinicalPermissions.OrdersWrite)]
|
||||
[ProducesResponseType(typeof(ApiResponse<Order>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status409Conflict)]
|
||||
@@ -90,6 +96,7 @@ public class OrdersController : ControllerBase
|
||||
/// Records a result for an order, transitioning it to Resulted status.
|
||||
/// </summary>
|
||||
[HttpPatch("api/v1/orders/{id:guid}/result")]
|
||||
[AuthorizePermission(ClinicalPermissions.OrdersWrite)]
|
||||
[ProducesResponseType(typeof(ApiResponse<Order>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status404NotFound)]
|
||||
[ProducesResponseType(typeof(ApiResponse<object>), StatusCodes.Status409Conflict)]
|
||||
@@ -98,4 +105,4 @@ public class OrdersController : ControllerBase
|
||||
var order = await _orders.RecordResultAsync(id, req);
|
||||
return Ok(ApiResponse<Order>.Ok(order));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user