using AutoMapper; using Microsoft.AspNetCore.Mvc; using SimpleLIS.Models; using SimpleLIS.Services; namespace SimpleLIS.Controllers; [ApiController] [Route("api/patients")] public class PatientsController : ControllerBase { private readonly PatientService _patientService; private readonly IMapper _mapper; public PatientsController(PatientService patientService, IMapper mapper) { _patientService = patientService; _mapper = mapper; } // POST: api/Patients [HttpPost] public async Task CreatePatient([FromBody] PatientDTO patientDto) { if (!ModelState.IsValid) return BadRequest(ModelState); var patient = _mapper.Map(patientDto); var createdPatient = await _patientService.CreatePatientAsync(patient); var createdPatientDto = _mapper.Map(createdPatient); return Ok(createdPatientDto); } [HttpGet("{id}")] public async Task GetPatient(int id) { var patient = await _patientService.GetPatientByIdAsync(id); if (patient == null) return NotFound(); var patientDto = _mapper.Map(patient); return Ok(patientDto); } [HttpGet] public async Task ListPatients() { var patients = await _patientService.ListPatientsAsync(); var patientsDto = _mapper.Map>(patients); return Ok(patientsDto); } [HttpPut("{id}")] public async Task UpdatePatient(int id, [FromBody] PatientDTO patientDto) { if (!ModelState.IsValid) return BadRequest(ModelState); if (!await _patientService.PatientExistsAsync(id)) { return NotFound(); } var patient = _mapper.Map(patientDto); patient.PatientId = id; var updatedPatient = await _patientService.UpdatePatientAsync(patient); var updatedPatientDto = _mapper.Map(updatedPatient); return Ok(updatedPatientDto); } [HttpDelete("{id}")] public async Task DeletePatient(int id) { var deleted = await _patientService.DeletePatientAsync(id); if (!deleted) return NotFound(); return NoContent(); } }