Esempio n. 1
0
        private (string Cut, string Singular, string Plural) GetActionGroup(AppNode action, Pluralizer pluralizer = null)
        {
            pluralizer = pluralizer ?? new Pluralizer();
            switch (action.NodeType)
            {
            case AppNodeType.Query:
            case AppNodeType.ListQuery:
                var cut = GetQueryBaseName(action, trimGet: true, trimList: true);
                return(cut, pluralizer.Singularize(cut), pluralizer.Pluralize(cut));

            case AppNodeType.BoolQuery:
                // Is... supposed form: Question + Entity + Adjectives
                // others supposed form: Question + Action + Entity
                cut = string.Join("", action.NameWords.Skip(2));
                return(cut, pluralizer.Singularize(cut), pluralizer.Pluralize(cut));

            case AppNodeType.Command:
            case AppNodeType.InsertCommand:
            case AppNodeType.UpdateCommand:
            case AppNodeType.DeleteCommand:
                // supposed form: Action + Entity
                cut = string.Join("", action.NameWords.Skip(1));
                return(cut, pluralizer.Singularize(cut), pluralizer.Pluralize(cut));

            default:
                return(null, null, null);
            }
        }
Esempio n. 2
0
        private IDictionary <string, string> GenerateControllers(AppNode domainNode, IDictionary <ResourceTemplateType, ResourceTemplate> templates)
        {
            var result = new Dictionary <string, string>();

            var subDomains = domainNode.FindSubDomains();

            if (subDomains.Any())
            {
                // multidomain mode
                foreach (var subDomain in subDomains)
                {
                    var template = GetControllerTemplate(templates, subDomain, domainNode);
                    var path     = $"{domainNode.Name}/{subDomain.Name}Controller.cs";
                    result[path] = template.GetReplacedContent();
                }
            }
            else
            {
                // single domain mode
                var template = GetControllerTemplate(templates, domainNode);
                var path     = $"{domainNode.Name}/{domainNode.Name}Controller.cs";
                result[path] = template.GetReplacedContent();
            }

            return(result);
        }
Esempio n. 3
0
        private static string GetDtoPlaceholder(AppNode queryNode)
        {
            var dtoPlaceholder = GetQueryBaseName(queryNode, trimList: true);

            dtoPlaceholder = new Pluralizer().Singularize(dtoPlaceholder);
            dtoPlaceholder = $"{dtoPlaceholder}Dto";
            return(dtoPlaceholder);
        }
Esempio n. 4
0
        private static string GetQueryRoutePlaceholder(AppNode node, string domainPlural, string domainSingular)
        {
            var baseName = GetQueryBaseName(node, trimGet: true);
            var words    = baseName.SplitIntoWords()
                           .Select(w => w == domainPlural ||
                                   w == domainSingular
                                         ? "/"
                                         : $"{w.ToLower()}-");

            return(CleanRoutePlaceholder(words));
        }
Esempio n. 5
0
        private string GetQueryApiUrl(AppNode queryNode)
        {
            var domain     = queryNode.GetDomainName();
            var pluralizer = new Pluralizer();
            var route      = GetQueryRoutePlaceholder(queryNode, pluralizer.Pluralize(domain), pluralizer.Singularize(domain));
            var suffix     = queryNode.IsListQuery ? "" : "1";
            var url        = $"{_config.ApiUrlPrefix}/{domain.ToLower()}/{route}/{suffix}"
                             .TrimEnd('/')
                             .Replace("//", "/");

            return(url);
        }
Esempio n. 6
0
        private static string GetQueryBaseName(AppNode queryNode, bool trimGet = true, bool trimList = false)
        {
            var trim = queryNode.Name;

            trim = trimGet && trim.StartsWith("Get")
                            ? trim.Substring("Get".Length)
                            : trim;

            trim = trimList && trim.EndsWith("List")
                            ? trim.Substring(0, trim.Length - "List".Length)
                            : trim;
            return(trim);
        }
