Beispiel #1
0
        public override void Scaffold(IObjectDefinition objectDefinition, string outputDirectory, string subdirectory = "")
        {
            var codeBuilder = default(ICodeBuilder);

            var selection = objectDefinition.DbObject == null?this.GlobalSelection() : this.GetSelection(objectDefinition.DbObject);

            if (objectDefinition is CSharpClassDefinition)
            {
                codeBuilder = new CSharpClassBuilder
                {
                    OutputDirectory  = outputDirectory,
                    ForceOverwrite   = selection.Settings.ForceOverwrite,
                    ObjectDefinition = objectDefinition
                };
            }
            else if (objectDefinition is CSharpInterfaceDefinition)
            {
                codeBuilder = new CSharpInterfaceBuilder
                {
                    OutputDirectory  = outputDirectory,
                    ForceOverwrite   = selection.Settings.ForceOverwrite,
                    ObjectDefinition = objectDefinition
                };
            }

            OnScaffoldingDefinition(new ScaffoldingDefinitionEventArgs(Logger, codeBuilder));

            codeBuilder.CreateFile(subdirectory: subdirectory);

            OnScaffoldedDefinition(new ScaffoldedDefinitionEventArgs(Logger, codeBuilder));
        }
Beispiel #2
0
        internal static void ScaffoldRequestsExtensions(this AspNetCoreProject project)
        {
            foreach (var table in project.Database.Tables)
            {
                var classDefinition = project.GetRequestExtensionsClassDefinition(table);

                CSharpClassBuilder.CreateFiles(project.OutputDirectory, project.AspNetCoreProjectNamespaces.Requests, project.GlobalSelection().Settings.ForceOverwrite, classDefinition);
            }
        }
Beispiel #3
0
        public static AspNetCoreProject ScaffoldAspNetCore(this AspNetCoreProject aspNetCoreProject)
        {
            aspNetCoreProject.ScaffoldResponses();
            aspNetCoreProject.ScaffoldResponsesExtensions();
            aspNetCoreProject.ScaffoldRequests();
            aspNetCoreProject.ScaffoldRequestsExtensions();
            aspNetCoreProject.ScaffoldReadMe();

            foreach (var feature in aspNetCoreProject.Features)
            {
                CSharpClassBuilder.CreateFiles(aspNetCoreProject.OutputDirectory, aspNetCoreProject.AspNetCoreProjectNamespaces.Controllers, aspNetCoreProject.GlobalSelection().Settings.ForceOverwrite, feature.GetControllerClassDefinition());
            }

            return(aspNetCoreProject);
        }
Beispiel #4
0
        public static AspNetCoreProject ScaffoldAspNetCore(this EntityFrameworkCoreProject entityFrameworkProject, string name, string outputDirectory, Database database)
        {
            var aspNetCoreProject = new AspNetCoreProject
            {
                Name            = name,
                OutputDirectory = outputDirectory,
                Database        = database
            };

            aspNetCoreProject.BuildFeatures();

            foreach (var selection in entityFrameworkProject.Selections)
            {
                aspNetCoreProject.Selections.Add(new ProjectSelection <AspNetCoreProjectSettings>
                {
                    Pattern  = selection.Pattern,
                    Settings = new AspNetCoreProjectSettings
                    {
                        ForceOverwrite   = selection.Settings.ForceOverwrite,
                        UseLogger        = true,
                        ConcurrencyToken = selection.Settings.ConcurrencyToken,
                        AuditEntity      = selection.Settings.AuditEntity == null ? null : new AuditEntity
                        {
                            CreationUserColumnName       = selection.Settings.AuditEntity.CreationUserColumnName,
                            CreationDateTimeColumnName   = selection.Settings.AuditEntity.CreationDateTimeColumnName,
                            LastUpdateUserColumnName     = selection.Settings.AuditEntity.LastUpdateUserColumnName,
                            LastUpdateDateTimeColumnName = selection.Settings.AuditEntity.LastUpdateDateTimeColumnName
                        },
                        EntitiesWithDataContracts = selection.Settings.EntitiesWithDataContracts
                    }
                });
            }

            aspNetCoreProject.ScaffoldResponses();
            aspNetCoreProject.ScaffoldResponsesExtensions();
            aspNetCoreProject.ScaffoldRequestModels();
            aspNetCoreProject.ScaffoldRequestModelsExtensions();
            aspNetCoreProject.ScaffoldReadMe();

            foreach (var feature in aspNetCoreProject.Features)
            {
                CSharpClassBuilder.CreateFiles(aspNetCoreProject.OutputDirectory, "Controllers", aspNetCoreProject.GlobalSelection().Settings.ForceOverwrite, feature.GetControllerClassDefinition());
            }

            return(aspNetCoreProject);
        }
