Ejemplo n.º 1
0
        public int OnExecute(CommandLineApplication configCmd)
        {
            ConsoleHelper.WriteHeader();

            var verboseMode = CommandLineApplicationHelper.GetVerboseMode(configCmd);
            var apiOptions  = ApiOptionsHelper.CreateDefault(configCmd);

            ApiOptionsHelper.ApplyValidationOverrides(apiOptions, configCmd);

            var specificationPath = CommandLineApplicationHelper.GetSpecificationPath(configCmd);
            var apiDocument       = OpenApiDocumentHelper.CombineAndGetApiDocument(specificationPath);

            var logItems = new List <LogKeyValueItem>();

            logItems.AddRange(OpenApiDocumentHelper.Validate(apiDocument, apiOptions.Validation));

            if (logItems.Any(x => x.LogCategory == LogCategoryType.Error))
            {
                return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
            }

            Console.WriteLine();
            Colorful.Console.Write("Command for client-CSharp is not implemented yet, sorry...", Color.DarkKhaki);

            return(ExitStatusCodes.Success);
        }
Ejemplo n.º 2
0
        public int OnExecute(CommandLineApplication configCmd)
        {
            ConsoleHelper.WriteHeader();

            var verboseMode = CommandLineApplicationHelper.GetVerboseMode(configCmd);
            var apiOptions  = ApiOptionsHelper.CreateDefault(configCmd);

            ApiOptionsHelper.ApplyValidationOverrides(apiOptions, configCmd);
            ApiOptionsHelper.ApplyGeneratorOverrides(apiOptions, configCmd);

            var specificationPath = CommandLineApplicationHelper.GetSpecificationPath(configCmd);
            var apiDocument       = OpenApiDocumentHelper.CombineAndGetApiDocument(specificationPath);

            var logItems = new List <LogKeyValueItem>();

            logItems.AddRange(OpenApiDocumentHelper.Validate(apiDocument, apiOptions.Validation));

            if (logItems.Any(x => x.LogCategory == LogCategoryType.Error))
            {
                return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
            }

            var projectPrefixName = CommandLineApplicationHelper.GetProjectPrefixName(configCmd);
            var outputPath        = CommandLineApplicationHelper.GetOutputPath(configCmd);
            var outputTestPath    = CommandLineApplicationHelper.GetOutputTestPath(configCmd);

            logItems.AddRange(GenerateHelper.GenerateServerApi(
                                  projectPrefixName,
                                  outputPath,
                                  outputTestPath,
                                  apiDocument,
                                  apiOptions));

            return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, CommandArea));
        }
            public async Task Updates_ApiDocument_On_Existing_Item()
            {
                var model = new ServiceApiDescriptionBuilder().WithServiceId("Updates_DisplayName_On_Existing_Item").Build();

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    context.Apis.Add(model.ToEntity());
                    context.SaveChanges();
                }

                model.ApiDocument.Info.Title = "New title";

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var store = new ApiStore(context, new Mock <ILogger <ApiStore> >().Object);
                    await store.StoreAsync(model);
                }

                using (var context = new RepositoryDbContext(DbContextOptions, StoreOptions))
                {
                    var item = context.Apis.SingleOrDefault(s => s.ServiceId == model.ServiceId);
                    item.Should().NotBeNull();

                    var document = OpenApiDocumentHelper.ReadFromJson(item.ApiDocument);

                    document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
                }
            }
Ejemplo n.º 4
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.StartObject)
            {
                JObject item = JObject.Load(reader);

                return(OpenApiDocumentHelper.ReadFromJson(item.ToString()));
            }

            return(null);
        }
        public void UpdateEntity_Updates_ApiDocument()
        {
            var model  = new ServiceApiDescriptionBuilder().Build();
            var entity = model.ToEntity();

            model.ApiDocument.Info.Title = "UpdateEntity_Updates_ApiDocument";
            model.UpdateEntity(entity);

            var document = OpenApiDocumentHelper.ReadFromJson(entity.ApiDocument);

            document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
        }
        public void Maps_All_Properties()
        {
            var model  = new ServiceApiDescriptionBuilder().Build();
            var entity = model.ToEntity();

            entity.ServiceId.Should().Be(model.ServiceId);

            var document = OpenApiDocumentHelper.ReadFromJson(entity.ApiDocument);

            var newmodel = entity.ToModel();

            newmodel.ApiDocument.Info.Title.Should().Be(model.ApiDocument.Info.Title);
            document.Info.Title.Should().Be(model.ApiDocument.Info.Title);
        }
