AOC2021/AOC2021/Controllers/AdventOfCodeController.cs
2021-12-16 10:43:18 -08:00

58 lines
1.8 KiB
C#

using AOC2021.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
namespace AOC2021.Controllers
{
[ApiController]
[Route("[controller]")]
public class AdventOfCodeController : ControllerBase
{
private readonly ILogger<AdventOfCodeController> _logger;
public AdventOfCodeController(ILogger<AdventOfCodeController> logger)
{
_logger = logger;
}
[HttpPost]
[Consumes("text/plain")]
[Route("day1")]
[Route("day2")]
[Route("day3")]
[Route("day4")]
[Route("day5")]
[Route("day6")]
[Route("day7")]
public AOCResponse Day(AOCVersion version, [FromBody] string input, bool IgnoreLogMessages = false)
{
AOCRequest request = new AOCRequest() { Input = input, Version = version, IgnoreLogMessages = IgnoreLogMessages };
var splitRoute = this.ControllerContext.HttpContext.Request.Path.ToString().Split("/");
string requestedRoute = splitRoute[splitRoute.Length - 1]; //Get the last endpoint value.
return GetAOCDay(requestedRoute).ExecuteDay(request);
}
private AOCDay GetAOCDay(string route)
{
AOCDay day = null;
var type = typeof(AOCDay);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p) && !p.IsInterface && !p.IsAbstract);
foreach (var x in types)
{
if (x.Name.ToLower() == route.ToLower())
{
day = (AOCDay) (IAOCService)Activator.CreateInstance(x);
day.SetLogger(this._logger);
}
}
return (AOCDay) day;
}
}
}