private string getGenericArguments(AppApiActionTemplate action) { var modelType = getTsType(action.ModelTemplate); var resultType = getTsType(action.ResultTemplate); return($"<{modelType},{resultType}>"); }
private static ParameterSyntax[] actionArgs(AppApiActionTemplate actionTemplate, bool includeModifier) { var parameters = new List <ParameterSyntax>(); if (includeModifier) { parameters.Add ( Parameter(Identifier("modifier")) .WithType(PredefinedType(Token(SyntaxKind.StringKeyword))) ); } if (!actionTemplate.HasEmptyModel()) { parameters.Add ( Parameter(Identifier("model")) .WithType ( new TypeSyntaxFromValueTemplate(actionTemplate.ModelTemplate).Value() ) ); } return(parameters.ToArray()); }
private MethodDeclarationSyntax actionDeclaration(AppApiGroupTemplate group, AppApiActionTemplate action) { if (action.IsRedirect()) { return(actionDeclarationForRedirect(group, action)); } if (action.IsView() || action.IsPartialView()) { return(actionDeclarationForView(group, action)); } return(actionDeclarationForPost(group, action)); }
private static SyntaxNodeOrToken[] postArgs(AppApiActionTemplate actionTemplate, bool includeModifier) { var args = new List <SyntaxNodeOrToken>(); args.AddRange ( new SyntaxNodeOrToken[] { Argument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal(actionTemplate.Name) ) ), Token(SyntaxKind.CommaToken) } ); if (includeModifier) { args.AddRange ( new SyntaxNodeOrToken[] { Argument(IdentifierName("modifier")), Token(SyntaxKind.CommaToken) } ); } else { args.AddRange ( new SyntaxNodeOrToken[] { Argument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal("") ) ), Token(SyntaxKind.CommaToken) } ); } if (actionTemplate.HasEmptyModel()) { args.Add ( Argument ( ObjectCreationExpression(IdentifierName("EmptyRequest")) .WithArgumentList(ArgumentList()) ) ); } else { args.Add(Argument(IdentifierName("model"))); } return(args.ToArray()); }
private MethodDeclarationSyntax actionDeclaration(AppApiActionTemplate action) { return(MethodDeclaration ( GenericName(Identifier("Task")) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList ( new TypeSyntaxFromValueTemplate(action.ResultTemplate).Value() ) ) ), Identifier(action.Name) ) .WithModifiers ( TokenList(Token(SyntaxKind.PublicKeyword)) ) .WithParameterList ( ParameterList ( SeparatedList ( actionArgs(action, template.HasModifier) ) ) ) .WithExpressionBody ( ArrowExpressionClause ( InvocationExpression ( GenericName(Identifier("Post")) .WithTypeArgumentList ( TypeArgumentList ( SeparatedList <TypeSyntax> ( new SyntaxNodeOrToken[] { new TypeSyntaxFromValueTemplate(action.ResultTemplate).Value(), Token(SyntaxKind.CommaToken), new TypeSyntaxFromValueTemplate(action.ModelTemplate).Value() } ) ) ) ) .WithArgumentList ( ArgumentList ( SeparatedList <ArgumentSyntax> ( postArgs(action, template.HasModifier) ) ) ) ) ) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken))); }
private InvocationExpressionSyntax executeInvocationExpression(AppApiGroupTemplate group, AppApiActionTemplate action) { return(InvocationExpression ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, InvocationExpression ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, InvocationExpression ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("api"), IdentifierName("Group") ) ) .WithArgumentList ( ArgumentList ( SingletonSeparatedList ( Argument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal(group.Name) ) ) ) ) ), GenericName(Identifier("Action")) .WithTypeArgumentList ( TypeArgumentList ( SeparatedList <TypeSyntax> ( new SyntaxNodeOrToken[] { typeSyntax(action.ModelTemplate), Token(SyntaxKind.CommaToken), typeSyntax(action.ResultTemplate) } ) ) ) ) ) .WithArgumentList ( ArgumentList ( SingletonSeparatedList ( Argument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal(action.Name) ) ) ) ) ), IdentifierName("Execute") ) ) .WithArgumentList ( ArgumentList ( SeparatedList ( new ArgumentSyntax[] { Argument ( action.HasEmptyModel() ? (ExpressionSyntax)newEmptyRequest() : IdentifierName("model") ) } ) ) )); }
private MethodDeclarationSyntax actionDeclarationForPost(AppApiGroupTemplate group, AppApiActionTemplate action) { var actionDeclaration = MethodDeclaration ( GenericName(Identifier("Task") ) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList <TypeSyntax> ( GenericName(Identifier("ResultContainer")) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList ( typeSyntax(action.ResultTemplate) ) ) ) ) ) ), Identifier(action.Name) ) .WithAttributeLists ( SingletonList ( AttributeList ( SingletonSeparatedList ( Attribute(IdentifierName("HttpPost")) ) ) ) ) .WithModifiers ( TokenList(Token(SyntaxKind.PublicKeyword)) ); if (!action.HasEmptyModel()) { actionDeclaration = actionDeclaration .WithParameterList ( ParameterList ( SingletonSeparatedList ( Parameter(Identifier("model")) .WithType(typeSyntax(action.ModelTemplate)) .WithAttributeLists ( SingletonList ( AttributeList ( SingletonSeparatedList ( Attribute(IdentifierName("FromBody")) ) ) ) ) ) ) ); } return(actionDeclaration .WithBody ( Block ( SingletonList <StatementSyntax> ( ReturnStatement ( executeInvocationExpression(group, action) ) ) ) )); }
private MethodDeclarationSyntax actionDeclarationForView(AppApiGroupTemplate group, AppApiActionTemplate action) { var actionDeclaration = MethodDeclaration ( GenericName(Identifier("Task")) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList <TypeSyntax> ( IdentifierName("IActionResult") ) ) ), Identifier(action.Name) ) .WithModifiers ( TokenList ( new[] { Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.AsyncKeyword) } ) ) .WithBody ( Block ( LocalDeclarationStatement ( VariableDeclaration(IdentifierName("var")) .WithVariables ( SingletonSeparatedList ( VariableDeclarator(Identifier("result")) .WithInitializer ( EqualsValueClause ( AwaitExpression ( executeInvocationExpression(group, action) ) ) ) ) ) ), ReturnStatement ( InvocationExpression(IdentifierName(action.IsView() ? "View" : "PartialView")) .WithArgumentList ( ArgumentList ( SingletonSeparatedList ( Argument ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("result"), IdentifierName("Data") ), IdentifierName("ViewName") ) ) ) ) ) ) ) ); if (!action.HasEmptyModel()) { actionDeclaration = actionDeclaration .WithParameterList ( ParameterList ( SingletonSeparatedList ( Parameter(Identifier("model")) .WithType(typeSyntax(action.ModelTemplate)) ) ) ); } if (action.IsPartialView()) { actionDeclaration = actionDeclaration .WithAttributeLists ( SingletonList ( AttributeList ( SingletonSeparatedList ( Attribute(IdentifierName("ResponseCache")) .WithArgumentList ( AttributeArgumentList ( SingletonSeparatedList ( AttributeArgument ( LiteralExpression ( SyntaxKind.StringLiteralExpression, Literal("Default") ) ) .WithNameEquals ( NameEquals(IdentifierName("CacheProfileName")) ) ) ) ) ) ) ) ); } return(actionDeclaration); }
private MethodDeclarationSyntax actionDeclarationForRedirect(AppApiGroupTemplate group, AppApiActionTemplate action) { var actionDeclaration = MethodDeclaration ( GenericName(Identifier("Task")) .WithTypeArgumentList ( TypeArgumentList ( SingletonSeparatedList <TypeSyntax> ( IdentifierName("IActionResult") ) ) ), Identifier(action.Name) ) .WithModifiers ( TokenList ( new[] { Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.AsyncKeyword) } ) ) .WithBody ( Block ( LocalDeclarationStatement ( VariableDeclaration ( IdentifierName("var") ) .WithVariables ( SingletonSeparatedList ( VariableDeclarator(Identifier("result")) .WithInitializer ( EqualsValueClause ( AwaitExpression ( executeInvocationExpression(group, action) ) ) ) ) ) ), ReturnStatement ( InvocationExpression(IdentifierName("Redirect")) .WithArgumentList ( ArgumentList ( SingletonSeparatedList ( Argument ( MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, MemberAccessExpression ( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("result"), IdentifierName("Data") ), IdentifierName("Url") ) ) ) ) ) ) ) ); if (!action.HasEmptyModel()) { actionDeclaration = actionDeclaration .WithParameterList ( ParameterList ( SingletonSeparatedList ( Parameter(Identifier("model")) .WithType(typeSyntax(action.ModelTemplate)) ) ) ); } return(actionDeclaration); }