Ejemplo n.º 7
0
        protected BaseProjectOptions(
            DirectoryInfo projectSrcGeneratePath,
            DirectoryInfo?projectTestGeneratePath,
            OpenApiDocument openApiDocument,
            FileInfo openApiDocumentFile,
            string projectPrefixName,
            string projectSuffixName,
            ApiOptions.ApiOptions apiOptions)
        {
            if (projectSrcGeneratePath == null)
            {
                throw new ArgumentNullException(nameof(projectSrcGeneratePath));
            }

            ProjectName        = projectPrefixName ?? throw new ArgumentNullException(nameof(projectPrefixName));
            PathForSrcGenerate = projectSrcGeneratePath.Name.StartsWith(ProjectName, StringComparison.OrdinalIgnoreCase)
                ? projectSrcGeneratePath.Parent !
                : projectSrcGeneratePath;

            if (projectTestGeneratePath != null)
            {
                PathForTestGenerate = projectTestGeneratePath.Name.StartsWith(ProjectName, StringComparison.OrdinalIgnoreCase)
                    ? projectTestGeneratePath.Parent !
                    : projectTestGeneratePath;
            }

            Document     = openApiDocument ?? throw new ArgumentNullException(nameof(openApiDocument));
            DocumentFile = openApiDocumentFile ?? throw new ArgumentNullException(nameof(openApiDocumentFile));

            ToolName    = "ApiGenerator";
            ToolVersion = GenerateHelper.GetAtcToolVersion();
            ApiOptions  = apiOptions;

            ApiVersion  = GetApiVersion(openApiDocument);
            ProjectName = projectPrefixName
                          .Replace(" ", ".", StringComparison.Ordinal)
                          .Replace("-", ".", StringComparison.Ordinal)
                          .Trim() + $".{projectSuffixName}";
            PathForSrcGenerate = new DirectoryInfo(Path.Combine(PathForSrcGenerate.FullName, ProjectName));
            ProjectSrcCsProj   = new FileInfo(Path.Combine(PathForSrcGenerate.FullName, $"{ProjectName}.csproj"));
            if (PathForTestGenerate != null)
            {
                PathForTestGenerate = new DirectoryInfo(Path.Combine(PathForTestGenerate.FullName, $"{ProjectName}.Tests"));
                ProjectTestCsProj   = new FileInfo(Path.Combine(PathForTestGenerate.FullName, $"{ProjectName}.Tests.csproj"));
            }

            BasePathSegmentNames = OpenApiDocumentHelper.GetBasePathSegmentNames(openApiDocument);
        }
Ejemplo n.º 8
0
        public int OnExecute(CommandLineApplication configCmd)
        {
            ConsoleHelper.WriteHeader();

            var verboseMode = CommandLineApplicationHelper.GetVerboseMode(configCmd);
            var apiOptions  = ApiOptionsHelper.CreateDefault(configCmd);

            ApiOptionsHelper.ApplyValidationOverrides(apiOptions, configCmd);

            var specificationPath = CommandLineApplicationHelper.GetSpecificationPath(configCmd);
            var apiDocument       = OpenApiDocumentHelper.CombineAndGetApiDocument(specificationPath);

            var logItems = new List <LogKeyValueItem>();

            logItems.AddRange(OpenApiDocumentHelper.Validate(apiDocument, apiOptions.Validation));

            return(ConsoleHelper.WriteLogItemsAndExit(logItems, verboseMode, "Schema"));
        }
        /// <summary>
        /// Creates a new instance of the service mapper profile
        /// </summary>
        public ApiDescriptionMapperProfile()
        {
            CreateMap <ServiceApiDescription, ApiDescription>()
            .ForMember(dest => dest.Id, opt => opt.Ignore());

            CreateMap <string, OpenApiDocument>()
            .ConstructUsing(src => OpenApiDocumentHelper.ReadFromJson(src))
            .ForMember(dest => dest.Components, opt => opt.Ignore())
            .ForMember(dest => dest.Extensions, opt => opt.Ignore())
            .ForMember(dest => dest.ExternalDocs, opt => opt.Ignore())
            .ForMember(dest => dest.Info, opt => opt.Ignore())
            .ForMember(dest => dest.Paths, opt => opt.Ignore())
            .ForMember(dest => dest.SecurityRequirements, opt => opt.Ignore())
            .ForMember(dest => dest.Servers, opt => opt.Ignore())
            .ForMember(dest => dest.Tags, opt => opt.Ignore())
            ;

            CreateMap <OpenApiDocument, string>()
            .ConstructUsing(src => src.ToJson());
        }
