public LogKeyValueItem ToFile() { var controllerName = FocusOnSegmentName.EnsureFirstCharacterToUpper() + "Controller"; var file = Util.GetCsFileNameForEndpoints(ApiProjectOptions.PathForEndpoints, controllerName); return(TextFileHelper.Save(file, ToCodeAsString())); }
public void ToFile() { var area = FocusOnSegmentName.EnsureFirstCharacterToUpper(); var file = DirectoryInfoHelper.GetCsFileNameForContract(ApiProjectOptions.PathForEndpoints, area, NameConstants.EndpointInterfaces, InterfaceTypeName); ToFile(new FileInfo(file)); }
public LogKeyValueItem ToFile() { var area = FocusOnSegmentName.EnsureFirstCharacterToUpper(); var file = Util.GetCsFileNameForHandler(DomainProjectOptions.PathForSrcHandlers !, area, HandlerTypeName); return(TextFileHelper.Save(file, ToCodeAsString(), false)); }
public void ToFile() { var controllerName = FocusOnSegmentName.EnsureFirstCharacterToUpper() + "Controller"; var file = DirectoryInfoHelper.GetCsFileNameForEndpoints(ApiProjectOptions.PathForEndpoints, controllerName); ToFile(new FileInfo(file)); }
public FileInfo GetFilePath() { var area = FocusOnSegmentName.EnsureFirstCharacterToUpper(); var file = DirectoryInfoHelper.GetCsFileNameForHandler(DomainProjectOptions.PathForSrcHandlers !, area, HandlerTypeName); return(new FileInfo(file)); }
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())); }
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)); }
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); }
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())); }
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)); }
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); }