Beispiel #5
0
        internal static void ScaffoldResponses(this AspNetCoreProject project)
        {
            var globalSelection = project.GlobalSelection();

            CSharpInterfaceBuilder.CreateFiles(project.OutputDirectory, "Responses", globalSelection.Settings.ForceOverwrite,
                                               project.GetResponseInterfaceDefinition(),
                                               project.GetSingleResponseInterfaceDefinition(),
                                               project.GetListResponseInterfaceDefinition(),
                                               project.GetPagedResponseInterfaceDefinition()
                                               );

            CSharpClassBuilder.CreateFiles(project.OutputDirectory, "Responses", globalSelection.Settings.ForceOverwrite,
                                           project.GetSingleResponseClassDefinition(),
                                           project.GetListResponseClassDefinition(),
                                           project.GetPagedResponseClassDefinition()
                                           );
        }
        public void ScaffoldingRepositoryClass()
        {
            // Arrange
            var definition = new CSharpClassDefinition
            {
                Namespaces =
                {
                    "System",
                    "System.Linq",
                    "Microsoft.EntityFrameworkCore"
                },
                Namespace      = "DesignPatterns",
                AccessModifier = AccessModifier.Public,
                Name           = "NorthwindRepository",
                BaseClass      = "Repository",
                Implements     =
                {
                    "INorthwindRepository"
                },
                Constructors =
                {
                    new ClassConstructorDefinition(AccessModifier.Public, new ParameterDefinition("NorthwindDbContext", "dbContext"))
                    {
                        Invocation = "base(dbContext)"
                    }
                }
            };

            definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Product>", "GetProducts")
            {
                Parameters =
                {
                    new ParameterDefinition("int?", "supplierID")
                },
                Lines =
                {
                    new CodeLine("var query = DbContext.Products.AsQueryable();"),
                    new CodeLine(),
                    new CodeLine("if (supplierID.HasValue)"),
                    new CodeLine(1,                                               "query = query.Where(item => item.SupplierID == supplierID);"),
                    new CodeLine(),
                    new ReturnLine("query;")
                }
            });

            definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Shipper>", "GetShippers")
            {
                Lines =
                {
                    new ReturnLine("DbContext.Shippers;")
                }
            });

            definition.Methods.Add(new MethodDefinition(AccessModifier.Public, "IQueryable<Order>", "GetOrders")
            {
                Lines =
                {
                    new ReturnLine("DbContext.Orders;")
                }
            });

            // Act

            var codeBuilder = new CSharpClassBuilder
            {
                OutputDirectory      = @"C:\Temp\CatFactory.NetCore\DesignPatterns",
                ForceOverwrite       = true,
                ObjectDefinition     = definition,
                AddNamespacesAtStart = false
            };

            codeBuilder.CreateFile();
        }
        public void ScaffoldingDbContextExtensionClass()
        {
            // Arrange
            var definition = new CSharpClassDefinition
            {
                Namespaces =
                {
                    "System",
                    "System.Collections.Generic",
                    "System.Data.SqlClient",
                    "System.Linq",
                    "System.Threading.Tasks",
                    "Microsoft.EntityFrameworkCore"
                },
                Namespace      = "DesignPatterns",
                AccessModifier = AccessModifier.Public,
                IsPartial      = true,
                IsStatic       = true,
                Name           = "NorthwindDbContextExtensions",
                Methods        =
                {
                    new MethodDefinition(AccessModifier.Public,                            "IQueryable<Product>", "GetProducts")
                    {
                        IsStatic    = true,
                        IsExtension = true,
                        Parameters  =
                        {
                            new ParameterDefinition("NorthwindDbContext", "dbContext"),
                            new ParameterDefinition("int?",               "supplierID")
                        },
                        Lines =
                        {
                            new CodeLine("var query = dbContext.Products.AsQueryable();"),
                            new CodeLine(),
                            new CodeLine("if (supplierID.HasValue)"),
                            new CodeLine(1,                                               "query = query.Where(item => item.SupplierID == supplierID);"),
                            new CodeLine(),
                            new ReturnLine("query;")
                        }
                    },
                    new MethodDefinition(AccessModifier.Public,                            "Task<List<CustOrderHist>>", "GetCustOrderHistAsync")
                    {
                        IsStatic    = true,
                        IsAsync     = true,
                        IsExtension = true,
                        Parameters  =
                        {
                            new ParameterDefinition("NorthwindDbContext", "dbContext"),
                            new ParameterDefinition("string",             "customerID")
                        },
                        Lines =
                        {
                            new CodeLine("var query = new"),
                            new CodeLine("{"),
                            new CodeLine(1,                   "Text = \" exec [dbo].[CustOrderHist] @CustomerID \","),
                            new CodeLine(1,                   "Parameters = new[]"),
                            new CodeLine(1,                   "{"),
                            new CodeLine(2,                   "new SqlParameter(\"@CustomerID\", customerID)"),
                            new CodeLine(1,                   "}"),
                            new CodeLine("};"),
                            new CodeLine(),
                            new ReturnLine("await dbContext"),
                            new CodeLine(1,                   ".Query<CustOrderHist>()"),
                            new CodeLine(1,                   ".FromSql(query.Text, query.Parameters)"),
                            new CodeLine(1,                   ".ToListAsync();")
                        }
                    }
                }
            };

            // Act

            var codeBuilder = new CSharpClassBuilder
            {
                OutputDirectory      = @"C:\Temp\CatFactory.NetCore\DesignPatterns",
                ForceOverwrite       = true,
                ObjectDefinition     = definition,
                AddNamespacesAtStart = false
            };

            codeBuilder.CreateFile();
        }
