public LogKeyValueItem ToFile()
        {
            var controllerName = FocusOnSegmentName.EnsureFirstCharacterToUpper() + "Controller";
            var file           = Util.GetCsFileNameForEndpoints(ApiProjectOptions.PathForEndpoints, controllerName);

            return(TextFileHelper.Save(file, ToCodeAsString()));
        }
Ejemplo n.º 2
0
    public void ToFile()
    {
        var area = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var file = DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForEndpoints, area, NameConstants.EndpointInterfaces, InterfaceTypeName);

        ToFile(new FileInfo(file));
    }
Ejemplo n.º 3
0
        public LogKeyValueItem ToFile()
        {
            var area = FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var file = Util.GetCsFileNameForHandler(DomainProjectOptions.PathForSrcHandlers !, area, HandlerTypeName);

            return(TextFileHelper.Save(file, ToCodeAsString(), false));
        }
Ejemplo n.º 4
0
    public void ToFile()
    {
        var controllerName = FocusOnSegmentName.EnsureFirstCharacterToUpper() + "Controller";
        var file           = DirectoryInfoHelper.GetCsFileNameForEndpoints(ApiProjectOptions.PathForEndpoints, controllerName);

        ToFile(new FileInfo(file));
    }
Ejemplo n.º 5
0
    public FileInfo GetFilePath()
    {
        var area = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var file = DirectoryInfoHelper.GetCsFileNameForHandler(DomainProjectOptions.PathForSrcHandlers !, area, HandlerTypeName);

        return(new FileInfo(file));
    }
Ejemplo n.º 6
0
        public LogKeyValueItem ToFile()
        {
            var area         = FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var endpointName = ApiOperation.GetOperationName() + NameConstants.Endpoint;
            var file         = Util.GetCsFileNameForContract(ApiProjectOptions.PathForEndpoints, area, endpointName);

            return(TextFileHelper.Save(file, ToCodeAsString()));
        }
Ejemplo n.º 7
0
    public void ToFile()
    {
        var area       = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var resultName = ApiOperation.GetOperationName() + NameConstants.ContractResult;
        var file       = DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractResults, resultName);

        ToFile(new FileInfo(file));
    }
    public void ToFile()
    {
        var area          = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var interfaceName = "I" + ApiOperation.GetOperationName() + NameConstants.ContractHandler;
        var file          = DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractInterfaces, interfaceName);

        ToFile(new FileInfo(file));
    }
Ejemplo n.º 9
0
        public LogKeyValueItem ToFile()
        {
            var area          = FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var parameterName = ApiOperation.GetOperationName() + NameConstants.ContractParameters;
            var file          = UseOwnFolder
                ? Util.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractParameters, parameterName)
                : Util.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, parameterName);

            return(TextFileHelper.Save(file, ToCodeAsString()));
        }
        public List <EndpointMethodMetadata> GetMetadataForMethods()
        {
            var list = new List <EndpointMethodMetadata>();

            foreach (var(key, value) in ApiProjectOptions.Document.GetPathsByBasePathSegmentName(FocusOnSegmentName))
            {
                var generatorParameters = new SyntaxGeneratorContractParameters(ApiProjectOptions, FocusOnSegmentName);
                var generatedParameters = generatorParameters.GenerateSyntaxTrees();

                string segmentName = FocusOnSegmentName.EnsureFirstCharacterToUpperAndPlural();
                foreach (var apiOperation in value.Operations)
                {
                    var httpAttributeRoutePart = GetHttpAttributeRoutePart(key);
                    var routePart = string.IsNullOrEmpty(httpAttributeRoutePart)
                        ? $"/{FocusOnSegmentName}"
                        : $"/{FocusOnSegmentName}/{httpAttributeRoutePart}";
                    var operationName = apiOperation.Value.GetOperationName();

                    string?contractParameterTypeName = null;
                    if (apiOperation.Value.HasParametersOrRequestBody() || value.HasParameters())
                    {
                        contractParameterTypeName = operationName + NameConstants.ContractParameters;
                    }

                    var responseTypeNames = GetResponseTypeNames(apiOperation.Value.Responses, segmentName, operationName);
                    if (contractParameterTypeName != null &&
                        responseTypeNames.FirstOrDefault(x => x.Item1 == HttpStatusCode.BadRequest) == null)
                    {
                        responseTypeNames.Add(
                            new Tuple <HttpStatusCode, string>(
                                HttpStatusCode.BadRequest,
                                "Validation"));
                    }

                    var sgContractParameter            = generatedParameters.FirstOrDefault(x => x.ApiOperation.GetOperationName() == operationName);
                    var responseTypeNamesAndItemSchema = GetResponseTypeNamesAndItemSchema(responseTypeNames);

                    var endpointMethodMetadata = new EndpointMethodMetadata(
                        segmentName,
                        $"/api/{ApiProjectOptions.ApiVersion}{routePart}",
                        apiOperation.Key,
                        operationName,
                        "I" + operationName + NameConstants.ContractHandler,
                        contractParameterTypeName,
                        operationName + NameConstants.ContractResult,
                        responseTypeNamesAndItemSchema,
                        sgContractParameter,
                        ApiProjectOptions.Document.Components.Schemas);

                    list.Add(endpointMethodMetadata);
                }
            }

            return(list);
        }
