Skip to content

Commit 7bd2677

Browse files
committed
New OpenAPI Support. Closes GH-639. Closes GH-642. Closes GH-665
1 parent 198bb70 commit 7bd2677

File tree

57 files changed

+1227
-140
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1227
-140
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System.Diagnostics;
2+
using Microsoft.AspNetCore.Mvc.ApiExplorer;
3+
using Swashbuckle.AspNetCore.Swagger;
4+
using Wolverine.Http;
5+
6+
namespace OpenApiDemonstrator;
7+
8+
public static class Endpoints
9+
{
10+
[WolverineGet("/json")]
11+
public static ResponseModel GetReservation()
12+
{
13+
return new ResponseModel();
14+
}
15+
16+
[WolverinePost("/message"), EmptyResponse]
17+
public static Message1 PostMessage()
18+
{
19+
return new Message1();
20+
}
21+
22+
}
23+
24+
public class BuildSwagger : IHostedService
25+
{
26+
private readonly ISwaggerProvider _provider;
27+
28+
public BuildSwagger(ISwaggerProvider provider)
29+
{
30+
_provider = provider;
31+
}
32+
33+
public Task StartAsync(CancellationToken cancellationToken)
34+
{
35+
//var document = _provider.GetSwagger("v1");
36+
37+
//Debug.WriteLine(document);
38+
39+
return Task.CompletedTask;
40+
}
41+
42+
public Task StopAsync(CancellationToken cancellationToken)
43+
{
44+
return Task.CompletedTask;
45+
}
46+
}
47+
48+
public class Message1{}
49+
50+
public class ResponseModel
51+
{
52+
public string Name { get; set; }
53+
public int Age { get; set; }
54+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<!-- Leave this alone -->
5+
<TargetFrameworks>net8.0</TargetFrameworks>
6+
<Nullable>enable</Nullable>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="FluentValidation" Version="11.3.0" />
12+
<PackageReference Include="Lamar.Diagnostics" Version="11.1.2" />
13+
<PackageReference Include="Marten.AspNetCore" Version="6.1.0" />
14+
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.2" />
15+
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
16+
17+
<PackageReference Include="Shouldly" Version="4.1.0" />
18+
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
19+
</ItemGroup>
20+
21+
<ItemGroup>
22+
<ProjectReference Include="..\..\Persistence\Wolverine.EntityFrameworkCore\Wolverine.EntityFrameworkCore.csproj" />
23+
<ProjectReference Include="..\..\Persistence\Wolverine.Marten\Wolverine.Marten.csproj" />
24+
<ProjectReference Include="..\Wolverine.AdminApi\Wolverine.AdminApi.csproj" />
25+
<ProjectReference Include="..\Wolverine.Http.FluentValidation\Wolverine.Http.FluentValidation.csproj" />
26+
<ProjectReference Include="..\Wolverine.Http.Marten\Wolverine.Http.Marten.csproj" />
27+
<ProjectReference Include="..\Wolverine.Http.Tests.DifferentAssembly\Wolverine.Http.Tests.DifferentAssembly.csproj" />
28+
<ProjectReference Include="..\Wolverine.Http\Wolverine.Http.csproj" />
29+
</ItemGroup>
30+
31+
<ItemGroup Condition="'$(targetframework)' == 'net7.0'">
32+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="[7.0.1, 8.0.0)" />
33+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="[7.0.1, 8.0.0)" />
34+
</ItemGroup>
35+
36+
<ItemGroup Condition="'$(targetframework)' == 'net8.0'">
37+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
38+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
39+
</ItemGroup>
40+
41+
<ItemGroup>
42+
<Compile Include="..\..\Servers.cs">
43+
<Link>Servers.cs</Link>
44+
</Compile>
45+
</ItemGroup>
46+
</Project>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using IntegrationTests;
2+
using Marten;
3+
using Oakton;
4+
using OpenApiDemonstrator;
5+
using Wolverine;
6+
using Wolverine.Http;
7+
using Wolverine.Marten;
8+
9+
var builder = WebApplication.CreateBuilder(args);
10+
11+
// Add services to the container.
12+
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
13+
builder.Services.AddEndpointsApiExplorer();
14+
builder.Services.AddSwaggerGen();
15+
16+
builder.Services.AddMarten(Servers.PostgresConnectionString)
17+
.IntegrateWithWolverine();
18+
19+
builder.Host.UseWolverine();
20+
21+
builder.Services.AddHostedService<BuildSwagger>();
22+
23+
var app = builder.Build();
24+
25+
// Configure the HTTP request pipeline.
26+
if (app.Environment.IsDevelopment())
27+
{
28+
app.UseSwagger();
29+
app.UseSwaggerUI();
30+
}
31+
32+
app.MapWolverineEndpoints();
33+
34+
await app.RunOaktonCommands(args);
35+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"$schema": "http://json.schemastore.org/launchsettings.json",
3+
"iisSettings": {
4+
"windowsAuthentication": false,
5+
"anonymousAuthentication": true,
6+
"iisExpress": {
7+
"applicationUrl": "http://localhost:28710",
8+
"sslPort": 44358
9+
}
10+
},
11+
"profiles": {
12+
"http": {
13+
"commandName": "Project",
14+
"dotnetRunMessages": true,
15+
"launchBrowser": true,
16+
"launchUrl": "swagger",
17+
"applicationUrl": "http://localhost:5136",
18+
"environmentVariables": {
19+
"ASPNETCORE_ENVIRONMENT": "Development"
20+
}
21+
},
22+
"https": {
23+
"commandName": "Project",
24+
"dotnetRunMessages": true,
25+
"launchBrowser": true,
26+
"launchUrl": "swagger",
27+
"applicationUrl": "https://localhost:7160;http://localhost:5136",
28+
"environmentVariables": {
29+
"ASPNETCORE_ENVIRONMENT": "Development"
30+
}
31+
},
32+
"IIS Express": {
33+
"commandName": "IISExpress",
34+
"launchBrowser": true,
35+
"launchUrl": "swagger",
36+
"environmentVariables": {
37+
"ASPNETCORE_ENVIRONMENT": "Development"
38+
}
39+
}
40+
}
41+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning"
6+
}
7+
}
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning"
6+
}
7+
},
8+
"AllowedHosts": "*"
9+
}

