45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
[ApiController]
|
|
[Route("fhir/Observation")]
|
|
[Produces("application/fhir+json")]
|
|
[Authorize]
|
|
public class FhirObservationController : ControllerBase
|
|
{
|
|
private readonly IFhirService _fhir;
|
|
|
|
public FhirObservationController(IFhirService fhir) => _fhir = fhir;
|
|
|
|
/// <summary>
|
|
/// FHIR read: GET /fhir/Observation/{id}
|
|
/// </summary>
|
|
[HttpGet("{id}")]
|
|
public async Task<IActionResult> Read(string id)
|
|
{
|
|
var observation = await _fhir.GetObservationAsync(Guid.Parse(id));
|
|
if (observation is null)
|
|
return NotFound(FhirErrorHelper.NotFound("Observation", id));
|
|
|
|
return Ok(observation);
|
|
}
|
|
|
|
/// <summary>
|
|
/// FHIR search: GET /fhir/Observation?patient=X&code=Y&date=Z&category=W
|
|
/// Supports search by patient reference, LOINC code, date range, and category.
|
|
/// </summary>
|
|
[HttpGet]
|
|
public async Task<IActionResult> Search(
|
|
[FromQuery] string? patient,
|
|
[FromQuery] string? code,
|
|
[FromQuery] string? date,
|
|
[FromQuery] string? category,
|
|
[FromQuery] string? encounter,
|
|
[FromQuery(Name = "_count")] int count = 50,
|
|
[FromQuery(Name = "_offset")] int offset = 0)
|
|
{
|
|
var bundle = await _fhir.SearchObservationsAsync(
|
|
patient, code, date, category, encounter, count, offset);
|
|
return Ok(bundle);
|
|
}
|
|
} |