Esempio n. 7
0
        private static string GetCommandRoutePlaceholder(AppNode node, string domainPlural, string domainSingular)
        {
            var baseName = node.Name;
            var words    = baseName.SplitIntoWords();
            var parts    = words.Skip(1)
                           .Select(w => w == domainPlural ||
                                   w == domainSingular
                                         ? "/"
                                         : $"{w.ToLower()}-")
                           .ToList();

            parts.Add("/");
            parts.Add(words[0].ToLower());

            return(CleanRoutePlaceholder(parts));
        }
Esempio n. 8
0
        private string AddDetailHandlerTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode queryNode)
        {
            var path     = $"{queryNode.GetFullPath()}/{queryNode.Name}QueryHandler.cs";
            var template = GetDetailHandlerTemplate(templates, queryNode);

            result[path] = template.GetReplacedContent();
            return(path);
        }
Esempio n. 9
0
        private ResourceTemplate GetQueryIntegrationTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.IntegrationTestQuery];

            template.ResetParameters();

            var urlPlaceholder       = GetQueryApiUrl(queryNode);
            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var webNsPlaceholder     = $"{_config.Namespace}.{_config.UiSuffix}";
            var queryNsPlaceholder   = $"{appNsPlaceholder}.{queryNode.GetFullPath(".")}";
            var queriesNsPlaceholder = $"{appNsPlaceholder}.{queryNode.Parent.GetFullPath(".")}";
            var namespacePlaceholder = $"{webNsPlaceholder}.IntegrationTests.Controllers.{queryNode.GetDomainName()}";
            var vmPlaceholder        = $"{GetQueryBaseName(queryNode, trimGet: true)}Vm";

            template.SetParameter(TemplateParameterType.QueryNsPlaceholder, queryNsPlaceholder);
            template.SetParameter(TemplateParameterType.QueriesNsPlaceholder, queriesNsPlaceholder);
            template.SetParameter(TemplateParameterType.WebNsPlaceholder, webNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);

            template.SetParameter(TemplateParameterType.QueryPlaceholder, queryNode.Name);// special case here without "Query" suffix
            template.SetParameter(TemplateParameterType.FixturePlaceholder, $"{queryNode.Name}QueryTests");
            template.SetParameter(TemplateParameterType.VmPlaceholder, vmPlaceholder);
            template.SetParameter(TemplateParameterType.UrlPlaceholder, urlPlaceholder);

            return(template);
        }
Esempio n. 10
0
        private string AddQueryIntegrationTestTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode queryNode)
        {
            var path     = $"Controllers/{queryNode.Parent.GetFullPath()}/{queryNode.Name}QueryIntegrationTest.cs";
            var template = GetQueryIntegrationTemplate(templates, queryNode);

            result[path] = template.GetReplacedContent();
            return(path);
        }
Esempio n. 11
0
        private ResourceTemplate GetQueryTestTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.UnitTestQuery];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var persistNsPlaceholder = $"{_config.Namespace}.Persistence";
            var queryNsPlaceholder   = $"{appNsPlaceholder}.{queryNode.GetFullPath(".")}";
            var namespacePlaceholder = $"{appNsPlaceholder}.UnitTests.{queryNode.Parent.GetFullPath(".")}";
            var vmPlaceholder        = $"{GetQueryBaseName(queryNode, trimGet: true)}Vm";

            template.SetParameter(TemplateParameterType.QueryNsPlaceholder, queryNsPlaceholder);
            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.PersistenceNsPlaceholder, persistNsPlaceholder);

            template.SetParameter(TemplateParameterType.QueryPlaceholder, queryNode.Name);// special case here without "Query" suffix
            template.SetParameter(TemplateParameterType.FixturePlaceholder, $"{queryNode.Name}QueryTests");
            template.SetParameter(TemplateParameterType.HandlerPlaceholder, $"{queryNode.Name}QueryHandler");
            template.SetParameter(TemplateParameterType.DbContextPlaceholder, GetQueryTestDbContext(_config.DbContext));
            template.SetParameter(TemplateParameterType.VmPlaceholder, vmPlaceholder);

            return(template);
        }
