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; /// /// FHIR read: GET /fhir/Observation/{id} /// [HttpGet("{id}")] public async Task Read(string id) { var observation = await _fhir.GetObservationAsync(Guid.Parse(id)); if (observation is null) return NotFound(FhirErrorHelper.NotFound("Observation", id)); return Ok(observation); } /// /// FHIR search: GET /fhir/Observation?patient=X&code=Y&date=Z&category=W /// Supports search by patient reference, LOINC code, date range, and category. /// [HttpGet] public async Task 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); } }