/// <summary>Initializes a new instance of the <see cref="TypeScriptOperationModel" /> class.</summary> /// <param name="operation">The operation.</param> /// <param name="settings">The settings.</param> /// <param name="generator">The generator.</param> /// <param name="resolver">The resolver.</param> public TypeScriptOperationModel( SwaggerOperation operation, ClientGeneratorBaseSettings settings, SwaggerToTypeScriptClientGenerator generator, ITypeResolver resolver) : base(null, operation, resolver, generator, settings) { _operation = operation; _settings = settings; _generator = generator; var parameters = _operation.ActualParameters.ToList(); if (settings.GenerateOptionalParameters) { parameters = parameters.OrderBy(p => !p.IsRequired).ToList(); } Parameters = parameters.Select(parameter => new TypeScriptParameterModel(parameter.Name, GetParameterVariableName(parameter, _operation.Parameters), ResolveParameterType(parameter), parameter, _operation.ActualParameters.ToList(), (SwaggerToTypeScriptClientGeneratorSettings)_settings, _generator, (TypeScriptTypeResolver)resolver)) .ToList(); }
/// <summary> /// Defines the generator settings. /// </summary> private void DefineGeneratorSettings() { if (_settings.LanguageCode == Language.CSharp) { _langCodeGenSettings = new SwaggerToCSharpClientGeneratorSettings() { CSharpGeneratorSettings = { Namespace = _settings.ClientNamespace, SchemaType = SchemaType.Swagger2 //TemplateDirectory = }, AdditionalNamespaceUsages = _settings.GetNamespaces(), GenerateSyncMethods = _settings.GenerateSyncMethods, ClientClassAccessModifier = "public", ClientBaseClass = "ApiBaseClient", ParameterArrayType = "List", //Default: System.Collections.Generic.IEnumerable ParameterDictionaryType = "Dictonary", //Default: System.Collections.Generic.IDictionary ResponseArrayType = "List", // Default: System.Collections.ObjectModel.ObservableCollection ResponseDictionaryType = "Dictonary", //Default: System.Collections.Generic.Dictionary GenerateDtoTypes = false, GenerateClientInterfaces = true, }; List <Assembly> templateAssemblies = new List <Assembly>(); Assembly assembly = null; if (!string.IsNullOrEmpty(_settings.TemplatesDirectory)) { _langCodeGenSettings.CodeGeneratorSettings.TemplateDirectory = _settings.TemplatesDirectory; } else if (!string.IsNullOrEmpty(_settings.TemplatesAssemblyName)) { templateAssemblies.Add(typeof(CSharpGeneratorSettings).GetTypeInfo().Assembly); templateAssemblies.Add(typeof(SwaggerToCSharpGeneratorSettings).GetTypeInfo().Assembly); try { assembly = typeof(ApiBaseClient).Assembly; // Assembly.Load(_settings.TemplatesAssemblyName); templateAssemblies.Add(assembly); } catch (Exception e) { } } var templateFactory = new Templates.TemplateFactory(_langCodeGenSettings.CodeGeneratorSettings, _settings.TemplatesAssemblyName, templateAssemblies); _langCodeGenSettings.CodeGeneratorSettings.TemplateFactory = templateFactory; } _langCodeGenSettings.OperationNameGenerator = new MultipleClientsFromPathSegmentsOperationNameGenerator(); _langCodeGenSettings.ClassName = "{controller}Client"; }
/// <summary>Initializes a new instance of the <see cref="OperationModelBase{TParameterModel, TResponseModel}"/> class.</summary> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="operation">The operation.</param> /// <param name="resolver">The resolver.</param> /// <param name="generator">The generator.</param> /// <param name="settings">The settings.</param> protected OperationModelBase(JsonSchema exceptionSchema, OpenApiOperation operation, TypeResolverBase resolver, IClientGenerator generator, ClientGeneratorBaseSettings settings) { _operation = operation; _resolver = resolver; _generator = generator; _settings = settings; var responses = _operation.ActualResponses .Select(response => CreateResponseModel(operation, response.Key, response.Value, exceptionSchema, generator, resolver, settings)) .ToList(); var defaultResponse = responses.SingleOrDefault(r => r.StatusCode == "default"); if (defaultResponse != null) { responses.Remove(defaultResponse); } Responses = responses; DefaultResponse = defaultResponse; }
/// <summary>Creates an operation model.</summary> /// <param name="operation"></param> /// <param name="settings">The settings.</param> /// <returns>The operation model.</returns> protected override TypeScriptOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings) { return(new TypeScriptOperationModel(operation, (SwaggerToTypeScriptClientGeneratorSettings)settings, this, Resolver)); }
/// <summary> /// 创建操作描述 /// 这里创建HttpApiOperation /// </summary> /// <param name="operation"></param> /// <param name="settings"></param> /// <returns></returns> protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) { return(new HttpApiMethod(operation, (CSharpGeneratorBaseSettings)settings, this, (CSharpTypeResolver)Resolver)); }
/// <summary>Creates the response model.</summary> /// <param name="operation">The operation.</param> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="resolver">The resolver.</param> /// <param name="settings">The settings.</param> /// <returns>The response model.</returns> protected abstract TResponseModel CreateResponseModel(OpenApiOperation operation, string statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings);
/// <summary>Creates the response model.</summary> /// <param name="operation">The operation.</param> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="resolver">The resolver.</param> /// <param name="settings">The settings.</param> /// <returns></returns> protected override TypeScriptResponseModel CreateResponseModel(SwaggerOperation operation, string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings) { return(new TypeScriptResponseModel(this, operation, statusCode, response, response == GetSuccessResponse().Value, exceptionSchema, generator, resolver, (SwaggerToTypeScriptClientGeneratorSettings)settings)); }
/// <summary>Creates the response model.</summary> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="settings">The settings.</param> /// <returns>The response model.</returns> protected abstract TResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings);
/// <summary>Creates the response model.</summary> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="settings">The settings.</param> /// <returns></returns> protected override TypeScriptResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings) { return(new TypeScriptResponseModel(statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, (TypeScriptGeneratorSettings)settings.CodeGeneratorSettings)); }
/// <summary>Creates the response model.</summary> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="resolver">The resolver.</param> /// <param name="settings">The settings.</param> /// <returns></returns> protected override CSharpResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings) { return(new CSharpResponseModel(this, statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, resolver, settings.CodeGeneratorSettings)); }
/// <summary>Creates an operation model.</summary> /// <param name="operation">The operation.</param> /// <param name="settings">The settings.</param> /// <returns>The operation model.</returns> protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) { return(new CSharpControllerOperationModel(operation, (CSharpControllerGeneratorSettings)settings, this, (CSharpTypeResolver)Resolver)); }
protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings) { var model = new DotvvmCSharpOperationModel(operation, Settings, this, resolver); HandleAsObjectParameters(operation, model, settings); model.AutoRefreshKey = string.Join("/", document.Operations.Single(o => o.Operation.OperationId == operation.OperationId).Operation.Tags); return(model); }
/// <summary>Creates an operation model.</summary> /// <param name="operation">The operation.</param> /// <param name="settings">The settings.</param> /// <returns>The operation model.</returns> protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings) { return(new CSharpOperationModel(operation, (SwaggerToCSharpGeneratorSettings)settings, this, (CSharpTypeResolver)Resolver)); }
private void HandleAsObjectParameters(SwaggerOperation operation, DotvvmCSharpOperationModel model, ClientGeneratorBaseSettings settings) { // find groups of parameters that should be treated as one var parameters = model.QueryParameters.Where(p => p.Name.Contains(".") && p.Schema.ExtensionData.ContainsKey("x-dotvvm-wrapperType")); var groups = parameters.GroupBy(p => p.Name.Substring(0, p.Name.IndexOf("."))).ToList(); foreach (var g in groups) { var typeName = g.First().Schema.ExtensionData["x-dotvvm-wrapperType"].ToString(); typeName = typeName.Substring(0, typeName.IndexOf(",")); var swaggerParameter = new SwaggerParameter() { Name = g.Key, Schema = new JsonSchema4(), Kind = SwaggerParameterKind.Query }; var newParameter = new DotvvmCSharpParameterModel(g.Key, g.Key, typeName, swaggerParameter, operation.Parameters, settings.CodeGeneratorSettings, this, model) { ExcludeFromQuery = true }; var targetIndex = g.Min(p => model.Parameters.IndexOf(p)); foreach (var p in g) { ((DotvvmCSharpParameterModel)p).CustomInitializer = $"var {p.VariableName} = {g.Key} != null ? {p.Name} : default({p.Type});"; } model.Parameters.Insert(targetIndex, newParameter); } }
protected override CSharpOperationModel CreateOperationModel(SwaggerOperation operation, ClientGeneratorBaseSettings settings) { var model = new DotvvmCSharpOperationModel(operation, Settings, this, resolver); HandleAsObjectParameters(operation, model, settings); return(model); }
/// <summary>Creates the response model.</summary> /// <param name="operation">The operation.</param> /// <param name="statusCode">The status code.</param> /// <param name="response">The response.</param> /// <param name="exceptionSchema">The exception schema.</param> /// <param name="generator">The generator.</param> /// <param name="resolver">The resolver.</param> /// <param name="settings">The settings.</param> /// <returns></returns> protected override CSharpResponseModel CreateResponseModel(OpenApiOperation operation, string statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings) { return(new CSharpResponseModel(this, operation, statusCode, response, response == GetSuccessResponse().Value, exceptionSchema, generator, resolver, settings.CodeGeneratorSettings)); }
/// <summary> /// Specifies operation-specific settings for generating client code. /// </summary> /// <param name="settings">The NSwag settings to use</param> /// <returns>Updated settings object</returns> public GeneratorSettings WithSettings(ClientGeneratorBaseSettings settings) { ClientSettings = settings; return(this); }