Esempio n. 12
0
        private string GetActionsPlaceholder(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode domainNode)
        {
            var pluralizer = new Pluralizer();
            var singular   = pluralizer.Singularize(domainNode.Name);
            var plural     = pluralizer.Pluralize(domainNode.Name);

            var actions = domainNode.FindCommands()
                          .Union(domainNode.FindQueries())
                          .Select(c =>
            {
                var group = GetActionGroup(c, pluralizer);
                return(new ControllerActionGroup
                {
                    Node = c,
                    Cut = group.Cut,
                    Sort = group.Plural.Replace(plural, ""),
                    Singular = group.Singular,
                    Plural = group.Plural,
                    DomainSingular = singular,
                    DomainPlural = plural
                });
            })
                          .GroupBy(a => a.Plural)
                          // treat entity with domain name as primary
                          .OrderBy(g => g.Key.Replace(plural, ""));

            var sb = new StringBuilder();

            foreach (var actionGroup in actions)
            {
                foreach (var action in actionGroup.OrderBy(a => a.Node.IsCommand).ThenBy(a => a.Node.Name))
                {
                    var template = GetActionTemplate(templates, action);
                    sb.Append(template.GetReplacedContent());
                }
            }

            return(sb.ToString());
        }
Esempio n. 13
0
        private ResourceTemplate GetControllerTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode domainNode, AppNode subdomainNode = null)
        {
            var template = templates[ResourceTemplateType.WebController];

            template.ResetParameters();

            var workNode = subdomainNode ?? domainNode;

            var queries  = workNode.FindQueries();
            var commands = workNode.FindCommands();

            var queriesNsPlaceholder  = GetUsingsPlaceholder(queries);
            var commandsNsPlaceholder = GetUsingsPlaceholder(commands);

            var webNsPlaceholder     = $"{_config.Namespace}.{_config.UiSuffix}";
            var namespacePlaceholder = $"{webNsPlaceholder}.Controllers.{domainNode.Name}";

            var controllerPlaceholder = $"{workNode.Name}Controller";
            var actionsPlaceholder    = GetActionsPlaceholder(templates, workNode);

            template.SetParameter(TemplateParameterType.CommandsNsPlaceholder, commandsNsPlaceholder);
            template.SetParameter(TemplateParameterType.QueriesNsPlaceholder, queriesNsPlaceholder);
            template.SetParameter(TemplateParameterType.WebNsPlaceholder, webNsPlaceholder);

            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.ControllerPlaceholder, controllerPlaceholder);
            template.SetParameter(TemplateParameterType.ActionsPlaceholder, actionsPlaceholder);

            return(template);
        }
Esempio n. 14
0
        private string[] AddEventTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode cmdNode)
        {
            if (cmdNode.Name.StartsWith("upsert", StringComparison.OrdinalIgnoreCase))
            {
                var cmdBase = cmdNode.Name.Substring("upsert".Length);

                var eventCreated    = GetEventName("Create" + cmdBase);
                var createdPath     = $"{cmdNode.GetFullPath()}/{eventCreated}.cs";
                var createdTemplate = GetEventTemplate(templates, cmdNode, eventCreated);
                result[createdPath] = createdTemplate.GetReplacedContent();

                var eventUpdated    = GetEventName("Update" + cmdBase);
                var updatedPath     = $"{cmdNode.GetFullPath()}/{eventUpdated}.cs";
                var updatedTemplate = GetEventTemplate(templates, cmdNode, eventUpdated);
                result[updatedPath] = updatedTemplate.GetReplacedContent();

                return(new[] { createdPath, updatedPath });
            }
            else
            {
                var eventName = GetEventName(cmdNode.Name);
                var path      = $"{cmdNode.GetFullPath()}/{eventName}.cs";
                var template  = GetEventTemplate(templates, cmdNode, eventName);
                result[path] = template.GetReplacedContent();

                return(new[] { path });
            }
        }
