Exemplo n.º 1
0
    private List <ResponseTypeNameAndItemSchema> GetResponseTypeNamesAndItemSchema(
        List <Tuple <HttpStatusCode, string> > responseTypeNames)
    {
        var list = new List <ResponseTypeNameAndItemSchema>();

        foreach (var responseTypeName in responseTypeNames)
        {
            if (string.IsNullOrEmpty(responseTypeName.Item2))
            {
                list.Add(new ResponseTypeNameAndItemSchema(responseTypeName.Item1, responseTypeName.Item2, null !));
            }
            else
            {
                var rawModelName = OpenApiDocumentSchemaModelNameHelper.GetRawModelName(responseTypeName.Item2);

                var isShared      = OperationSchemaMappings.IsShared(rawModelName);
                var fullModelName = OpenApiDocumentSchemaModelNameHelper.EnsureModelNameWithNamespaceIfNeeded(
                    ApiProjectOptions.ProjectName,
                    FocusOnSegmentName,
                    responseTypeName.Item2,
                    isShared,
                    isClient: false);

                var schema = ApiProjectOptions.Document.Components.Schemas.FirstOrDefault(x => x.Key.Equals(rawModelName, StringComparison.OrdinalIgnoreCase));
                list.Add(new ResponseTypeNameAndItemSchema(responseTypeName.Item1, fullModelName, schema.Value));
            }
        }

        return(list);
    }
        public List <SyntaxGeneratorContractModel> GenerateSyntaxTrees()
        {
            var list = new List <SyntaxGeneratorContractModel>();

            var apiOperationSchemaMaps = OperationSchemaMappings
                                         .Where(x => (x.LocatedArea == SchemaMapLocatedAreaType.Response ||
                                                      x.LocatedArea == SchemaMapLocatedAreaType.RequestBody) &&
                                                x.SegmentName.Equals(FocusOnSegmentName, StringComparison.OrdinalIgnoreCase))
                                         .ToList();

            var schemaKeys = apiOperationSchemaMaps
                             .Select(x => x.SchemaKey)
                             .Distinct()
                             .OrderBy(x => x)
                             .ToList();

            foreach (var schemaKey in schemaKeys)
            {
                var apiSchema = ApiProjectOptions.Document.Components.Schemas.First(x => x.Key.Equals(schemaKey, StringComparison.OrdinalIgnoreCase));
                if (apiSchema.Value.IsSchemaEnumOrPropertyEnum())
                {
                    var syntaxGeneratorContractModel = new SyntaxGeneratorContractModel(ApiProjectOptions, apiSchema.Key, apiSchema.Value, FocusOnSegmentName);
                    syntaxGeneratorContractModel.GenerateCode();
                    list.Add(syntaxGeneratorContractModel);
                }
                else
                {
                    var isShared = OperationSchemaMappings.IsShared(schemaKey);
                    if (isShared)
                    {
                        var syntaxGeneratorContractModel = new SyntaxGeneratorContractModel(ApiProjectOptions, apiSchema.Key, apiSchema.Value, "#");
                        syntaxGeneratorContractModel.GenerateCode();
                        list.Add(syntaxGeneratorContractModel);
                    }
                    else
                    {
                        var syntaxGeneratorContractModel = new SyntaxGeneratorContractModel(ApiProjectOptions, apiSchema.Key, apiSchema.Value, FocusOnSegmentName);
                        syntaxGeneratorContractModel.GenerateCode();
                        list.Add(syntaxGeneratorContractModel);
                    }
                }
            }

            return(list);
        }
Exemplo n.º 3
0
        // CopyFrom - SyntaxGeneratorEndpointControllers
        private bool HasSharedResponseContract()
        {
            foreach (var(_, value) in ApiProjectOptions.Document.GetPathsByBasePathSegmentName(FocusOnSegmentName))
            {
                foreach (var apiOperation in value.Operations)
                {
                    if (apiOperation.Value.Responses == null)
                    {
                        continue;
                    }

                    var responseModelName     = apiOperation.Value.Responses.GetModelNameForStatusCode(HttpStatusCode.OK);
                    var isSharedResponseModel = !string.IsNullOrEmpty(responseModelName) &&
                                                OperationSchemaMappings.IsShared(responseModelName);
                    if (isSharedResponseModel)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }