Skip to content

Commit

Permalink
Add : Set NamingStrategy Type (#613)
Browse files Browse the repository at this point in the history
* Feat : NamingStrategy 인터페이스 작성

* Feat : NamingStrategy 인스턴스 생성

* FEAT: Case 1 ~ 3 except for Enum option

* FEAT: NamingStrategy get method

* FEAT: get api namingstrategy in startup

* FEAT: NamingStrategy in Worker Extensions

* FEAT: Enum Case added

* Refactor : Get 메소드 수정

* feat: create enum type for naming strategy

* feat: add requirements 1~4 for new naming strategy

* feat: add NamingStrategy new instance by case

* feat: add OpenApiNamingStrategy setting

* refactor: rename methods

* refactor: add comments to resolve warning messages

* FEAT: Override Resolve function(NamingStrategy)

* FEAT: Apply FactoryMethod in NamingStrategy

* FEAT: Test case for Resolver(Naming Strategy)

* CHORE: override to overload(Resolve method)

* Refactor : 코드 병합

* Test : OpenApiHttpTriggerContextTests 수정

* Test : UnvalidType Test 추가

* test: add OpenApiConfigurationOptionsTests

* test: add DefaultOpenApiConfigurationOptionsTests

* refactor: Rename NamingStrategyType to OpenApiNamingStrategy

* Refactor : 오류제거

* Add : missing tests

* Fix : test typo

---------

Co-authored-by: songseungwoon <andrew960811@naver.com>
Co-authored-by: hhiyeon <hhyyeon0214@gmail.com>
Co-authored-by: SeungWoonSong <susong@student.42seoul.kr>
  • Loading branch information
4 people committed Sep 19, 2023
1 parent 3df8ef9 commit 726d2f1
Show file tree
Hide file tree
Showing 14 changed files with 698 additions and 447 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public static void Main()
},
Servers = DefaultOpenApiConfigurationOptions.GetHostNames(),
OpenApiVersion = DefaultOpenApiConfigurationOptions.GetOpenApiVersion(),
OpenApiNamingStrategy = DefaultOpenApiConfigurationOptions.GetOpenApiNamingStrategy(),
ExcludeRequestingHost = DefaultOpenApiConfigurationOptions.IsRequestingHostExcluded(),
ForceHttps = DefaultOpenApiConfigurationOptions.IsHttpsForced(),
ForceHttp = DefaultOpenApiConfigurationOptions.IsHttpForced(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public override void Configure(IFunctionsHostBuilder builder)
},
Servers = DefaultOpenApiConfigurationOptions.GetHostNames(),
OpenApiVersion = DefaultOpenApiConfigurationOptions.GetOpenApiVersion(),
OpenApiNamingStrategy = DefaultOpenApiConfigurationOptions.GetOpenApiNamingStrategy(),
ExcludeRequestingHost = DefaultOpenApiConfigurationOptions.IsRequestingHostExcluded(),
ForceHttps = DefaultOpenApiConfigurationOptions.IsHttpsForced(),
ForceHttp = DefaultOpenApiConfigurationOptions.IsHttpForced(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,12 @@ public virtual IOpenApiHttpTriggerAuthorization OpenApiHttpTriggerAuthorization
public virtual ISwaggerUI SwaggerUI { get; }

/// <inheritdoc />
public virtual NamingStrategy NamingStrategy { get; } = new CamelCaseNamingStrategy();

public virtual NamingStrategy NamingStrategy {
get
{
return OpenApiConfigurationResolver.Resolve(this._configOptions.OpenApiNamingStrategy);
}
}
/// <inheritdoc />
public virtual bool IsDevelopment { get; } = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") == "Development";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,10 @@ public interface IOpenApiConfigurationOptions
/// Gets or sets the <see cref="IOpenApiHttpTriggerAuthorization"/> instance for Swagger endpoints.
/// </summary>
IOpenApiHttpTriggerAuthorization Security { get; set; }

/// <summary>
/// Gets or sets the value indicating OpenApiNamingStrategy.
/// </summary>
OpenApiNamingStrategy OpenApiNamingStrategy { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class DefaultOpenApiConfigurationOptions : OpenApiConfigurationOptions
private const string OpenApiDocDescriptionKey = "OpenApi__DocDescription";
private const string OpenApiHostNamesKey = "OpenApi__HostNames";
private const string OpenApiVersionKey = "OpenApi__Version";
private const string OpenApiNamingStrategyKey = "OpenApi__NamingStrategy";
private const string FunctionsRuntimeEnvironmentKey = "AZURE_FUNCTIONS_ENVIRONMENT";
private const string ExcludeRequestingHostKey = "OpenApi__ExcludeRequestingHost";
private const string ForceHttpKey = "OpenApi__ForceHttp";
Expand Down Expand Up @@ -59,6 +60,9 @@ public class DefaultOpenApiConfigurationOptions : OpenApiConfigurationOptions
/// <inheritdoc />
public override IOpenApiHttpTriggerAuthorization Security { get; set; } = new DefaultOpenApiHttpTriggerAuthorization();

/// <inheritdoc />
public override OpenApiNamingStrategy OpenApiNamingStrategy { get; set; } = GetOpenApiNamingStrategy();

/// <summary>
/// Gets the OpenAPI document version.
/// </summary>
Expand Down Expand Up @@ -128,6 +132,20 @@ public static OpenApiVersionType GetOpenApiVersion()
return version;
}

/// <summary>
/// Gets the OpenAPI NamingStrategy.
/// </summary>
/// <returns>Returns the OpenAPI NamingStrategy.</returns>
public static OpenApiNamingStrategy GetOpenApiNamingStrategy()
{
var strategy = Enum.TryParse<OpenApiNamingStrategy>(
Environment.GetEnvironmentVariable(OpenApiNamingStrategyKey), ignoreCase: true, out var result)
? result
: DefaultOpenApiNamingStrategy();

return strategy;
}

/// <summary>
/// Checks whether to exclude the requesting host as the server URL or not.
/// </summary>
Expand Down Expand Up @@ -177,6 +195,11 @@ private static string DefaultOpenApiDocVersion()
return "1.0.0";
}

private static OpenApiNamingStrategy DefaultOpenApiNamingStrategy()
{
return OpenApiNamingStrategy.CamelCase;
}

private static string DefaultOpenApiDocTitle()
{
return "OpenAPI Document on Azure Functions";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ public class OpenApiConfigurationOptions : IOpenApiConfigurationOptions
/// <inheritdoc />
public virtual OpenApiVersionType OpenApiVersion { get; set; }

/// <inheritdoc />
public virtual OpenApiNamingStrategy OpenApiNamingStrategy { get; set; }

/// <inheritdoc />
public virtual bool ExcludeRequestingHost { get; set; }

Expand All @@ -38,5 +41,6 @@ public class OpenApiConfigurationOptions : IOpenApiConfigurationOptions
public virtual bool UseFullName {get; set;}
/// <inheritdoc />
public virtual IOpenApiHttpTriggerAuthorization Security { get; set; } = new OpenApiHttpTriggerAuthorization();

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Enums
{
/// <summary>
/// This specifies the naming strategy for OpenAPI.
/// </summary>
public enum OpenApiNamingStrategy
{
/// <summary>
/// Identifies the default naming strategy.
/// </summary>
CamelCase = 0,

/// <summary>
/// Identifies the PascalCase naming strategy.
/// </summary>
PascalCase = 1,

/// <summary>
/// Identifies the snake_case naming strategy.
/// </summary>
SnakeCase = 2,

/// <summary>
/// Identifies the kebab-case naming strategy.
/// </summary>
KebabCase = 3
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Abstractions;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Attributes;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Configurations;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Enums;
using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Extensions;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json.Serialization;

namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Resolvers
{
Expand Down Expand Up @@ -36,5 +38,27 @@ public static IOpenApiConfigurationOptions Resolve(Assembly assembly)

return options as IOpenApiConfigurationOptions;
}

/// <summary>
/// Gets the <see cref="IOpenApiConfigurationOptions"/> instance from the given strategyType.
/// </summary>
/// <param name="strategyType">The naming strategy type.</param>
/// <returns>Returns the NamingStrategy instance resolved.(Override)</returns>
public static NamingStrategy Resolve(OpenApiNamingStrategy strategyType)
{
switch (strategyType)
{
case OpenApiNamingStrategy.CamelCase:
return new CamelCaseNamingStrategy();
case OpenApiNamingStrategy.PascalCase:
return new DefaultNamingStrategy();
case OpenApiNamingStrategy.SnakeCase:
return new SnakeCaseNamingStrategy();
case OpenApiNamingStrategy.KebabCase:
return new KebabCaseNamingStrategy();
default:
return new CamelCaseNamingStrategy();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,12 @@ public virtual IOpenApiCustomUIOptions OpenApiCustomUIOptions
public virtual ISwaggerUI SwaggerUI { get; }

/// <inheritdoc />
public virtual NamingStrategy NamingStrategy { get; } = new CamelCaseNamingStrategy();

public virtual NamingStrategy NamingStrategy {
get
{
return OpenApiConfigurationResolver.Resolve(this._configOptions.OpenApiNamingStrategy);
}
}
/// <inheritdoc />
public virtual bool IsDevelopment { get; } = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT") == "Development";

Expand Down
Loading

0 comments on commit 726d2f1

Please sign in to comment.