Ejemplo n.º 10
0
    public ClientCSharpApiProjectOptions(
        DirectoryInfo projectSrcGeneratePath,
        string?clientFolderName,
        OpenApiDocument openApiDocument,
        FileInfo openApiDocumentFile,
        string projectPrefixName,
        string projectSuffixName,
        bool excludeEndpointGeneration,
        ApiOptions apiOptions,
        bool usingCodingRules)
    {
        ArgumentNullException.ThrowIfNull(projectSrcGeneratePath);

        ProjectName        = projectPrefixName ?? throw new ArgumentNullException(nameof(projectPrefixName));
        PathForSrcGenerate = projectSrcGeneratePath.Name.StartsWith(ProjectName, StringComparison.OrdinalIgnoreCase)
            ? projectSrcGeneratePath.Parent !
            : projectSrcGeneratePath;

        ForClient        = true;
        ClientFolderName = clientFolderName;
        Document         = openApiDocument ?? throw new ArgumentNullException(nameof(openApiDocument));
        DocumentFile     = openApiDocumentFile ?? throw new ArgumentNullException(nameof(openApiDocumentFile));

        ToolName    = "ApiGenerator";
        ToolVersion = GenerateHelper.GetAtcToolVersion();
        ApiOptions  = apiOptions;
        ProjectName = projectPrefixName
                      .Replace(" ", ".", StringComparison.Ordinal)
                      .Replace("-", ".", StringComparison.Ordinal)
                      .Trim() + $".{projectSuffixName}";
        PathForSrcGenerate = new DirectoryInfo(Path.Combine(PathForSrcGenerate.FullName, ProjectName));
        ProjectSrcCsProj   = new FileInfo(Path.Combine(PathForSrcGenerate.FullName, $"{ProjectName}.csproj"));

        BasePathSegmentNames = OpenApiDocumentHelper.GetBasePathSegmentNames(openApiDocument);

        UsingCodingRules          = usingCodingRules;
        ExcludeEndpointGeneration = excludeEndpointGeneration;
    }
Ejemplo n.º 11
0
    protected BaseProjectOptions(
        DirectoryInfo projectSrcGeneratePath,
        DirectoryInfo?projectTestGeneratePath,
        OpenApiDocument openApiDocument,
        FileInfo openApiDocumentFile,
        string projectPrefixName,
        string?projectSuffixName,
        ApiOptions apiOptions,
        bool usingCodingRules,
        bool forClient          = false,
        string?clientFolderName = null)
    {
        ArgumentNullException.ThrowIfNull(projectSrcGeneratePath);

        ProjectName        = projectPrefixName ?? throw new ArgumentNullException(nameof(projectPrefixName));
        PathForSrcGenerate = projectSrcGeneratePath.Name.StartsWith(ProjectName, StringComparison.OrdinalIgnoreCase)
            ? projectSrcGeneratePath.Parent !
            : projectSrcGeneratePath;

        if (projectTestGeneratePath is not null)
        {
            PathForTestGenerate = projectTestGeneratePath.Name.StartsWith(ProjectName, StringComparison.OrdinalIgnoreCase)
                ? projectTestGeneratePath.Parent !
                : projectTestGeneratePath;
        }

        Document     = openApiDocument ?? throw new ArgumentNullException(nameof(openApiDocument));
        DocumentFile = openApiDocumentFile ?? throw new ArgumentNullException(nameof(openApiDocumentFile));

        ToolName    = "ApiGenerator";
        ToolVersion = GenerateHelper.GetAtcToolVersion();
        ApiOptions  = apiOptions;

        RouteBase   = OpenApiDocumentHelper.GetServerUrlBasePath(openApiDocument);
        ProjectName = string.IsNullOrEmpty(projectSuffixName)
            ? projectPrefixName
                      .Replace(" ", ".", StringComparison.Ordinal)
                      .Replace("-", ".", StringComparison.Ordinal)
                      .Trim()
            : projectPrefixName
                      .Replace(" ", ".", StringComparison.Ordinal)
                      .Replace("-", ".", StringComparison.Ordinal)
                      .Trim() + $".{projectSuffixName}";

        ProjectPrefixName = ProjectName.Contains('.', StringComparison.Ordinal)
            ? ProjectName.Substring(0, ProjectName.IndexOf('.', StringComparison.Ordinal))
            : ProjectName;

        PathForSrcGenerate = new DirectoryInfo(Path.Combine(PathForSrcGenerate.FullName, ProjectName));
        ProjectSrcCsProj   = new FileInfo(Path.Combine(PathForSrcGenerate.FullName, $"{ProjectName}.csproj"));
        if (PathForTestGenerate is not null)
        {
            PathForTestGenerate = new DirectoryInfo(Path.Combine(PathForTestGenerate.FullName, $"{ProjectName}.Tests"));
            ProjectTestCsProj   = new FileInfo(Path.Combine(PathForTestGenerate.FullName, $"{ProjectName}.Tests.csproj"));
        }

        this.UsingCodingRules = usingCodingRules;
        this.IsForClient      = forClient;
        this.ClientFolderName = clientFolderName;

        BasePathSegmentNames = OpenApiDocumentHelper.GetBasePathSegmentNames(openApiDocument);
    }