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}"
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;
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;
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); }
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; } }
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); }
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}
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};
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); }
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;
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}
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); }
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); }
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;
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;
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(); }
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;
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); }
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;
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}", "")); }
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;
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}