private List <LogKeyValueItem> GenerateContracts(List <ApiOperationSchemaMap> operationSchemaMappings) { if (operationSchemaMappings == null) { throw new ArgumentNullException(nameof(operationSchemaMappings)); } var sgContractModels = new List <SyntaxGeneratorContractModel>(); var sgContractParameters = new List <SyntaxGeneratorContractParameter>(); var sgContractResults = new List <SyntaxGeneratorContractResult>(); var sgContractInterfaces = new List <SyntaxGeneratorContractInterface>(); foreach (var basePathSegmentName in projectOptions.BasePathSegmentNames) { var generatorModels = new SyntaxGeneratorContractModels(projectOptions, operationSchemaMappings, basePathSegmentName); var generatedModels = generatorModels.GenerateSyntaxTrees(); sgContractModels.AddRange(generatedModels); var generatorParameters = new SyntaxGeneratorContractParameters(projectOptions, basePathSegmentName); var generatedParameters = generatorParameters.GenerateSyntaxTrees(); sgContractParameters.AddRange(generatedParameters); var generatorResults = new SyntaxGeneratorContractResults(projectOptions, basePathSegmentName); var generatedResults = generatorResults.GenerateSyntaxTrees(); sgContractResults.AddRange(generatedResults); var generatorInterfaces = new SyntaxGeneratorContractInterfaces(projectOptions, basePathSegmentName); var generatedInterfaces = generatorInterfaces.GenerateSyntaxTrees(); sgContractInterfaces.AddRange(generatedInterfaces); } ApiGeneratorHelper.CollectMissingContractModelFromOperationSchemaMappings( projectOptions, operationSchemaMappings, sgContractModels); var logItems = new List <LogKeyValueItem>(); foreach (var sg in sgContractModels) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractParameters) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractResults) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractInterfaces) { logItems.Add(sg.ToFile()); } return(logItems); }
private void GenerateContracts( List <ApiOperationSchemaMap> operationSchemaMappings) { ArgumentNullException.ThrowIfNull(operationSchemaMappings); var sgContractModels = new List <SyntaxGeneratorContractModel>(); var sgContractParameters = new List <SyntaxGeneratorContractParameter>(); var sgContractResults = new List <SyntaxGeneratorContractResult>(); var sgContractInterfaces = new List <SyntaxGeneratorContractInterface>(); foreach (var basePathSegmentName in projectOptions.BasePathSegmentNames) { var generatorModels = new SyntaxGeneratorContractModels(logger, projectOptions, operationSchemaMappings, basePathSegmentName); var generatedModels = generatorModels.GenerateSyntaxTrees(); sgContractModels.AddRange(generatedModels); var generatorParameters = new SyntaxGeneratorContractParameters(logger, projectOptions, basePathSegmentName); var generatedParameters = generatorParameters.GenerateSyntaxTrees(); sgContractParameters.AddRange(generatedParameters); var generatorResults = new SyntaxGeneratorContractResults(logger, projectOptions, basePathSegmentName); var generatedResults = generatorResults.GenerateSyntaxTrees(); sgContractResults.AddRange(generatedResults); var generatorInterfaces = new SyntaxGeneratorContractInterfaces(logger, projectOptions, basePathSegmentName); var generatedInterfaces = generatorInterfaces.GenerateSyntaxTrees(); sgContractInterfaces.AddRange(generatedInterfaces); } ApiGeneratorHelper.CollectMissingContractModelFromOperationSchemaMappings( logger, projectOptions, operationSchemaMappings, sgContractModels); foreach (var sg in sgContractModels) { sg.ToFile(); } foreach (var sg in sgContractParameters) { sg.ToFile(); } foreach (var sg in sgContractResults) { sg.ToFile(); } foreach (var sg in sgContractInterfaces) { sg.ToFile(); } }
private void GenerateContracts( List <ApiOperationSchemaMap> operationSchemaMappings) { ArgumentNullException.ThrowIfNull(operationSchemaMappings); var sgContractModels = new List <SyntaxGeneratorContractModel>(); var sgContractParameters = new List <SyntaxGeneratorContractParameter>(); foreach (var basePathSegmentName in projectOptions.BasePathSegmentNames) { var generatorModels = new SyntaxGeneratorContractModels(logger, apiProjectOptions, operationSchemaMappings, basePathSegmentName); var generatedModels = generatorModels.GenerateSyntaxTrees(); sgContractModels.AddRange(generatedModels); var generatorParameters = new SyntaxGeneratorContractParameters(logger, apiProjectOptions, basePathSegmentName); var generatedParameters = generatorParameters.GenerateSyntaxTrees(); sgContractParameters.AddRange(generatedParameters); } ApiGeneratorHelper.CollectMissingContractModelFromOperationSchemaMappings( logger, apiProjectOptions, operationSchemaMappings, sgContractModels); foreach (var sg in sgContractModels) { sg.IsForClient = true; sg.UseOwnFolder = false; sg.ToFile(); } foreach (var sg in sgContractParameters) { sg.IsForClient = true; sg.UseOwnFolder = false; sg.ToFile(); } }
private static List <LogKeyValueItem> GenerateContracts(ApiProjectOptions apiProjectOptions, List <ApiOperationSchemaMap> operationSchemaMappings) { if (apiProjectOptions == null) { throw new ArgumentNullException(nameof(apiProjectOptions)); } if (operationSchemaMappings == null) { throw new ArgumentNullException(nameof(operationSchemaMappings)); } var sgContractModels = new List <SyntaxGeneratorContractModel>(); var sgContractParameters = new List <SyntaxGeneratorContractParameter>(); var sgContractResults = new List <SyntaxGeneratorContractResult>(); var sgContractInterfaces = new List <SyntaxGeneratorContractInterface>(); foreach (var basePathSegmentName in apiProjectOptions.BasePathSegmentNames) { var generatorModels = new SyntaxGeneratorContractModels(apiProjectOptions, operationSchemaMappings, basePathSegmentName); var generatedModels = generatorModels.GenerateSyntaxTrees(); sgContractModels.AddRange(generatedModels); var generatorParameters = new SyntaxGeneratorContractParameters(apiProjectOptions, basePathSegmentName); var generatedParameters = generatorParameters.GenerateSyntaxTrees(); sgContractParameters.AddRange(generatedParameters); var generatorResults = new SyntaxGeneratorContractResults(apiProjectOptions, basePathSegmentName); var generatedResults = generatorResults.GenerateSyntaxTrees(); sgContractResults.AddRange(generatedResults); var generatorInterfaces = new SyntaxGeneratorContractInterfaces(apiProjectOptions, basePathSegmentName); var generatedInterfaces = generatorInterfaces.GenerateSyntaxTrees(); sgContractInterfaces.AddRange(generatedInterfaces); } var missingOperationSchemaMappings = new List <ApiOperationSchemaMap>(); foreach (var map in operationSchemaMappings) { if (sgContractModels.FirstOrDefault(x => x.ApiSchemaKey.Equals(map.SchemaKey, StringComparison.OrdinalIgnoreCase)) == null) { missingOperationSchemaMappings.Add(map); } } foreach (var map in missingOperationSchemaMappings) { if (missingOperationSchemaMappings.Count(x => x.SchemaKey.Equals(map.SchemaKey, StringComparison.OrdinalIgnoreCase)) > 1) { throw new NotImplementedException($"SchemaKey: {map.SchemaKey} is not generated and exist multiple times - location-calculation is missing."); } var generatorModel = new SyntaxGeneratorContractModel( apiProjectOptions, map.SchemaKey, apiProjectOptions.Document.Components.Schemas.First(x => x.Key.Equals(map.SchemaKey, StringComparison.OrdinalIgnoreCase)).Value, map.SegmentName); generatorModel.GenerateCode(); sgContractModels.Add(generatorModel); } var logItems = new List <LogKeyValueItem>(); foreach (var sg in sgContractModels) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractParameters) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractResults) { logItems.Add(sg.ToFile()); } foreach (var sg in sgContractInterfaces) { logItems.Add(sg.ToFile()); } return(logItems); }
public List <EndpointMethodMetadata> GetMetadataForMethods() { var list = new List <EndpointMethodMetadata>(); foreach (var(key, value) in ApiProjectOptions.Document.GetPathsByBasePathSegmentName(FocusOnSegmentName)) { var generatorParameters = new SyntaxGeneratorContractParameters(logger, ApiProjectOptions, FocusOnSegmentName); var generatedParameters = generatorParameters.GenerateSyntaxTrees(); var hasGlobalParameters = value.HasParameters(); foreach (var apiOperation in value.Operations) { var httpAttributeRoutePart = GetHttpAttributeRoutePart(key); var routePart = string.IsNullOrEmpty(httpAttributeRoutePart) ? $"/{GetRouteSegment()}" : $"/{GetRouteSegment()}/{httpAttributeRoutePart}"; var operationName = apiOperation.Value.GetOperationName(); string?contractParameterTypeName = null; if (apiOperation.Value.HasParametersOrRequestBody() || value.HasParameters()) { contractParameterTypeName = operationName + NameConstants.ContractParameters; } var sgContractParameter = generatedParameters.FirstOrDefault(x => x.ApiOperation.GetOperationName() == operationName); var responseTypes = apiOperation.Value.Responses.GetResponseTypes( OperationSchemaMappings, FocusOnSegmentName, ApiProjectOptions.ProjectName, useProblemDetailsAsDefaultResponseBody: false, includeEmptyResponseTypes: false, hasGlobalParameters || apiOperation.Value.HasParametersOrRequestBody(), includeIfNotDefinedAuthorization: false, includeIfNotDefinedInternalServerError: false, isClient: false); var responseTypeNamesAndItemSchema = GetResponseTypeNamesAndItemSchema(responseTypes); var endpointMethodMetadata = new EndpointMethodMetadata( ApiProjectOptions.UseNullableReferenceTypes, ApiProjectOptions.ProjectName, FocusOnSegmentName, $"{ApiProjectOptions.RouteBase}{routePart}", apiOperation.Key, operationName, "I" + operationName + NameConstants.ContractHandler, contractParameterTypeName, operationName + NameConstants.ContractResult, responseTypeNamesAndItemSchema, sgContractParameter, ApiProjectOptions.Document.Components.Schemas, OperationSchemaMappings); list.Add(endpointMethodMetadata); } } return(list); }