Exemplo n.º 1
0
        public static string GetStartupText(string solutionDirectory, string classNamespace, string envName, bool useJwtAuth, string projectBaseName)
        {
            var appAuth = "";
            var apiExtensionsClassPath = ClassPathHelper.WebApiExtensionsClassPath(solutionDirectory, "", projectBaseName);
            var infraClassPath         = ClassPathHelper.InfrastructureProjectClassPath(solutionDirectory, projectBaseName);
            var seederClassPath        = ClassPathHelper.SeederClassPath(solutionDirectory, "", projectBaseName);

            if (useJwtAuth)
            {
                appAuth = $@"

            app.UseAuthentication();
            app.UseAuthorization();";
            }

            var dbContextClassPath = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);
            var corsName           = $"{projectBaseName}CorsPolicy";

            envName = envName == "Production" ? "" : envName;
            if (envName == "Development")
            {
                return(@$ "namespace {classNamespace}
{{
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using {infraClassPath.ClassNamespace};
    using {seederClassPath.ClassNamespace};
    using {dbContextClassPath.ClassNamespace};
    using {apiExtensionsClassPath.ClassNamespace};
    using Serilog;
Exemplo n.º 2
0
        public static string GetCommandFileText(string classNamespace, Entity entity, string contextName, string solutionDirectory, string srcDirectory, string projectBaseName)
        {
            var className             = Utilities.AddEntityFeatureClassName(entity.Name);
            var addCommandName        = Utilities.CommandAddName(entity.Name);
            var readDto               = Utilities.GetDtoName(entity.Name, Dto.Read);
            var createDto             = Utilities.GetDtoName(entity.Name, Dto.Creation);
            var manipulationValidator = Utilities.ValidatorNameGenerator(entity.Name, Validator.Manipulation);

            var entityName          = entity.Name;
            var entityNameLowercase = entity.Name.LowercaseFirstLetter();
            var primaryKeyPropName  = Entity.PrimaryKeyProperty.Name;
            var commandProp         = $"{entityName}ToAdd";
            var newEntityProp       = $"{entityNameLowercase}ToAdd";

            var entityClassPath     = ClassPathHelper.EntityClassPath(srcDirectory, "", entity.Plural, projectBaseName);
            var dtoClassPath        = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.ExceptionsClassPath(srcDirectory, "");
            var contextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var validatorsClassPath = ClassPathHelper.ValidationClassPath(srcDirectory, "", entity.Plural, projectBaseName);

            return(@$ "namespace {classNamespace};

using {entityClassPath.ClassNamespace};
using {dtoClassPath.ClassNamespace};
using {exceptionsClassPath.ClassNamespace};
using {contextClassPath.ClassNamespace};
using {validatorsClassPath.ClassNamespace};
using AutoMapper;
using AutoMapper.QueryableExtensions;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;
Exemplo n.º 3
0
        public static string GetProducerRegistration(string classNamespace, Producer producer, string srcDirectory, string projectBaseName)
        {
            var context          = Utilities.GetDbContext(srcDirectory, projectBaseName);
            var contextClassPath = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var dbReadOnly       = producer.UsesDb ? @$ "{Environment.NewLine}            private readonly {context} _db;" : "";
            var dbProp           = producer.UsesDb ? @$ "{context} db, " : "";
            var assignDb         = producer.UsesDb ? @$ "{Environment.NewLine}                _db = db;" : "";
            var contextUsing     = producer.UsesDb ? $@"
    using {contextClassPath.ClassNamespace};" : "";

            var commandProp      = "SomeContentToPutInMessage";
            var commandPropLower = commandProp.LowercaseFirstLetter();
            var propTypeToReturn = "bool";
            var commandName      = $"{producer.ProducerName}Command";

            return(@$ "namespace {classNamespace};

using AutoMapper;
using AutoMapper.QueryableExtensions;
using MassTransit;
using Messages;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;{contextUsing}
Exemplo n.º 4
0
        public static string GetCommandFileText(string classNamespace, string contextName, string srcDirectory,
                                                string projectBaseName, Feature newFeature)
        {
            var featureClassName = newFeature.Name;
            var commandName      = newFeature.Command;
            var returnPropType   = newFeature.ResponseType;

            var exceptionsClassPath = ClassPathHelper.ExceptionsClassPath(srcDirectory, "", projectBaseName);
            var contextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var returnValue         = GetReturnValue(returnPropType);

            var handlerCtor = $@"private readonly {contextName} _db;
            private readonly IMapper _mapper;

            public Handler({contextName} db, IMapper mapper)
            {{
                _mapper = mapper;
                _db = db;
            }}";

            return(@$ "namespace {classNamespace};

using {exceptionsClassPath.ClassNamespace};
using {contextClassPath.ClassNamespace};
using AutoMapper;
using AutoMapper.QueryableExtensions;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
Exemplo n.º 5
0
        public static string GetCommandFileText(string classNamespace, Entity entity, string contextName, string srcDirectory, string projectBaseName)
        {
            var className             = Utilities.PatchEntityFeatureClassName(entity.Name);
            var patchCommandName      = Utilities.CommandPatchName(entity.Name);
            var updateDto             = Utilities.GetDtoName(entity.Name, Dto.Update);
            var manipulationValidator = Utilities.ValidatorNameGenerator(entity.Name, Validator.Manipulation);

            var primaryKeyPropType  = Entity.PrimaryKeyProperty.Type;
            var primaryKeyPropName  = Entity.PrimaryKeyProperty.Name;
            var entityNameLowercase = entity.Name.LowercaseFirstLetter();
            var updatedEntityProp   = $"{entityNameLowercase}ToUpdate";
            var patchedEntityProp   = $"{entityNameLowercase}ToPatch";

            var entityClassPath     = ClassPathHelper.EntityClassPath(srcDirectory, "", entity.Plural, projectBaseName);
            var dtoClassPath        = ClassPathHelper.DtoClassPath(srcDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.ExceptionsClassPath(srcDirectory, "", projectBaseName);
            var contextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var validatorsClassPath = ClassPathHelper.ValidationClassPath(srcDirectory, "", entity.Plural, projectBaseName);

            return(@$ "namespace {classNamespace};

using {entityClassPath.ClassNamespace};
using {dtoClassPath.ClassNamespace};
using {exceptionsClassPath.ClassNamespace};
using {contextClassPath.ClassNamespace};
using {validatorsClassPath.ClassNamespace};
using AutoMapper;
using AutoMapper.QueryableExtensions;
using FluentValidation.Results;
using MediatR;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;
Exemplo n.º 6
0
        public static string GetQueryFileText(string classNamespace, Entity entity, string contextName, string solutionDirectory, string srcDirectory, string projectBaseName)
        {
            var className       = Utilities.GetEntityFeatureClassName(entity.Name);
            var queryRecordName = Utilities.QueryRecordName(entity.Name);
            var readDto         = Utilities.GetDtoName(entity.Name, Dto.Read);

            var primaryKeyPropType          = Entity.PrimaryKeyProperty.Type;
            var primaryKeyPropName          = Entity.PrimaryKeyProperty.Name;
            var primaryKeyPropNameLowercase = primaryKeyPropName.LowercaseFirstLetter();

            var dtoClassPath        = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.ExceptionsClassPath(srcDirectory, "");
            var contextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace};

using {dtoClassPath.ClassNamespace};
using {exceptionsClassPath.ClassNamespace};
using {contextClassPath.ClassNamespace};
using AutoMapper;
using AutoMapper.QueryableExtensions;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System.Threading;
using System.Threading.Tasks;
Exemplo n.º 7
0
        public static void CreateDbContext(string solutionDirectory, List <Entity> entities, string dbContextName, string dbProvider, string dbName, string projectBaseName)
        {
            try
            {
                var classPath = ClassPathHelper.DbContextClassPath(solutionDirectory, $"{dbContextName}.cs", projectBaseName);

                if (!Directory.Exists(classPath.ClassDirectory))
                {
                    Directory.CreateDirectory(classPath.ClassDirectory);
                }

                if (File.Exists(classPath.FullClassPath))
                {
                    throw new FileAlreadyExistsException(classPath.FullClassPath);
                }

                using (FileStream fs = File.Create(classPath.FullClassPath))
                {
                    var data = GetContextFileText(classPath.ClassNamespace, entities, dbContextName, solutionDirectory, projectBaseName);
                    fs.Write(Encoding.UTF8.GetBytes(data));
                }

                RegisterContext(solutionDirectory, dbProvider, dbContextName, dbName, projectBaseName);
            }
            catch (FileAlreadyExistsException e)
            {
                WriteError(e.Message);
                throw;
            }
            catch (Exception e)
            {
                WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}");
                throw;
            }
        }
Exemplo n.º 8
0
        public static string GetCommandFileText(string classNamespace, Entity entity, string contextName, string solutionDirectory, string srcDirectory, Feature feature, string projectBaseName)
        {
            var className      = feature.Name;
            var addCommandName = feature.Command;
            var readDto        = Utilities.GetDtoName(entity.Name, Dto.Read);

            readDto = $"IEnumerable<{readDto}>";
            var createDto = Utilities.GetDtoName(entity.Name, Dto.Creation);

            createDto = $"IEnumerable<{createDto}>";
            var featurePropNameLowerFirst = feature.BatchPropertyName.LowercaseFirstLetter();

            var entityName                 = entity.Name;
            var entityNameLowercase        = entity.Name.LowercaseFirstLetter();
            var entityNameLowercaseListVar = $"{entity.Name.LowercaseFirstLetter()}List";
            var primaryKeyPropName         = Entity.PrimaryKeyProperty.Name;
            var commandProp                = $"{entityName}ListToAdd";
            var newEntityProp              = $"{entityNameLowercaseListVar}ListToAdd";

            var entityClassPath     = ClassPathHelper.EntityClassPath(srcDirectory, "", entity.Plural, projectBaseName);
            var dtoClassPath        = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.ExceptionsClassPath(srcDirectory, "");
            var contextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var validatorsClassPath = ClassPathHelper.ValidationClassPath(srcDirectory, "", entity.Plural, projectBaseName);

            var batchFkCheck = !string.IsNullOrEmpty(feature.BatchPropertyDbSetName)
                ? @$ "var fkEntity = await _db.{feature.BatchPropertyDbSetName}.Where(x => x.Id == request.{feature.BatchPropertyName}).FirstOrDefaultAsync(cancellationToken);
            if (fkEntity == null)
                throw new NotFoundException($" "No {feature.BatchPropertyName} found with an id of '{{request.{feature.BatchPropertyName}}}'" ");{Environment.NewLine}{Environment.NewLine}"
Exemplo n.º 9
0
        public static string GetQueryFileText(string classNamespace, Entity entity, string contextName, string solutionDirectory, string projectBaseName)
        {
            var className          = Utilities.GetEntityListFeatureClassName(entity.Name);
            var queryListName      = Utilities.QueryListName(entity.Name);
            var readDto            = Utilities.GetDtoName(entity.Name, Dto.Read);
            var paramsDto          = Utilities.GetDtoName(entity.Name, Dto.ReadParamaters);
            var primaryKeyPropName = entity.PrimaryKeyProperty.Name;

            var entityClassPath     = ClassPathHelper.EntityClassPath(solutionDirectory, "", projectBaseName);
            var dtoClassPath        = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.CoreExceptionClassPath(solutionDirectory, "", projectBaseName);
            var contextClassPath    = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);
            var wrapperClassPath    = ClassPathHelper.WrappersClassPath(solutionDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace}
{{
    using {entityClassPath.ClassNamespace};
    using {dtoClassPath.ClassNamespace};
    using {exceptionsClassPath.ClassNamespace};
    using {contextClassPath.ClassNamespace};
    using {wrapperClassPath.ClassNamespace};
    using AutoMapper;
    using AutoMapper.QueryableExtensions;
    using MediatR;
    using Sieve.Models;
    using Sieve.Services;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
Exemplo n.º 10
0
        public static string GetCommandFileText(string classNamespace, Entity entity, string contextName, string solutionDirectory, string projectBaseName)
        {
            var className         = Utilities.DeleteEntityFeatureClassName(entity.Name);
            var deleteCommandName = Utilities.CommandDeleteName(entity.Name);

            var primaryKeyPropType  = entity.PrimaryKeyProperty.Type;
            var primaryKeyPropName  = entity.PrimaryKeyProperty.Name;
            var entityNameLowercase = entity.Name.LowercaseFirstLetter();

            var entityClassPath     = ClassPathHelper.EntityClassPath(solutionDirectory, "", projectBaseName);
            var dtoClassPath        = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);
            var exceptionsClassPath = ClassPathHelper.CoreExceptionClassPath(solutionDirectory, "", projectBaseName);
            var contextClassPath    = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace}
{{
    using {entityClassPath.ClassNamespace};
    using {dtoClassPath.ClassNamespace};
    using {exceptionsClassPath.ClassNamespace};
    using {contextClassPath.ClassNamespace};
    using AutoMapper;
    using AutoMapper.QueryableExtensions;
    using MediatR;
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Collections.Generic;
Exemplo n.º 11
0
        private static ApiTemplate GetDbContext(string solutionDirectory, ApiTemplate template)
        {
            var classPath    = ClassPathHelper.DbContextClassPath(solutionDirectory, $"");
            var contextClass = Directory.GetFiles(classPath.FullClassPath, "*.cs").FirstOrDefault();

            template.DbContext.ContextName = Path.GetFileNameWithoutExtension(contextClass);
            return(template);
        }
Exemplo n.º 12
0
        public static string GetServiceRegistrationText(string srcDirectory, string projectBaseName, string classNamespace)
        {
            var dbContextClassPath = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var utilsClassPath     = ClassPathHelper.WebApiResourcesClassPath(srcDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace};

using {dbContextClassPath.ClassNamespace};
using {utilsClassPath.ClassNamespace};
using Microsoft.EntityFrameworkCore;
        public static string GetServiceRegistrationText(string solutionDirectory, string projectBaseName, string classNamespace)
        {
            var dbContextClassPath = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace}
{{
    using {dbContextClassPath.ClassNamespace};
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Sieve.Services;
Exemplo n.º 14
0
        public static void RemoveDirectory(string solutionDirectory)
        {
            var classPath = ClassPathHelper.DbContextClassPath(solutionDirectory, ""); // deleting directory, so I don't need to give a meaningful filename

            if (!Directory.Exists(classPath.ClassDirectory))
            {
                throw new DirectoryNotFoundException($"The `{classPath.ClassDirectory}` directory could not be found.");
            }

            var dir = new DirectoryInfo(classPath.ClassDirectory);

            dir.Delete(true);
        }
Exemplo n.º 15
0
        public static void AddDbSet(string solutionDirectory, List <Entity> entities, string dbContextName, string projectBaseName)
        {
            var classPath      = ClassPathHelper.DbContextClassPath(solutionDirectory, $"{dbContextName}.cs", projectBaseName);
            var entitiesUsings = "";

            foreach (var entity in entities)
            {
                var entityClassPath = ClassPathHelper.EntityClassPath(solutionDirectory, "", entity.Plural, projectBaseName);
                entitiesUsings += $"using {entityClassPath.ClassNamespace};{Environment.NewLine}"; // note this foreach adds newline after where dbbuilder adds before
            }

            if (!Directory.Exists(classPath.ClassDirectory))
            {
                Directory.CreateDirectory(classPath.ClassDirectory);
            }

            if (!File.Exists(classPath.FullClassPath))
            {
                throw new FileNotFoundException($"The `{classPath.FullClassPath}` file could not be found.");
            }

            var tempPath = $"{classPath.FullClassPath}temp";

            using (var input = File.OpenText(classPath.FullClassPath))
            {
                using (var output = new StreamWriter(tempPath))
                {
                    string line;
                    while (null != (line = input.ReadLine()))
                    {
                        var newText = $"{line}";
                        if (line.Contains($"#region DbSet Region"))
                        {
                            newText += @$ "{Environment.NewLine}{DbContextBuilder.GetDbSetText(entities)}";
                        }

                        // TODO add test. assumes that this using exists and that the builder above adds a new line after the usings
                        if (line.Contains("using Microsoft.EntityFrameworkCore;"))
                        {
                            newText = $"{entitiesUsings}{line}";
                        }

                        output.WriteLine(newText);
                    }
                }
            }

            // delete the old file and set the name of the new one to the original name
            File.Delete(classPath.FullClassPath);
            File.Move(tempPath, classPath.FullClassPath);
        }
Exemplo n.º 16
0
        public static string GetFixtureText(string classNamespace, string solutionDirectory, string projectBaseName, string dbContextName, string dbName, string provider)
        {
            var apiClassPath       = ClassPathHelper.WebApiProjectClassPath(solutionDirectory, projectBaseName);
            var contextClassPath   = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);
            var testUtilsClassPath = ClassPathHelper.IntegrationTestUtilitiesClassPath(solutionDirectory, projectBaseName, "");
            var utilsClassPath     = ClassPathHelper.WebApiResourcesClassPath(solutionDirectory, "", projectBaseName);
            var servicesClassPath  = ClassPathHelper.WebApiServicesClassPath(solutionDirectory, "", projectBaseName);

            var usingStatement = Enum.GetName(typeof(DbProvider), DbProvider.Postgres) == provider
                ? $@"
using Npgsql;"
                : null;

            var checkpoint = Enum.GetName(typeof(DbProvider), DbProvider.Postgres) == provider
                ? $@"_checkpoint = new Checkpoint
        {{
            TablesToIgnore = new[] {{ ""__EFMigrationsHistory"" }},
            SchemasToExclude = new[] {{ ""information_schema"", ""pg_subscription"", ""pg_catalog"", ""pg_toast"" }},
            DbAdapter = DbAdapter.Postgres
        }};"
                : $@"_checkpoint = new Checkpoint
        {{
            TablesToIgnore = new[] {{ ""__EFMigrationsHistory"" }},
        }};";

            var resetString = Enum.GetName(typeof(DbProvider), DbProvider.Postgres) == provider
                ? $@"using var conn = new NpgsqlConnection(Environment.GetEnvironmentVariable(""DB_CONNECTION_STRING""));
        await conn.OpenAsync();
        await _checkpoint.Reset(conn);"
                : $@"await _checkpoint.Reset(Environment.GetEnvironmentVariable(""DB_CONNECTION_STRING""));";

            return(@$ "namespace {classNamespace};

using {contextClassPath.ClassNamespace};
using {testUtilsClassPath.ClassNamespace};
using {apiClassPath.ClassNamespace};
using {utilsClassPath.ClassNamespace};
using {servicesClassPath.ClassNamespace};
using MediatR;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Moq;{usingStatement}
using NUnit.Framework;
using Respawn;
using System.IO;
using System.Security.Claims;
using System.Threading.Tasks;
Exemplo n.º 17
0
        private static void BuildInfrastructureProject(string solutionDirectory, string projectDirectory, string projectBaseName, string dbProvider, IFileSystem fileSystem)
        {
            var solutionFolder = projectDirectory.Replace(solutionDirectory, "").Replace(Path.DirectorySeparatorChar.ToString(), "");
            var infrastructurePersistenceProjectClassPath = ClassPathHelper.InfrastructureProjectClassPath(projectDirectory, projectBaseName);

            InfrastructureCsProjBuilder.CreateInfrastructurePersistenceCsProj(projectDirectory, projectBaseName, dbProvider);
            Utilities.ExecuteProcess("dotnet", $@"sln add ""{infrastructurePersistenceProjectClassPath.FullClassPath}"" --solution-folder {solutionFolder}", solutionDirectory);

            // base folders
            Directory.CreateDirectory(ClassPathHelper.DbContextClassPath(projectDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.SeederClassPath(projectDirectory, "", projectBaseName).ClassDirectory);

            InfrastructureServiceRegistrationBuilder.CreateInfrastructureServiceExtension(projectDirectory, projectBaseName, fileSystem);
        }
Exemplo n.º 18
0
        private static void BuildInfrastructurePersistenceProject(string solutionDirectory, string dbProvider, IFileSystem fileSystem)
        {
            var infrastructurePersistenceProjectClassPath = ClassPathHelper.InfrastructurePersistenceProjectClassPath(solutionDirectory);

            InfrastructurePersistenceCsProjBuilder.CreateInfrastructurePersistenceCsProj(solutionDirectory, dbProvider);
            Utilities.ExecuteProcess("dotnet", $@"sln add ""{infrastructurePersistenceProjectClassPath.FullClassPath}"" --solution-folder {"Infrastructure"}", solutionDirectory);

            // base folders
            Directory.CreateDirectory(ClassPathHelper.DbContextClassPath(solutionDirectory, "").ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.RepositoryClassPath(solutionDirectory, "").ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.SeederClassPath(solutionDirectory, "").ClassDirectory);

            InfrastructurePersistenceServiceRegistrationBuilder.CreateInfrastructurePersistenceServiceExtension(solutionDirectory, fileSystem);
        }
Exemplo n.º 19
0
        private static string GetPolicyBuilderText(string classNamespace, string solutionDirectory, string srcDirectory, string projectBaseName)
        {
            var domainPolicyClassPath = ClassPathHelper.PolicyDomainClassPath(srcDirectory, "", projectBaseName);
            var rolesClassPath        = ClassPathHelper.SharedKernelDomainClassPath(solutionDirectory, "");
            var dbContextClassPath    = ClassPathHelper.DbContextClassPath(srcDirectory, "UserPolicyHandler.cs", projectBaseName);

            return(@$ "namespace {classNamespace};

using System.Security.Claims;
using {dbContextClassPath.ClassNamespace};
using {rolesClassPath.ClassNamespace};
using {domainPolicyClassPath.ClassNamespace};
using HeimGuard;
using Microsoft.EntityFrameworkCore;
Exemplo n.º 20
0
        public static string GetBaseText(string classNamespace, string solutionDirectory, string projectBaseName, string dbContextName)
        {
            var contextClassPath = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);
            var apiClassPath     = ClassPathHelper.WebApiProjectRootClassPath(solutionDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace};

using {contextClassPath.ClassNamespace};
using {apiClassPath.ClassNamespace};
using MediatR;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using NUnit.Framework;
using System.Threading.Tasks;
Exemplo n.º 21
0
        public static string GetEntitySeederFileText(string classNamespace, Entity entity, string dbContextName, string solutionDirectory, string projectBaseName)
        {
            var entitiesClassPath  = ClassPathHelper.EntityClassPath(solutionDirectory, "", entity.Plural, projectBaseName);
            var dbContextClassPath = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);

            if (dbContextName is null)
            {
                throw new ArgumentNullException(nameof(dbContextName));
            }

            return(@$ "namespace {classNamespace};

using AutoBogus;
using {entitiesClassPath.ClassNamespace};
using {dbContextClassPath.ClassNamespace};
using System.Linq;
Exemplo n.º 22
0
        public static string GetDirectOrTopicConsumerRegistration(string classNamespace, Consumer consumer, string srcDirectory, string projectBaseName)
        {
            var context          = Utilities.GetDbContext(srcDirectory, projectBaseName);
            var contextClassPath = ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName);
            var dbReadOnly       = consumer.UsesDb ? @$ "{Environment.NewLine}        private readonly {context} _db;" : "";
            var dbProp           = consumer.UsesDb ? @$ "{context} db, " : "";
            var assignDb         = consumer.UsesDb ? @$ "{Environment.NewLine}            _db = db;" : "";
            var contextUsing     = consumer.UsesDb ? $@"
    using {contextClassPath.ClassNamespace};" : "";

            return(@$ "namespace {classNamespace};

using AutoMapper;
using MassTransit;
using Messages;
using System.Threading.Tasks;{contextUsing}
Exemplo n.º 23
0
        public static void CreateDbContext(string srcDirectory,
                                           List <Entity> entities,
                                           string dbContextName,
                                           string dbProvider,
                                           string dbName,
                                           NamingConventionEnum namingConventionEnum,
                                           string projectBaseName,
                                           IFileSystem fileSystem
                                           )
        {
            var classPath = ClassPathHelper.DbContextClassPath(srcDirectory, $"{dbContextName}.cs", projectBaseName);
            var data      = GetContextFileText(classPath.ClassNamespace, entities, dbContextName, srcDirectory, projectBaseName);

            Utilities.CreateFile(classPath, data, fileSystem);

            RegisterContext(srcDirectory, dbProvider, dbContextName, dbName, namingConventionEnum, projectBaseName);
        }
Exemplo n.º 24
0
        private static string GetWebAppFactoryFileText(ClassPath classPath, string dbContextName, string solutionDirectory, string projectBaseName, bool addJwtAuthentication)
        {
            var webApiClassPath  = ClassPathHelper.WebApiProjectRootClassPath(solutionDirectory, "", projectBaseName);
            var contextClassPath = ClassPathHelper.DbContextClassPath(solutionDirectory, "", projectBaseName);

            var authUsing = addJwtAuthentication ? $@"
    using WebMotions.Fake.Authentication.JwtBearer;" : "";

            var authRegistration = addJwtAuthentication ? $@"
                // add authentication using a fake jwt bearer
                services.AddAuthentication(options =>
                {{
                    options.DefaultAuthenticateScheme = FakeJwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = FakeJwtBearerDefaults.AuthenticationScheme;
                }}).AddFakeJwtBearer();
" : "";

            return(@$ "
Exemplo n.º 25
0
        public static void AddDbSet(string solutionDirectory, List <Entity> entities, string dbContextName)
        {
            var classPath = ClassPathHelper.DbContextClassPath(solutionDirectory, $"{dbContextName}.cs");

            if (!Directory.Exists(classPath.ClassDirectory))
            {
                Directory.CreateDirectory(classPath.ClassDirectory);
            }

            if (!File.Exists(classPath.FullClassPath))
            {
                throw new FileNotFoundException($"The `{classPath.FullClassPath}` file could not be found.");
            }

            var tempPath = $"{classPath.FullClassPath}temp";

            using (var input = File.OpenText(classPath.FullClassPath))
            {
                using (var output = new StreamWriter(tempPath))
                {
                    string line;
                    while (null != (line = input.ReadLine()))
                    {
                        var newText = $"{line}";
                        if (line.Contains($"#region DbSet Region"))
                        {
                            newText += @$ "{Environment.NewLine}{DbContextBuilder.GetDbSetText(entities)}";
                        }

                        output.WriteLine(newText);
                    }
                }
            }

            // delete the old file and set the name of the new one to the original name
            File.Delete(classPath.FullClassPath);
            File.Move(tempPath, classPath.FullClassPath);

            GlobalSingleton.AddUpdatedFile(classPath.FullClassPath.Replace($"{solutionDirectory}{Path.DirectorySeparatorChar}", ""));
        }
Exemplo n.º 26
0
        private static void BuildWebApiProject(string solutionDirectory, string srcDirectory, string projectBaseName, bool useJwtAuth, string dbProvider, string dbName, IFileSystem fileSystem)
        {
            var solutionFolder         = srcDirectory.GetSolutionFolder(solutionDirectory);
            var webApiProjectClassPath = ClassPathHelper.WebApiProjectClassPath(srcDirectory, projectBaseName);

            WebApiCsProjBuilder.CreateWebApiCsProj(srcDirectory, projectBaseName, dbProvider);
            Utilities.ExecuteProcess("dotnet", $@"sln add ""{webApiProjectClassPath.FullClassPath}"" --solution-folder {solutionFolder}", solutionDirectory);

            // base folders
            Directory.CreateDirectory(ClassPathHelper.ControllerClassPath(srcDirectory, "", projectBaseName, "v1").ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.WebApiServiceExtensionsClassPath(srcDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.WebApiMiddlewareClassPath(srcDirectory, "", projectBaseName).ClassDirectory);

            // additional from what was other projects
            Directory.CreateDirectory(ClassPathHelper.DtoClassPath(solutionDirectory, "", "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.ExceptionsClassPath(srcDirectory, "").ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.WrappersClassPath(srcDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.SharedDtoClassPath(solutionDirectory, "").ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.DbContextClassPath(srcDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.DummySeederClassPath(srcDirectory, "", projectBaseName).ClassDirectory);

            WebApiServiceExtensionsBuilder.CreateApiVersioningServiceExtension(srcDirectory, projectBaseName, fileSystem);
            WebApiServiceExtensionsBuilder.CreateCorsServiceExtension(srcDirectory, projectBaseName, fileSystem);
            WebApiServiceExtensionsBuilder.CreateWebApiServiceExtension(srcDirectory, projectBaseName, fileSystem);
            ErrorHandlerFilterAttributeBuilder.CreateErrorHandlerFilterAttribute(srcDirectory, projectBaseName, fileSystem);
            AppSettingsBuilder.CreateWebApiAppSettings(srcDirectory, dbName, projectBaseName);
            WebApiLaunchSettingsBuilder.CreateLaunchSettings(srcDirectory, projectBaseName, fileSystem);
            ProgramBuilder.CreateWebApiProgram(srcDirectory, projectBaseName, fileSystem);
            StartupBuilder.CreateWebApiStartup(srcDirectory, useJwtAuth, projectBaseName, fileSystem);
            LocalConfigBuilder.CreateLocalConfig(srcDirectory, projectBaseName, fileSystem);
            LoggingConfigurationBuilder.CreateConfigFile(srcDirectory, projectBaseName, fileSystem);
            InfrastructureServiceRegistrationBuilder.CreateInfrastructureServiceExtension(srcDirectory, projectBaseName, fileSystem);

            BasePaginationParametersBuilder.CreateBasePaginationParameters(solutionDirectory, projectBaseName, fileSystem);
            PagedListBuilder.CreatePagedList(srcDirectory, projectBaseName, fileSystem);
            CoreExceptionsBuilder.CreateExceptions(solutionDirectory, projectBaseName, fileSystem);

            Utilities.AddProjectReference(webApiProjectClassPath, @"..\..\..\SharedKernel\SharedKernel.csproj");
        }
Exemplo n.º 27
0
        public static void CreateDbContext(string solutionDirectory, ApiTemplate template)
        {
            try
            {
                var classPath = ClassPathHelper.DbContextClassPath(solutionDirectory, $"{template.DbContext.ContextName}.cs");

                if (!Directory.Exists(classPath.ClassDirectory))
                {
                    Directory.CreateDirectory(classPath.ClassDirectory);
                }

                if (File.Exists(classPath.FullClassPath))
                {
                    throw new FileAlreadyExistsException(classPath.FullClassPath);
                }

                using (FileStream fs = File.Create(classPath.FullClassPath))
                {
                    var data = GetContextFileText(classPath.ClassNamespace, template);
                    fs.Write(Encoding.UTF8.GetBytes(data));
                }

                RegisterContext(solutionDirectory, template);

                GlobalSingleton.AddCreatedFile(classPath.FullClassPath.Replace($"{solutionDirectory}{Path.DirectorySeparatorChar}", ""));
            }
            catch (FileAlreadyExistsException e)
            {
                WriteError(e.Message);
                throw;
            }
            catch (Exception e)
            {
                WriteError($"An unhandled exception occurred when running the API command.\nThe error details are: \n{e.Message}");
                throw;
            }
        }