Esempio n. 15
0
        private string AddCommandHandlerTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode cmdNode)
        {
            var path     = $"{cmdNode.GetFullPath()}/{cmdNode.Name}CommandHandler.cs";
            var template = GetCommandHandlerTemplate(templates, cmdNode);

            result[path] = template.GetReplacedContent();
            return(path);
        }
Esempio n. 16
0
        private ResourceTemplate GetCommandTestTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode cmdNode)
        {
            var template = templates[ResourceTemplateType.UnitTestCommand];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var namespacePlaceholder = $"{appNsPlaceholder}.UnitTests.{cmdNode.Parent.GetFullPath(".")}";
            var commandNsPlaceholder = $"{appNsPlaceholder}.{cmdNode.GetFullPath(".")}";

            template.SetParameter(TemplateParameterType.CommandNsPlaceholder, commandNsPlaceholder);
            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);

            template.SetParameter(TemplateParameterType.CommandPlaceholder, $"{cmdNode.Name}Command");
            template.SetParameter(TemplateParameterType.FixturePlaceholder, $"{cmdNode.Name}CommandTests");
            template.SetParameter(TemplateParameterType.HandlerPlaceholder, $"{cmdNode.Name}CommandHandler");

            return(template);
        }
Esempio n. 17
0
        private ResourceTemplate GetQueryTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.AppQuery];

            template.ResetParameters();

            var namespacePlaceholder = $"{_config.Namespace}.{_config.AppSuffix}.{queryNode.GetFullPath(".")}";
            var queryPlaceholder     = $"{queryNode.Name}Query";
            var vmPlaceholder        = $"{GetQueryBaseName(queryNode, trimGet: true)}Vm";

            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.QueryPlaceholder, queryPlaceholder);
            template.SetParameter(TemplateParameterType.VmPlaceholder, vmPlaceholder);

            return(template);
        }
Esempio n. 18
0
        private ResourceTemplate GetQueryValidatorTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.AppQueryValidator];

            template.ResetParameters();

            var namespacePlaceholder = $"{_config.Namespace}.{_config.AppSuffix}.{queryNode.GetFullPath(".")}";
            var queryPlaceholder     = $"{queryNode.Name}Query";
            var validatorPlaceholder = $"{queryNode.Name}QueryValidator";

            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.QueryPlaceholder, queryPlaceholder);
            template.SetParameter(TemplateParameterType.ValidatorPlaceholder, validatorPlaceholder);

            return(template);
        }
Esempio n. 19
0
        private ResourceTemplate GetDtoTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.AppListDto];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var domainNsPlaceholder  = $"{_config.Namespace}.Domain";
            var namespacePlaceholder = $"{appNsPlaceholder}.{queryNode.GetFullPath(".")}";
            var dtoPlaceholder       = GetDtoPlaceholder(queryNode);

            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.DomainNsPlaceholder, domainNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.DtoPlaceholder, dtoPlaceholder);

            return(template);
        }
Esempio n. 20
0
        private string AddDtoTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode queryNode)
        {
            var dto      = GetDtoPlaceholder(queryNode);
            var path     = $"{queryNode.GetFullPath()}/{dto}.cs";
            var template = GetDtoTemplate(templates, queryNode);

            result[path] = template.GetReplacedContent();
            return(path);
        }
Esempio n. 21
0
        private ResourceTemplate GetCommandValidatorTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode cmdNode)
        {
            var template = templates[ResourceTemplateType.AppValidator];

            template.ResetParameters();

            var namespacePlaceholder = $"{_config.Namespace}.{_config.AppSuffix}.{cmdNode.GetFullPath(".")}";

            template.SetParameter(TemplateParameterType.CommandPlaceholder, $"{cmdNode.Name}Command");
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.ValidatorPlaceholder, $"{cmdNode.Name}CommandValidator");

            return(template);
        }
