diff --git a/templates/gateway-managed/.template.config/template.json b/templates/gateway-managed/.template.config/template.json new file mode 100644 index 00000000000..6fe2bbf7402 --- /dev/null +++ b/templates/gateway-managed/.template.config/template.json @@ -0,0 +1,52 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Michael Staib", + "classifications": ["Web", "GraphQL"], + "identity": "HotChocolate.Template.ManagedGateway", + "sourceName": "HotChocolate.Template.Gateway", + "name": "GraphQL Managed Gateway", + "shortName": "graphql-managed-gateway", + "defaultName": "GraphQL Gateway", + "description": "", + "preferNameDirectory": true, + "tags": { + "language": "C#", + "type": "project" + }, + "symbols": { + "Framework": { + "type": "parameter", + "description": "The target framework for the project.", + "datatype": "choice", + "choices": [ + { + "choice": "net8.0", + "description": "Target .NET 8" + }, + { + "choice": "net9.0", + "description": "Target .NET 9" + }, + { + "choice": "net10.0", + "description": "Target .NET 10" + } + ], + "replaces": "net8.0", + "defaultValue": "net8.0" + } + }, + "postActions": [ + { + "condition": "(!skipRestore)", + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] +} diff --git a/templates/gateway-managed/HotChocolate.Template.Gateway.csproj b/templates/gateway-managed/HotChocolate.Template.Gateway.csproj new file mode 100644 index 00000000000..0d6609a4a80 --- /dev/null +++ b/templates/gateway-managed/HotChocolate.Template.Gateway.csproj @@ -0,0 +1,21 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + + + + + diff --git a/templates/gateway-managed/Program.cs b/templates/gateway-managed/Program.cs new file mode 100644 index 00000000000..ae5e1af7d5d --- /dev/null +++ b/templates/gateway-managed/Program.cs @@ -0,0 +1,50 @@ +var builder = WebApplication.CreateBuilder(args); + +builder.Services + .AddHeaderPropagation(c => + { + c.Headers.Add("GraphQL-Preflight"); + c.Headers.Add("Authorization"); + }); + +builder.Services + .AddHttpClient("fusion") + .AddHeaderPropagation(); + +builder.Services + .AddGraphQLGatewayServer() + .ConfigureFromCloud(options => + { + options.ApiId = "YOUR_API_ID"; + options.Stage = "prod"; + options.ApiKey = "YOUR_API_KEY"; + }) + // TODO: This needs to go + .CoreBuilder.AddInstrumentation(); + +builder.Services.AddNitroTelemetry(options => +{ + options.ApiId = "YOUR_API_ID"; + options.Stage = "prod"; + options.ApiKey = "YOUR_API_KEY"; +}); + +builder.Services + .AddOpenTelemetry() + .WithTracing(builder => + { + builder.AddHttpClientInstrumentation(); + builder.AddAspNetCoreInstrumentation(); + builder.AddNitroExporter(); + }) + .WithLogging(builder => + { + builder.AddNitroExporter(); + }); + +var app = builder.Build(); + +app.UseHeaderPropagation(); +app.MapGraphQL(); + +app.Run(); diff --git a/templates/gateway-managed/Properties/launchSettings.json b/templates/gateway-managed/Properties/launchSettings.json new file mode 100644 index 00000000000..048a6842cb4 --- /dev/null +++ b/templates/gateway-managed/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "http://localhost:5098/graphql", + "applicationUrl": "http://localhost:5098", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/templates/gateway-managed/appsettings.Development.json b/templates/gateway-managed/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/templates/gateway-managed/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/templates/gateway-managed/appsettings.json b/templates/gateway-managed/appsettings.json new file mode 100644 index 00000000000..10f68b8c8b4 --- /dev/null +++ b/templates/gateway-managed/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/templates/server-managed/.template.config/template.json b/templates/server-managed/.template.config/template.json new file mode 100644 index 00000000000..115ffb3550e --- /dev/null +++ b/templates/server-managed/.template.config/template.json @@ -0,0 +1,52 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Michael Staib", + "classifications": ["Web", "GraphQL"], + "identity": "HotChocolate.Template.ManagedServer", + "sourceName": "HotChocolate.Template.Server", + "name": "GraphQL Managed Server", + "shortName": "graphql-managed", + "defaultName": "GraphQL", + "description": "", + "preferNameDirectory": true, + "tags": { + "language": "C#", + "type": "project" + }, + "symbols": { + "Framework": { + "type": "parameter", + "description": "The target framework for the project.", + "datatype": "choice", + "choices": [ + { + "choice": "net8.0", + "description": "Target .NET 8" + }, + { + "choice": "net9.0", + "description": "Target .NET 9" + }, + { + "choice": "net10.0", + "description": "Target .NET 10" + } + ], + "replaces": "net8.0", + "defaultValue": "net8.0" + } + }, + "postActions": [ + { + "condition": "(!skipRestore)", + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] +} diff --git a/templates/server-managed/HotChocolate.Template.Server.csproj b/templates/server-managed/HotChocolate.Template.Server.csproj new file mode 100644 index 00000000000..a7d8baff835 --- /dev/null +++ b/templates/server-managed/HotChocolate.Template.Server.csproj @@ -0,0 +1,26 @@ + + + + net8.0 + enable + enable + preview + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + diff --git a/templates/server-managed/Program.cs b/templates/server-managed/Program.cs new file mode 100644 index 00000000000..9d5f9c790a5 --- /dev/null +++ b/templates/server-managed/Program.cs @@ -0,0 +1,37 @@ +var builder = WebApplication.CreateBuilder(args); + +builder.AddGraphQL() + .AddTypes() + .AddInstrumentation() + .AddNitro(options => + { + options.ApiId = "YOUR_API_ID"; + options.Stage = "prod"; + options.ApiKey = "YOUR_API_KEY"; + }); + +builder.Services + .AddNitroTelemetry(options => + { + options.ApiId = "YOUR_API_ID"; + options.Stage = "prod"; + options.ApiKey = "YOUR_API_KEY"; + }); + +builder.Services + .AddOpenTelemetry() + .WithTracing(builder => + { + builder.AddAspNetCoreInstrumentation(); + builder.AddNitroExporter(); + }) + .WithLogging(builder => + { + builder.AddNitroExporter(); + }); + +var app = builder.Build(); + +app.MapGraphQL(); + +app.RunWithGraphQLCommands(args); diff --git a/templates/server-managed/Properties/ModuleInfo.cs b/templates/server-managed/Properties/ModuleInfo.cs new file mode 100644 index 00000000000..077f90a3f14 --- /dev/null +++ b/templates/server-managed/Properties/ModuleInfo.cs @@ -0,0 +1 @@ +[assembly: Module("Types")] diff --git a/templates/server-managed/Properties/launchSettings.json b/templates/server-managed/Properties/launchSettings.json new file mode 100644 index 00000000000..46555420fdd --- /dev/null +++ b/templates/server-managed/Properties/launchSettings.json @@ -0,0 +1,14 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "http://localhost:5095/graphql", + "applicationUrl": "http://localhost:5095", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/templates/server-managed/Types/Author.cs b/templates/server-managed/Types/Author.cs new file mode 100644 index 00000000000..b1382f8ea8d --- /dev/null +++ b/templates/server-managed/Types/Author.cs @@ -0,0 +1,3 @@ +namespace HotChocolate.Template.Server.Types; + +public record Author(string Name); diff --git a/templates/server-managed/Types/Book.cs b/templates/server-managed/Types/Book.cs new file mode 100644 index 00000000000..3fe1607cdb7 --- /dev/null +++ b/templates/server-managed/Types/Book.cs @@ -0,0 +1,3 @@ +namespace HotChocolate.Template.Server.Types; + +public record Book(string Title, Author Author); diff --git a/templates/server-managed/Types/Query.cs b/templates/server-managed/Types/Query.cs new file mode 100644 index 00000000000..845c1721368 --- /dev/null +++ b/templates/server-managed/Types/Query.cs @@ -0,0 +1,8 @@ +namespace HotChocolate.Template.Server.Types; + +[QueryType] +public static class Query +{ + public static Book GetBook() + => new Book("C# in depth.", new Author("Jon Skeet")); +} diff --git a/templates/server-managed/appsettings.Development.json b/templates/server-managed/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/templates/server-managed/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/templates/server-managed/appsettings.json b/templates/server-managed/appsettings.json new file mode 100644 index 00000000000..10f68b8c8b4 --- /dev/null +++ b/templates/server-managed/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +}