using Bit.SeederApi.Models.Request; using Bit.SeederApi.Models.Response; using Bit.SeederApi.Services; using Microsoft.AspNetCore.Mvc; namespace Bit.SeederApi.Controllers; [Route("seed")] public class SeedController(ILogger logger, ISceneService sceneService) : Controller { [HttpPost] public async Task SeedAsync([FromBody] SeedRequestModel request) { logger.LogInformation("Received seed request with template: {Template}", request.Template); try { var response = await sceneService.ExecuteScene(request.Template, request.Arguments); return Json(response); } catch (SceneNotFoundException ex) { return NotFound(new { Error = ex.Message }); } catch (SceneExecutionException ex) { logger.LogError(ex, "Error executing scene: {Template}", request.Template); return BadRequest(new { Error = ex.Message, Details = ex.InnerException?.Message }); } } [HttpDelete("batch")] public async Task DeleteBatchAsync([FromBody] List playIds) { logger.LogInformation("Deleting batch of seeded data with IDs: {PlayIds}", string.Join(", ", playIds)); try { await sceneService.DestroyScenes(playIds); return Ok(new { Message = "Batch delete completed successfully" }); } catch (AggregateException ex) { return BadRequest(new { Error = ex.Message, Details = ex.InnerExceptions.Select(e => e.Message).ToList() }); } } [HttpDelete("{playId}")] public async Task DeleteAsync([FromRoute] string playId) { logger.LogInformation("Deleting seeded data with ID: {PlayId}", playId); try { var result = await sceneService.DestroyScene(playId); return Json(result); } catch (SceneExecutionException ex) { logger.LogError(ex, "Error deleting seeded data: {PlayId}", playId); return BadRequest(new { Error = ex.Message, Details = ex.InnerException?.Message }); } } [HttpDelete] public async Task DeleteAllAsync() { logger.LogInformation("Deleting all seeded data"); var playIds = sceneService.GetAllPlayIds(); try { await sceneService.DestroyScenes(playIds); return NoContent(); } catch (AggregateException ex) { return BadRequest(new { Error = ex.Message, Details = ex.InnerExceptions.Select(e => e.Message).ToList() }); } } }