Esempio n. 22
0
        private ResourceTemplate GetDetailHandlerTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.AppDetailHandler];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var namespacePlaceholder = $"{appNsPlaceholder}.{queryNode.GetFullPath(".")}";
            var queryPlaceholder     = $"{queryNode.Name}Query";
            var handlerPlaceholder   = $"{queryPlaceholder}Handler";
            var vmPlaceholder        = $"{GetQueryBaseName(queryNode, trimGet: true)}Vm";

            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.HandlerPlaceholder, handlerPlaceholder);
            template.SetParameter(TemplateParameterType.QueryPlaceholder, queryPlaceholder);
            template.SetParameter(TemplateParameterType.VmPlaceholder, vmPlaceholder);
            template.SetParameter(TemplateParameterType.DbContextPlaceholder, _config.DbContext);

            return(template);
        }
Esempio n. 23
0
        private ResourceTemplate GetCommandHandlerTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode cmdNode)
        {
            var template = templates[ResourceTemplateType.AppHandler];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var domainNsPlaceholder  = $"{_config.Namespace}.Domain";
            var namespacePlaceholder = $"{appNsPlaceholder}.{cmdNode.GetFullPath(".")}";

            template.SetParameter(TemplateParameterType.CommandPlaceholder, $"{cmdNode.Name}Command");
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.DomainNsPlaceholder, domainNsPlaceholder);
            template.SetParameter(TemplateParameterType.DbContextPlaceholder, _config.DbContext);

            template.SetParameter(TemplateParameterType.EventPlaceholder, GetEventNameOrUpdated(cmdNode.Name));
            template.SetParameter(TemplateParameterType.HandlerPlaceholder, $"{cmdNode.Name}CommandHandler");

            return(template);
        }
Esempio n. 24
0
        private string AddDetailVmTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, Dictionary <string, string> result, AppNode queryNode)
        {
            var vm       = GetQueryBaseName(queryNode, trimGet: true);
            var path     = $"{queryNode.GetFullPath()}/{vm}Vm.cs";
            var template = GetDetailVmTemplate(templates, queryNode);

            result[path] = template.GetReplacedContent();
            return(path);
        }
Esempio n. 25
0
        private ResourceTemplate GetEventTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode cmdNode, string eventPlaceholder)
        {
            var template = templates[ResourceTemplateType.AppEvent];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var namespacePlaceholder = $"{appNsPlaceholder}.{cmdNode.GetFullPath(".")}";
            var handlerPlaceholder   = $"{eventPlaceholder}EventHandler";

            template.SetParameter(TemplateParameterType.EventPlaceholder, eventPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.HandlerPlaceholder, handlerPlaceholder);

            return(template);
        }
Esempio n. 26
0
        private ResourceTemplate GetDetailVmTemplate(IDictionary <ResourceTemplateType, ResourceTemplate> templates, AppNode queryNode)
        {
            var template = templates[ResourceTemplateType.AppDetailVm];

            template.ResetParameters();

            var appNsPlaceholder     = $"{_config.Namespace}.{_config.AppSuffix}";
            var domainNsPlaceholder  = $"{_config.Namespace}.Domain";
            var namespacePlaceholder = $"{_config.Namespace}.{_config.AppSuffix}.{queryNode.GetFullPath(".")}";
            var vmPlaceholder        = $"{GetQueryBaseName(queryNode, trimGet: true)}Vm";

            template.SetParameter(TemplateParameterType.ApplicationNsPlaceholder, appNsPlaceholder);
            template.SetParameter(TemplateParameterType.DomainNsPlaceholder, domainNsPlaceholder);
            template.SetParameter(TemplateParameterType.NamespacePlaceholder, namespacePlaceholder);
            template.SetParameter(TemplateParameterType.VmPlaceholder, vmPlaceholder);

            return(template);
        }