private static ClassConstructorDefinition GetConstructor(ProjectFeature <AspNetCoreProjectSettings> projectFeature) { var parameters = new List <ParameterDefinition> { new ParameterDefinition(projectFeature.GetInterfaceRepositoryName(), "repository") }; var lines = new List <ILine> { new CodeLine("Repository = repository;") }; var settings = projectFeature.GetAspNetCoreProject().GlobalSelection().Settings; if (settings.UseLogger) { parameters.Add(new ParameterDefinition(string.Format("ILogger<{0}>", projectFeature.GetControllerName()), "logger")); lines.Add(new CodeLine("Logger = logger;")); } return(new ClassConstructorDefinition(AccessModifier.Public, parameters.ToArray()) { Lines = lines }); }
public static ControllerClassDefinition GetControllerClassDefinition(this ProjectFeature <AspNetCoreProjectSettings> projectFeature) { var aspNetCoreProject = projectFeature.GetAspNetCoreProject(); var definition = new ControllerClassDefinition { Namespaces = { "System", "System.Linq", "System.Threading.Tasks", "Microsoft.AspNetCore.Mvc", "Microsoft.EntityFrameworkCore", "Microsoft.Extensions.Logging", aspNetCoreProject.GetDataLayerContractsNamespace(), aspNetCoreProject.GetDataLayerRepositoriesNamespace(), aspNetCoreProject.GetResponsesNamespace(), aspNetCoreProject.GetRequestsNamespace() }, Namespace = string.Format("{0}.{1}", aspNetCoreProject.Name, "Controllers"), AccessModifier = AccessModifier.Public, Name = projectFeature.GetControllerName(), Attributes = new List <MetadataAttribute> { new MetadataAttribute("Route", string.IsNullOrEmpty(aspNetCoreProject.Version) ? "\"api/[controller]\"" : string.Format("\"api/{0}/[controller]\"", aspNetCoreProject.Version)), new MetadataAttribute("ApiController") }, BaseClass = "ControllerBase", Fields = { new FieldDefinition(AccessModifier.Protected, projectFeature.GetInterfaceRepositoryName(), "Repository") { IsReadOnly = true } } }; var settings = aspNetCoreProject.GlobalSelection().Settings; if (settings.UseLogger) { definition.Fields.Add(new FieldDefinition(AccessModifier.Protected, "ILogger", "Logger")); } definition.Constructors.Add(GetConstructor(projectFeature)); var dbos = projectFeature.DbObjects.Select(dbo => dbo.FullName).ToList(); var tables = projectFeature.Project.Database.Tables.Where(t => dbos.Contains(t.FullName)).ToList(); foreach (var table in tables) { if (table.Columns.Count == table.PrimaryKey?.Key.Count) { continue; } definition.Methods.Add(GetGetAllMethod(projectFeature, definition, table)); if (table.PrimaryKey != null) { definition.Methods.Add(GetGetMethod(projectFeature, table)); } definition.Methods.Add(GetPostMethod(projectFeature, table)); if (table.PrimaryKey != null) { definition.Methods.Add(GetPutMethod(projectFeature, table)); definition.Methods.Add(GetDeleteMethod(projectFeature, table)); } } // todo: Add views in controller definition.SimplifyDataTypes(); return(definition); }
public static CSharpClassDefinition GetControllerClassDefinition(this ProjectFeature <AspNetCoreProjectSettings> projectFeature) { var definition = new CSharpClassDefinition(); definition.Namespaces.Add("System"); definition.Namespaces.Add("System.Linq"); definition.Namespaces.Add("System.Threading.Tasks"); definition.Namespaces.Add("Microsoft.AspNetCore.Mvc"); definition.Namespaces.Add("Microsoft.EntityFrameworkCore"); definition.Namespaces.Add("Microsoft.Extensions.Logging"); var project = projectFeature.GetAspNetCoreProject(); definition.Namespaces.Add(project.GetDataLayerContractsNamespace()); definition.Namespaces.Add(project.GetDataLayerRepositoriesNamespace()); var settings = project.GlobalSelection().Settings; definition.Namespaces.Add(project.GetResponsesNamespace()); definition.Namespaces.Add(project.GetRequestModelsNamespace()); definition.Namespace = string.Format("{0}.{1}", project.Name, "Controllers"); definition.Attributes = new List <MetadataAttribute> { new MetadataAttribute("Route", "\"api/[controller]\"") }; definition.Name = projectFeature.GetControllerName(); definition.BaseClass = "Controller"; definition.Fields.Add(new FieldDefinition(AccessModifier.Protected, projectFeature.GetInterfaceRepositoryName(), "Repository") { IsReadOnly = true }); if (settings.UseLogger) { definition.Fields.Add(new FieldDefinition(AccessModifier.Protected, "ILogger", "Logger")); } definition.Constructors.Add(GetConstructor(projectFeature)); definition.Methods.Add(new MethodDefinition(AccessModifier.Protected, "void", "Dispose", new ParameterDefinition("Boolean", "disposing")) { IsOverride = true, Lines = new List <ILine> { new CodeLine("Repository?.Dispose();"), new CodeLine(), new CodeLine("base.Dispose(disposing);") } }); var dbos = projectFeature.DbObjects.Select(dbo => dbo.FullName).ToList(); var tables = projectFeature.Project.Database.Tables.Where(t => dbos.Contains(t.FullName)).ToList(); foreach (var table in tables) { definition.Methods.Add(GetGetAllMethod(projectFeature, definition, table)); if (table.PrimaryKey != null) { definition.Methods.Add(GetGetMethod(projectFeature, table)); } definition.Methods.Add(GetPostMethod(projectFeature, table)); if (table.PrimaryKey != null) { definition.Methods.Add(GetPutMethod(projectFeature, table)); definition.Methods.Add(GetDeleteMethod(projectFeature, table)); } } return(definition); }