Beispiel #8
0
 internal static void ScaffoldResponsesExtensions(this AspNetCoreProject project)
 {
     CSharpClassBuilder.CreateFiles(project.OutputDirectory, project.AspNetCoreProjectNamespaces.Responses, project.GlobalSelection().Settings.ForceOverwrite, project.GetResponsesExtensionsClassDefinition());
 }
        public void TestController()
        {
            // Arrange
            var definition = new CSharpClassDefinition
            {
                Namespace  = "Controllers",
                Name       = "SalesController",
                BaseClass  = "Controller",
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("Route", "\"api/[controller]\"")
                }
            };

            definition.Namespaces.Add("System");
            definition.Namespaces.Add("System.Threading.Tasks");
            definition.Namespaces.Add("Microsoft.AspNetCore.Mvc");

            definition.Fields.Add(new FieldDefinition(AccessModifier.Protected, "ISalesRepository", "Repository")
            {
                IsReadOnly = true
            });

            definition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition("ISalesRepository", "repository"))
            {
                Lines = new List <ILine>
                {
                    new CodeLine("Repository = repository;")
                }
            });

            definition.Methods.Add(new MethodDefinition(AccessModifier.Protected, "void", "Disposed", new ParameterDefinition("Boolean", "disposing"))
            {
                IsOverride = true,
                Lines      = new List <ILine>
                {
                    new CodeLine("Repository?.Dispose();"),
                    new CodeLine(),
                    new CodeLine("base.Dispose(disposing);")
                }
            });

            definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "GetOrdersAsync", new ParameterDefinition("Int32?", "pageSize", "10"), new ParameterDefinition("Int32?", "pageNumber", "1"))
            {
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("HttpGet", "\"Order\"")
                },
                IsAsync = true
            });

            definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "GetOrderAsync", new ParameterDefinition("Int32", "id"))
            {
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("HttpGet", "\"Order/{id}\"")
                },
                IsAsync = true
            });

            definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "CreateOrderAsync", new ParameterDefinition("OrderViewModel", "value", new MetadataAttribute("FromBody")))
            {
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("HttpPost", "\"Order\"")
                },
                IsAsync = true
            });

            definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "UpdateOrderAsync", new ParameterDefinition("Int32", "id"), new ParameterDefinition("OrderViewModel", "value", new MetadataAttribute("FromBody")))
            {
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("HttpPut", "\"Order/{id}\"")
                },
                IsAsync = true
            });

            definition.Methods.Add(new MethodDefinition("Task<IActionResult>", "DeleteOrderAsync", new ParameterDefinition("Int32", "id"))
            {
                Attributes = new List <MetadataAttribute>
                {
                    new MetadataAttribute("HttpDelete", "\"Order/{id}\"")
                },
                IsAsync = true
            });

            // Act
            var builder = new CSharpClassBuilder
            {
                ObjectDefinition = definition,
                OutputDirectory  = "C:\\Temp\\CatFactory.DotNetCore",
                ForceOverwrite   = true
            };

            builder.CreateFile();
        }
Beispiel #10
0
        internal static void ScaffoldRequestModelsExtensions(this AspNetCoreProject project)
        {
            var classDefinition = project.GetRequestModelExtensionsClassDefinition();

            CSharpClassBuilder.CreateFiles(project.OutputDirectory, "RequestModels", project.GlobalSelection().Settings.ForceOverwrite, classDefinition);
        }