Пример #1
0
        private bool onChildHookMethodIsListProperty(OnChildHookMethod onChildHookMethod, List <ListProperty> domainClassListProperties)
        {
            foreach (var listProperty in domainClassListProperties)
            {
                if (listProperty.Name == onChildHookMethod.OriginFieldName)
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
 private CodeStatement[] BuildHookExecution(OnChildHookMethod hook)
 {
     return(new CodeStatement[]
     {
         new CodeExpressionStatement(new  CodeSnippetExpression($"var parent = await {hook.ContainingClassName}Repository.Get{hook.OriginFieldName}Parent(parsedEvent.EntityId)")),
         new CodeExpressionStatement(new  CodeSnippetExpression($"var domainResult = parent.{_nameBuilderUtil.OnChildHookMethodName(hook)}(parsedEvent)")),
         new CodeConditionStatement(
             new CodeSnippetExpression(
                 $"domainResult.Ok"),
             new CodeStatement[]
         {
             new CodeExpressionStatement(new  CodeSnippetExpression($"await {hook.ContainingClassName}Repository.Update{hook.ContainingClassName}(parent)")),
             new CodeExpressionStatement(new  CodeSnippetExpression($"return HookResult.OkResult(domainResult.DomainEvents)")),
         })
     });
 }
Пример #3
0
 public string GetClassName(OnChildHookMethod onChildHook, List <Property> classListProperties, List <ListProperty> listProperties)
 {
     return(classListProperties.FirstOrDefault(prop => prop.Name == onChildHook.OriginFieldName)?.Type ?? listProperties.FirstOrDefault(prop => prop.Name == onChildHook.OriginFieldName)?.Type);
 }
Пример #4
0
 public string OnChildHookMethodName(OnChildHookMethod hook)
 {
     return($"{hook.Name}_On{hook.OriginFieldName}{hook.MethodName}");
 }
Пример #5
0
        public CodeNamespace BuildOnChildHook(OnChildHookMethod onChildHook, List <Property> classProperties, List <ListProperty> classListProperties)
        {
            var domainClassName = _nameBuilderUtil.GetClassName(onChildHook, classProperties, classListProperties);
            var methodName      = _nameBuilderUtil.OnChildHookMethodName(onChildHook);
            var codeNamespace   = _nameSpaceBuilderUtil.WithName($"{_applicationNameSpace}.{onChildHook.ContainingClassName}s.Hooks")
                                  .WithTask()
                                  .WithDomain()
                                  .WithApplicationEntityNameSpace(onChildHook.ContainingClassName)
                                  .WithDomainEntityNameSpace(domainClassName)
                                  .Build();

            var codeTypeDeclaration = _classBuilderUtil.BuildPartial($"{methodName}Hook");

            codeTypeDeclaration.BaseTypes.Add(new CodeTypeReference(new DomainHookBaseClass().Name));

            var codeConstructor = _constructorBuilderUtil.BuildPublic(new List <Property>
            {
                new Property {
                    Name = $"{onChildHook.ContainingClassName}Repository", Type = $"I{onChildHook.ContainingClassName}Repository"
                }
            });

            codeTypeDeclaration.Members.Add(codeConstructor);

            _propertyBuilderUtil.Build(codeTypeDeclaration, new List <Property> {
                new Property {
                    Name = $"{onChildHook.ContainingClassName}Repository", Type = $"I{onChildHook.ContainingClassName}Repository"
                }
            });

            var field = new CodeMemberField
            {
                Name       = $"EventType {{ get; private set; }} = typeof({domainClassName}{onChildHook.MethodName}Event);NewHackGuid302315ed-3a05-4992-9f76-4cf075cde515",
                Attributes = MemberAttributes.Public | MemberAttributes.Final,
                Type       = new CodeTypeReference("Type")
            };

            codeTypeDeclaration.Members.Add(field);

            codeNamespace.Types.Add(codeTypeDeclaration);

            var codeMemberMethod = new CodeMemberMethod();

            codeMemberMethod.Parameters.Add(
                new CodeParameterDeclarationExpression(new CodeTypeReference(new DomainEventBaseClass().Name),
                                                       "domainEvent"));
            codeMemberMethod.ReturnType = new CodeTypeReference($"async {new DomainHookBaseClass().Methods[0].ReturnType}");
            codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            codeMemberMethod.Name       = new DomainHookBaseClass().Methods[0].Name;
            codeMemberMethod.Statements.Add(new CodeConditionStatement(
                                                new CodeSnippetExpression(
                                                    $"domainEvent is {domainClassName}{onChildHook.MethodName}Event parsedEvent"),
                                                BuildHookExecution(onChildHook)
                                                ));

            codeMemberMethod.Statements.Add(
                new CodeSnippetExpression("throw new Exception(\"Event is not in the correct list\")"));

            codeTypeDeclaration.Members.Add(codeMemberMethod);
            return(codeNamespace);
        }