Beispiel #1
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}"
Beispiel #2
0
        private static string WriteTestFileText(string solutionDirectory, string testDirectory, string srcDirectory, ClassPath classPath, string projectBaseName)
        {
            var testFixtureName = Utilities.GetIntegrationTestFixtureName();

            var servicesClassPath     = ClassPathHelper.WebApiServicesClassPath(srcDirectory, "", projectBaseName);
            var policyDomainClassPath = ClassPathHelper.PolicyDomainClassPath(srcDirectory, "", projectBaseName);
            var entityClassPath       = ClassPathHelper.EntityClassPath(testDirectory, "", "RolePermissions", projectBaseName);
            var dtoClassPath          = ClassPathHelper.DtoClassPath(solutionDirectory, "", "RolePermission", projectBaseName);
            var rolesClassPath        = ClassPathHelper.SharedKernelDomainClassPath(solutionDirectory, "");

            return(@$ "namespace {classPath.ClassNamespace};

using {servicesClassPath.ClassNamespace};
using {policyDomainClassPath.ClassNamespace};
using {entityClassPath.ClassNamespace};
using {dtoClassPath.ClassNamespace};
using {rolesClassPath.ClassNamespace};
using Bogus;
using FluentAssertions;
using HeimGuard;
using Microsoft.AspNetCore.Http;
using Moq;
using NUnit.Framework;
using System.Threading.Tasks;
using System.Security.Claims;
using static {testFixtureName};
        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;
Beispiel #4
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;
        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;
        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;
Beispiel #7
0
        public static void CreateEntity(string srcDirectory, Entity entity, string projectBaseName, IFileSystem fileSystem)
        {
            var classPath = ClassPathHelper.EntityClassPath(srcDirectory, $"{entity.Name}.cs", entity.Plural, projectBaseName);
            var fileText  = GetEntityFileText(classPath.ClassNamespace, srcDirectory, entity, projectBaseName);

            Utilities.CreateFile(classPath, fileText, fileSystem);
        }
Beispiel #8
0
        public static void CreateEntity(string solutionDirectory, Entity entity, IFileSystem fileSystem)
        {
            try
            {
                var classPath = ClassPathHelper.EntityClassPath(solutionDirectory, $"{entity.Name}.cs");

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

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

                using (var fs = fileSystem.File.Create(classPath.FullClassPath))
                {
                    var data = GetEntityFileText(classPath.ClassNamespace, entity);
                    fs.Write(Encoding.UTF8.GetBytes(data));
                }

                GlobalSingleton.AddCreatedFile(classPath.FullClassPath.Replace($"{solutionDirectory}{fileSystem.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;
            }
        }
Beispiel #9
0
        public static void CreateBaseEntity(string srcDirectory, string projectBaseName, IFileSystem fileSystem)
        {
            var classPath = ClassPathHelper.EntityClassPath(srcDirectory, $"BaseEntity.cs", "", projectBaseName);
            var fileText  = GetBaseEntityFileText(classPath.ClassNamespace);

            Utilities.CreateFile(classPath, fileText, fileSystem);
        }
Beispiel #10
0
        public static string GetEntityFileText(string classNamespace, string srcDirectory, Entity entity, string projectBaseName)
        {
            var propString      = EntityPropBuilder(entity.Properties);
            var usingSieve      = entity.Properties.Where(e => e.CanFilter || e.CanSort).ToList().Count > 0 ? @$ "{Environment.NewLine}using Sieve.Attributes;" : "";
            var tableAnnotation = EntityAnnotationBuilder(entity);

            var foreignEntityUsings = "";
            var foreignProps        = entity.Properties.Where(e => e.IsForeignKey).ToList();

            foreach (var entityProperty in foreignProps)
            {
                var classPath = ClassPathHelper.EntityClassPath(srcDirectory, $"", entityProperty.ForeignEntityPlural, projectBaseName);
                foreignEntityUsings += $@"
using {classPath.ClassNamespace};";
            }


            return(@$ "namespace {classNamespace};

using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Runtime.Serialization;{usingSieve}{foreignEntityUsings}

{tableAnnotation}
Beispiel #11
0
        public static string GetProfileFileText(string classNamespace, Entity entity, string solutionDirectory, string projectBaseName)
        {
            var entitiesClassPath = ClassPathHelper.EntityClassPath(solutionDirectory, "", projectBaseName);
            var dtoClassPath      = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);

            return(@$ "namespace {classNamespace}
{{
    using {dtoClassPath.ClassNamespace};
    using AutoMapper;
    using {entitiesClassPath.ClassNamespace};
Beispiel #12
0
        private static void BuildDomainProject(string solutionDirectory)
        {
            var domainProjectClassPath = ClassPathHelper.DomainProjectClassPath(solutionDirectory);

            DomainCsProjBuilder.CreateDomainCsProj(solutionDirectory);
            Utilities.ExecuteProcess("dotnet", $@"sln add ""{domainProjectClassPath.FullClassPath}"" --solution-folder {"Core"}", solutionDirectory);

            // dir won't show up in project until file is added
            Directory.CreateDirectory(ClassPathHelper.EntityClassPath(solutionDirectory, "").ClassDirectory);
        }
Beispiel #13
0
        public static string GetContextFileText(string classNamespace, List <Entity> entities, string dbContextName, string solutionDirectory, string projectBaseName)
        {
            var entitiesClassPath = ClassPathHelper.EntityClassPath(solutionDirectory, "", projectBaseName);

            return(@$ "namespace {classNamespace}
{{
    using {entitiesClassPath.ClassNamespace};
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.ChangeTracking;
    using System.Threading;
    using System.Threading.Tasks;
Beispiel #14
0
        private static string GetFakeFileText(string classNamespace, string objectToFakeClassName, Entity entity, string solutionDirectory, string testDirectory, string projectBaseName)
        {
            var entitiesClassPath = ClassPathHelper.EntityClassPath(testDirectory, "", entity.Plural, projectBaseName);
            var dtoClassPath      = ClassPathHelper.DtoClassPath(solutionDirectory, "", entity.Name, projectBaseName);

            // this... is super fragile. Should really refactor this
            var usingStatement = objectToFakeClassName.Contains("DTO", StringComparison.InvariantCultureIgnoreCase) ? @$ "using {dtoClassPath.ClassNamespace};" : $"using {entitiesClassPath.ClassNamespace};";

            return(@$ "namespace {classNamespace};

using AutoBogus;
{usingStatement}
Beispiel #15
0
        public static void RemoveDirectory(string solutionDirectory)
        {
            var classPath = ClassPathHelper.EntityClassPath(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);
        }
Beispiel #16
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);
        }
Beispiel #17
0
        public void EntityBuilder_CreateEntity_throws_error_if_file_exists()
        {
            var solutionDirectory = @"c:\myrepo";
            var fileSystem        = new MockFileSystem();

            fileSystem.AddDirectory(solutionDirectory);

            var entity           = CannedGenerator.FakeBasicProduct();
            var expectedFilePath = ClassPathHelper.EntityClassPath(solutionDirectory, $"{entity.Name}.cs").FullClassPath;

            fileSystem.AddFile(expectedFilePath, new MockFileData("content doesn't matter"));

            Assert.Throws <FileAlreadyExistsException>(() => EntityBuilder.CreateEntity(solutionDirectory, entity, fileSystem));
        }
        public static string GetContextFileText(string classNamespace, List <Entity> entities, string dbContextName, string solutionDirectory, string projectBaseName)
        {
            var entitiesClassPath          = ClassPathHelper.EntityClassPath(solutionDirectory, "", projectBaseName);
            var modelBuilderPKNotGenerated = "";

            entities.ForEach(entity => modelBuilderPKNotGenerated += @$ "            modelBuilder.Entity<{entity.Name}>().Property(p => p.{entity.PrimaryKeyProperty.Name}).ValueGeneratedNever();{Environment.NewLine}");
            modelBuilderPKNotGenerated = modelBuilderPKNotGenerated.RemoveLastNewLine();

            return(@$ "namespace {classNamespace}
{{
    using {entitiesClassPath.ClassNamespace};
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.ChangeTracking;
    using System.Threading;
    using System.Threading.Tasks;
Beispiel #19
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;
Beispiel #20
0
        public void EntityBuilder_CreateEntity_createsEntityFile()
        {
            var solutionDirectory = @"c:\myrepo";
            var fileSystem        = new MockFileSystem();

            fileSystem.AddDirectory(solutionDirectory);

            var entity           = CannedGenerator.FakeBasicProduct();
            var expectedFilePath = ClassPathHelper.EntityClassPath(solutionDirectory, $"{entity.Name}.cs").FullClassPath;

            EntityBuilder.CreateEntity(solutionDirectory, entity, fileSystem);

            var exists = fileSystem.FileExists(expectedFilePath);

            exists.Should().BeTrue();
        }
Beispiel #21
0
        public static void Remove(string solutionDirectory, string filename)
        {
            var classPath = ClassPathHelper.EntityClassPath(solutionDirectory, filename);

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

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

            File.Delete(classPath.FullClassPath);
        }
        private static string WriteTestFileText(string solutionDirectory, string srcDirectory, ClassPath classPath, string projectBaseName)
        {
            var wrapperClassPath      = ClassPathHelper.WrappersClassPath(srcDirectory, "", projectBaseName);
            var domainPolicyClassPath = ClassPathHelper.PolicyDomainClassPath(srcDirectory, "", projectBaseName);
            var entityClassPath       = ClassPathHelper.EntityClassPath(srcDirectory, "", "RolePermissions", projectBaseName);
            var dtoClassPath          = ClassPathHelper.DtoClassPath(solutionDirectory, "", "RolePermission", projectBaseName);
            var rolesClassPath        = ClassPathHelper.SharedKernelDomainClassPath(solutionDirectory, "");

            return(@$ "namespace {classPath.ClassNamespace};

using {domainPolicyClassPath.ClassNamespace};
using {entityClassPath.ClassNamespace};
using {wrapperClassPath.ClassNamespace};
using {dtoClassPath.ClassNamespace};
using {rolesClassPath.ClassNamespace};
using Bogus;
using FluentAssertions;
using NUnit.Framework;
Beispiel #23
0
        private static void BuildCoreProject(string solutionDirectory, string projectDirectory, string projectBaseName, IFileSystem fileSystem)
        {
            var solutionFolder       = projectDirectory.Replace(solutionDirectory, "").Replace(Path.DirectorySeparatorChar.ToString(), "");
            var coreProjectClassPath = ClassPathHelper.CoreProjectClassPath(projectDirectory, projectBaseName);

            CoreCsProjBuilder.CreateCoreCsProj(projectDirectory, projectBaseName);
            Utilities.ExecuteProcess("dotnet", $@"sln add ""{coreProjectClassPath.FullClassPath}"" --solution-folder {solutionFolder}", solutionDirectory);

            // dir won't show up in project until file is added
            Directory.CreateDirectory(ClassPathHelper.EntityClassPath(projectDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.DtoClassPath(projectDirectory, "", "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.CoreExceptionClassPath(projectDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.WrappersClassPath(projectDirectory, "", projectBaseName).ClassDirectory);
            Directory.CreateDirectory(ClassPathHelper.SharedDtoClassPath(projectDirectory, "", projectBaseName).ClassDirectory);

            BasePaginationParametersBuilder.CreateBasePaginationParameters(projectDirectory, projectBaseName, fileSystem);
            PagedListBuilder.CreatePagedList(projectDirectory, projectBaseName, fileSystem);
            ResponseBuilder.CreateResponse(projectDirectory, projectBaseName, fileSystem);
            CoreExceptionsBuilder.CreateExceptions(projectDirectory, projectBaseName);
        }
Beispiel #24
0
        public static string GetContextFileText(string classNamespace, List <Entity> entities, string dbContextName, string srcDirectory, string projectBaseName)
        {
            var entitiesUsings = "";

            foreach (var entity in entities)
            {
                var classPath = ClassPathHelper.EntityClassPath(srcDirectory, "", entity.Plural, projectBaseName);
                entitiesUsings += $"{Environment.NewLine}using {classPath.ClassNamespace};";
            }
            var servicesClassPath   = ClassPathHelper.WebApiServicesClassPath(srcDirectory, "", projectBaseName);
            var baseEntityClassPath = ClassPathHelper.EntityClassPath(srcDirectory, $"", "", projectBaseName);

            return(@$ "namespace {classNamespace};

{entitiesUsings}
using {baseEntityClassPath.ClassNamespace};
using {servicesClassPath.ClassNamespace};
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Threading;
using System.Threading.Tasks;
Beispiel #25
0
        public static void AddEntityProperties(string solutionDirectory, string entityName, List <EntityProperty> props)
        {
            var classPath = ClassPathHelper.EntityClassPath(solutionDirectory, $"{entityName}.cs");

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

            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($"add-on property marker"))
                        {
                            newText += @$ "{Environment.NewLine}{Environment.NewLine}{EntityBuilder.EntityPropBuilder(props)}";
                        }

                        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}", ""));
        }
Beispiel #26
0
        public static string GetContextFileText(string classNamespace, List <Entity> entities, string dbContextName, string srcDirectory, bool useSoftDelete, string projectBaseName)
        {
            var entitiesUsings = "";

            foreach (var entity in entities)
            {
                var classPath = ClassPathHelper.EntityClassPath(srcDirectory, "", entity.Plural, projectBaseName);
                entitiesUsings += $"{Environment.NewLine}using {classPath.ClassNamespace};";
            }
            var servicesClassPath   = ClassPathHelper.WebApiServicesClassPath(srcDirectory, "", projectBaseName);
            var baseEntityClassPath = ClassPathHelper.EntityClassPath(srcDirectory, $"", "", projectBaseName);

            var softDelete = useSoftDelete
                ? $@"
                    entry.State = EntityState.Modified;
                    entry.Entity.UpdateModifiedProperties(now, _currentUserService?.UserId);
                    entry.Entity.UpdateIsDeleted(true);"
                : "";
            var softDeleteFilterClass = useSoftDelete
                ? $@"

{SoftDeleteFilterClass()}"
                :"";

            var modelBuilderFilter = useSoftDelete
                ? $@"
            modelBuilder.FilterSoftDeletedRecords();"
                : "";

            return(@$ "namespace {classNamespace};

{entitiesUsings}
using {baseEntityClassPath.ClassNamespace};
using {servicesClassPath.ClassNamespace};
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Query;
Beispiel #27
0
        public static string GetEntityFileText(string classNamespace, string solutionDirectory, string srcDirectory, Entity entity, string projectBaseName)
        {
            var creationDtoName       = Utilities.GetDtoName(entity.Name, Dto.Creation);
            var creationValidatorName = Utilities.ValidatorNameGenerator(entity.Name, Validator.Creation);
            var updateDtoName         = Utilities.GetDtoName(entity.Name, Dto.Update);
            var updateValidatorName   = Utilities.ValidatorNameGenerator(entity.Name, Validator.Update);
            var profileName           = Utilities.GetProfileName(entity.Name);
            var propString            = EntityPropBuilder(entity.Properties);
            var usingSieve            = entity.Properties.Where(e => e.CanFilter || e.CanSort).ToList().Count > 0 ? @$ "{Environment.NewLine}using Sieve.Attributes;" : "";
            var tableAnnotation       = EntityAnnotationBuilder(entity);

            var foreignEntityUsings = "";
            var foreignProps        = entity.Properties.Where(e => e.IsForeignKey).ToList();

            foreach (var entityProperty in foreignProps)
            {
                var classPath = ClassPathHelper.EntityClassPath(srcDirectory, $"", entityProperty.ForeignEntityPlural, projectBaseName);

                foreignEntityUsings += $@"
using {classPath.ClassNamespace};";
            }

            var profileClassPath   = ClassPathHelper.ProfileClassPath(srcDirectory, $"", entity.Plural, projectBaseName);
            var dtoClassPath       = ClassPathHelper.DtoClassPath(solutionDirectory, $"", entity.Name, projectBaseName);
            var validatorClassPath = ClassPathHelper.ValidationClassPath(srcDirectory, $"", entity.Plural, projectBaseName);

            return(@$ "namespace {classNamespace};

using {dtoClassPath.ClassNamespace};
using {profileClassPath.ClassNamespace};
using {validatorClassPath.ClassNamespace};
using AutoMapper;
using FluentValidation;
using System.Text.Json.Serialization;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Runtime.Serialization;{usingSieve}{foreignEntityUsings}

{tableAnnotation}