using System.ComponentModel.DataAnnotations; using Kemkas.Web.Db.Models; using Kemkas.Web.Services.FirstEdition.Character; using Kemkas.Web.Services.Shared; using Kemkas.Web.ViewModels; using Microsoft.AspNetCore.Mvc; namespace Kemkas.Web.Controllers; /// /// First edition character endpoints /// /// /// /// /// [ApiController] [Route("[controller]")] public class Character1EController( ICharacterValidationService validationService, ICharacter1EDtoToDbModelService dtoToDbModelService, ICharacterDbModelToDto1EService dbModelToDto1EService, ICharacterPersistenceService persistenceService) : ControllerBase { [HttpPost] public async Task> StoreNewCharacter([FromBody] Character1eDto dto, [FromQuery]bool isPublic = true) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var errors = validationService.Validate(dto); if (errors != null) { return BadRequest(errors); } V1Karakter model; try { model = dtoToDbModelService.Convert(dto); } catch (ValidationException ex) { return BadRequest(ex.Message); } var id = await persistenceService.StoreNewCharacter1E(model, isPublic); return id; } [HttpGet("{id:guid}")] public async Task> GetCharacterById([FromRoute] Guid id) { var entity = await persistenceService.GetCharacter1EById(id); if (entity is null) { return NotFound(); } return dbModelToDto1EService.Convert(entity); } [HttpPost("{id:guid}")] public async Task> UpdateCharacter([FromRoute] Guid id, [FromBody] Character1eDto dto, [FromQuery]bool isPublic = true) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var errors = validationService.Validate(dto); if (errors != null) { return BadRequest(errors); } var original = await persistenceService.GetCharacter1EById(id, tracking: true); if (original is null) { return NotFound(); } dtoToDbModelService.Update(original, dto); await persistenceService.UpdateCharacter1E(original, isPublic); return id; } }