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); }
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); } }
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); }
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); }
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()); }
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; }
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); }