using Microsoft.AspNetCore.Mvc.ApplicationModels;
namespace SVSim.EmulatedEntrypoint.Conventions;
///
/// Ensures controllers go to the correct swagger definition.
///
public class SwaggerDefinitionConvention : IControllerModelConvention
{
///
public void Apply(ControllerModel controller)
{
var controllerNamespace = controller.ControllerType.Namespace; // eg. Controllers.V1
var swaggerDefinition = controllerNamespace.Split('.').Last().ToLower();
const string defaultRoute = "api/[controller]";
controller.ApiExplorer.GroupName = swaggerDefinition;
foreach (SelectorModel selector in controller.Selectors)
{
if (selector.AttributeRouteModel != null && selector.AttributeRouteModel.Template == defaultRoute)
{
selector.AttributeRouteModel.Template = $"api/{swaggerDefinition}/[controller]";
}
}
}
}