using Microsoft.AspNetCore.Mvc; /// /// Medication administration recording and lookup. /// [ApiController] [Produces("application/json")] public class MedicationsController : ControllerBase { private readonly IMedicationService _medications; public MedicationsController(IMedicationService medications) => _medications = medications; /// /// Records a medication administration for an encounter. /// /// Encounter id. /// Medication administration details. /// The created medication administration record. [HttpPost("api/v1/encounters/{encounterId:guid}/medications")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status201Created)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status409Conflict)] public async Task Create(Guid encounterId, [FromBody] CreateMedicationAdministrationRequest req) { var med = await _medications.CreateAsync(encounterId, req); return StatusCode(201, ApiResponse.Created(med)); } /// /// Lists medication administrations for an encounter with optional time filter. /// /// Encounter id. /// Optional ISO 8601 cutoff — only returns administrations at or after this time. /// Page number (1-based). /// Results per page. /// A paginated list of medication administrations. [HttpGet("api/v1/encounters/{encounterId:guid}/medications")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] public async Task ListByEncounter( Guid encounterId, [FromQuery] DateTimeOffset? since, [FromQuery] int page = 1, [FromQuery] int pageSize = 20) { var result = await _medications.ListByEncounterAsync(encounterId, since, page, pageSize); return Ok(ApiResponse.Ok(new { items = result.Items, page = result.Page, pageSize = result.PageSize, totalCount = result.TotalCount, totalPages = result.TotalPages })); } /// /// Gets a single medication administration by id. /// /// Medication administration id. /// The medication administration record. [HttpGet("api/v1/medications/{id:guid}")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)] public async Task Get(Guid id) { var med = await _medications.GetByIdAsync(id); return Ok(ApiResponse.Ok(med)); } }