Ejemplo n.º 11
0
        public LogKeyValueItem ToFile()
        {
            var area      = FocusOnSegmentName.EnsureFirstCharacterToUpper();
            var modelName = ApiSchemaKey.EnsureFirstCharacterToUpper();
            var file      = IsEnum
                ? Util.GetCsFileNameForContractEnumTypes(ApiProjectOptions.PathForContracts, modelName)
                : IsSharedContract
                    ? Util.GetCsFileNameForContractShared(ApiProjectOptions.PathForContractsShared, modelName)
                    : Util.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractModels, modelName);

            return(TextFileHelper.Save(file, ToCodeAsString()));
        }
Ejemplo n.º 12
0
    public void ToFile()
    {
        var area          = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var parameterName = ApiOperation.GetOperationName() + NameConstants.ContractParameters;

        var file = IsForClient
            ? DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ClientRequestParameters, parameterName)
            : UseOwnFolder
                ? DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractParameters, parameterName)
                : DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, parameterName);

        ToFile(new FileInfo(file));
    }
Ejemplo n.º 13
0
    public void ToFile()
    {
        var area      = FocusOnSegmentName.EnsureFirstCharacterToUpper();
        var modelName = ApiSchemaKey.EnsureFirstCharacterToUpper();

        if (IsForClient &&
            modelName.EndsWith(NameConstants.Request, StringComparison.Ordinal))
        {
            var clientFile = DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ClientRequestParameters, modelName);
            ToFile(new FileInfo(clientFile));
            return;
        }

        var file = IsEnum
            ? DirectoryInfoHelper.GetCsFileNameForContractEnumTypes(ApiProjectOptions.PathForContracts, modelName)
            : IsSharedContract
                ? DirectoryInfoHelper.GetCsFileNameForContractShared(ApiProjectOptions.PathForContractsShared, modelName)
                : UseOwnFolder
                    ? DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, NameConstants.ContractModels, modelName)
                    : DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForContracts, area, modelName);

        ToFile(new FileInfo(file));
    }
        public bool GenerateCode()
        {
            var controllerTypeName = FocusOnSegmentName.EnsureFirstCharacterToUpper() + "Controller";

            // Create compilationUnit
            var compilationUnit = SyntaxFactory.CompilationUnit();

            // Create a namespace
            var @namespace = SyntaxProjectFactory.CreateNamespace(
                ApiProjectOptions,
                NameConstants.Endpoints);

            // Create class
            var classDeclaration = SyntaxClassDeclarationFactory.Create(controllerTypeName);

            if (ApiProjectOptions.ApiOptions.Generator.UseAuthorization)
            {
                classDeclaration =
                    classDeclaration.AddAttributeLists(
                        SyntaxAttributeListFactory.Create(nameof(AuthorizeAttribute)));
            }

            classDeclaration =
                classDeclaration.AddAttributeLists(
                    SyntaxAttributeListFactory.Create(nameof(ApiControllerAttribute)),
                    SyntaxAttributeListFactory.CreateWithOneItemWithOneArgument(nameof(RouteAttribute), $"api/{ApiProjectOptions.ApiVersion}/{FocusOnSegmentName}"))
                .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName(nameof(ControllerBase))))
                .AddGeneratedCodeAttribute(ApiProjectOptions.ToolName, ApiProjectOptions.ToolVersion.ToString())
                .WithLeadingTrivia(SyntaxDocumentationFactory.CreateForEndpoints(FocusOnSegmentName));

            // Create Methods
            var usedApiOperations = new List <OpenApiOperation>();

            foreach (var(key, value) in ApiProjectOptions.Document.GetPathsByBasePathSegmentName(FocusOnSegmentName))
            {
                var hasRouteParameters = value.HasParameters();
                foreach (var apiOperation in value.Operations)
                {
                    var methodDeclaration = CreateMembersForEndpoints(apiOperation, key, FocusOnSegmentName, hasRouteParameters)
                                            .WithLeadingTrivia(SyntaxDocumentationFactory.CreateForEndpointMethods(apiOperation, FocusOnSegmentName));
                    classDeclaration = classDeclaration.AddMembers(methodDeclaration);

                    usedApiOperations.Add(apiOperation.Value);
                }
            }

            // Create private part for methods
            foreach (var(_, value) in ApiProjectOptions.Document.GetPathsByBasePathSegmentName(FocusOnSegmentName))
            {
                var hasRouteParameters = value.HasParameters();
                foreach (var apiOperation in value.Operations)
                {
                    var methodDeclaration = CreateMembersForEndpointsPrivateHelper(apiOperation, hasRouteParameters);
                    classDeclaration = classDeclaration.AddMembers(methodDeclaration);

                    usedApiOperations.Add(apiOperation.Value);
                }
            }

            // Add the class to the namespace.
            @namespace = @namespace.AddMembers(classDeclaration);

            // Add using statement to compilationUnit
            var includeRestResults = classDeclaration
                                     .Select <IdentifierNameSyntax>()
                                     .Any(x => x.Identifier.ValueText.Contains($"({Microsoft.OpenApi.Models.NameConstants.Pagination}<", StringComparison.Ordinal));

            compilationUnit = compilationUnit.AddUsingStatements(
                ProjectEndpointsFactory.CreateUsingList(
                    ApiProjectOptions,
                    FocusOnSegmentName,
                    usedApiOperations,
                    includeRestResults));

            // Add namespace to compilationUnit
            compilationUnit = compilationUnit.AddMembers(@namespace);

            // Set code property
            Code = compilationUnit;
            return(true);
        }