src/Http/Wolverine.Http.Tests/Bugs/Bug_463_codegen_with_IQuerySession.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ public async Task can_compile_without_issue()
1818
builder.Services.AddMarten(Servers.PostgresConnectionString)
1919
.IntegrateWithWolverine();
2020

21-
builder.Host.UseWolverine();
21+
builder.Host.UseWolverine(opts =>
22+
{
23+
opts.Discovery.IncludeAssembly(GetType().Assembly);
24+
});
2225

2326
await using var host = await AlbaHost.For(builder, app =>
2427
{

src/Http/Wolverine.Http.Tests/Bugs/Bug_505_required_attribute_not_working.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Immutable;
12
using System.ComponentModel.DataAnnotations;
23
using System.Security.Claims;
34
using Alba;
@@ -9,6 +10,7 @@
910
using Microsoft.Extensions.DependencyInjection;
1011
using Microsoft.Extensions.Hosting;
1112
using NSubstitute;
13+
using WolverineWebApi;
1214

1315
namespace Wolverine.Http.Tests.Bugs;
1416

@@ -20,9 +22,16 @@ public async Task try_endpoint_hit()
2022
var breeder = new Breeder();
2123
var id = Guid.NewGuid();
2224
AggregateRepository.Breeders[id] = breeder;
23-
25+
2426
var builder = WebApplication.CreateBuilder();
25-
builder.Host.UseWolverine();
27+
28+
builder.Host.UseWolverine(opts =>
29+
{
30+
opts.Discovery.DisableConventionalDiscovery();
31+
opts.Discovery.IgnoreAssembly(typeof(OpenApiEndpoints).Assembly);
32+
opts.Discovery.IncludeAssembly(GetType().Assembly);
33+
});
34+
2635
builder.Services.AddSingleton<AggregateRepository>();
2736

2837

src/Http/Wolverine.Http.Tests/Bugs/Bug_563_too_many_contexts.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.AspNetCore.Builder;
33
using Microsoft.AspNetCore.Http;
44
using Microsoft.Extensions.DependencyInjection;
5+
using WolverineWebApi;
56

67
namespace Wolverine.Http.Tests.Bugs;
78

@@ -13,7 +14,10 @@ public async Task use_them_all()
1314
var builder = WebApplication.CreateBuilder(Array.Empty<string>());
1415
builder.Services.AddScoped<MyService1>();
1516
builder.Services.AddScoped<MyService2>();
16-
builder.Host.UseWolverine();
17+
builder.Host.UseWolverine(opts =>
18+
{
19+
opts.Discovery.DisableConventionalDiscovery();
20+
});
1721

1822
await using var host = await AlbaHost.For(builder, app =>
1923
{

src/Http/Wolverine.Http.Tests/Bugs/Bug_568_do_not_freak_out_over_Refit.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ public async Task compile_darnit()
2424

2525
builder.Services.AddRefitClient<ITestHttpClient>();
2626

27-
builder.Host.UseWolverine();
27+
builder.Host.UseWolverine(opts =>
28+
{
29+
opts.Discovery.IncludeAssembly(GetType().Assembly);
30+
});
2831

2932
await using var host = await AlbaHost.For(builder, app =>
3033
{

0 commit comments

Comments
 (0)