using AutoMapper; using Microsoft.AspNetCore.Mvc; using SimpleLIS.DTO; using SimpleLIS.Models; using SimpleLIS.Services; namespace SimpleLIS.Controllers; [ApiController] [Route("api/messages")] public class MessagesController : ControllerBase { private readonly MessageService _messageService; private readonly IMapper _mapper; public MessagesController(MessageService messageService, IMapper mapper) { _messageService = messageService; _mapper = mapper; } [HttpPost] public async Task CreateMessage([FromBody] MessageDTO messageDto) { if (!ModelState.IsValid) return BadRequest(ModelState); var message = _mapper.Map(messageDto); var createdMessage = await _messageService.CreateMessageAsync(message); var createdMessageDto = _mapper.Map(createdMessage); return Ok(createdMessageDto); } [HttpGet("{id}")] public async Task GetMessage(int id) { var message = await _messageService.GetMessageByIdAsync(id); if (message == null) return NotFound(); var messageDto = _mapper.Map(message); return Ok(messageDto); } [HttpGet] public async Task ListMessages() { var messages = await _messageService.ListMessagesAsync(); var messagesDto = _mapper.Map>(messages); return Ok(messagesDto); } // PUT: api/Messages/{id} [HttpPut("{id}")] public async Task UpdateMessage(int id, [FromBody] MessageDTO messageDto) { if (!ModelState.IsValid) return BadRequest(ModelState); if (!await _messageService.MessageExistsAsync(id)) { return NotFound(); } var message = _mapper.Map(messageDto); message.MessageId = id; // Ensure the correct ID is used var updatedMessage = await _messageService.UpdateMessageAsync(message); var updatedMessageDto = _mapper.Map(updatedMessage); return Ok(updatedMessageDto); } // DELETE: api/Messages/{id} [HttpDelete("{id}")] public async Task DeleteMessage(int id) { var deleted = await _messageService.DeleteMessageAsync(id); if (!deleted) return NotFound(); return NoContent(); } }