From bd401b3c936346ad9b5a0e9c2bc37cd790305912 Mon Sep 17 00:00:00 2001 From: Esteban Solano Granados Date: Mon, 13 Jun 2022 18:07:27 +0000 Subject: [PATCH] API enhancements Signed-off-by: GitHub --- react-aspnet-mongodb/backend/Program.cs | 46 ++++++++++++------- react-aspnet-mongodb/backend/aspnetapp.csproj | 1 + react-aspnet-mongodb/frontend/nginx.conf | 1 - 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/react-aspnet-mongodb/backend/Program.cs b/react-aspnet-mongodb/backend/Program.cs index 2c744cc..1d7a515 100644 --- a/react-aspnet-mongodb/backend/Program.cs +++ b/react-aspnet-mongodb/backend/Program.cs @@ -5,9 +5,14 @@ using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Driver; using Models; +using Swashbuckle.AspNetCore.SwaggerGen; var builder = WebApplication.CreateBuilder(args); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + string connectionString = builder.Configuration.GetConnectionString("DocumentDbConnection"); string databaseName = builder.Configuration["DocumentDbName"] ?? "BackendMongoDb"; string collectionName = builder.Configuration["DocumentCollectionName"] ?? "ToDos"; @@ -16,12 +21,18 @@ builder.Services.AddTransient((_provider) => new MongoClient(connec var app = builder.Build(); -app.MapGet("/api/todos", async (MongoClient connection) => { +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.MapGet("/api/todos", async (MongoClient connection) => +{ try { - var client = new MongoClient(connectionString); - var database = client.GetDatabase(databaseName); - + var database = connection.GetDatabase(databaseName); var collection = database.GetCollection(collectionName); var results = await collection.Find(_ => true).ToListAsync().ConfigureAwait(false); @@ -33,19 +44,21 @@ app.MapGet("/api/todos", async (MongoClient connection) => { } }); - -app.MapGet("/api/todos/{id}", async (string id, MongoClient connection) => { +app.MapGet("/api/todos/{id}", async (string id, MongoClient connection) => +{ try { - var client = new MongoClient(connectionString); - var database = client.GetDatabase(databaseName); - + var database = connection.GetDatabase(databaseName); var collection = database.GetCollection(collectionName); - var result = await collection.FindAsync(record => record.Id == id).ConfigureAwait(false); - return result is ToDo todo - ? Results.Ok(todo) - : Results.NotFound(); + var result = await collection.FindAsync(record => record.Id == id).ConfigureAwait(false) as ToDo; + + if (result is null) + { + return Results.NotFound(); + } + + return Results.Created($"/todoitems/{result.Id}", result); } catch (Exception ex) { @@ -53,12 +66,11 @@ app.MapGet("/api/todos/{id}", async (string id, MongoClient connection) => { } }); -app.MapPost("/api/todos", async (ToDo record, MongoClient connection) => { +app.MapPost("/api/todos", async (ToDo record, MongoClient connection) => +{ try { - var client = new MongoClient(connectionString); - var database = client.GetDatabase(databaseName); - + var database = connection.GetDatabase(databaseName); var collection = database.GetCollection(collectionName); await collection.InsertOneAsync(record).ConfigureAwait(false); diff --git a/react-aspnet-mongodb/backend/aspnetapp.csproj b/react-aspnet-mongodb/backend/aspnetapp.csproj index bc94d7c..f1cbce8 100644 --- a/react-aspnet-mongodb/backend/aspnetapp.csproj +++ b/react-aspnet-mongodb/backend/aspnetapp.csproj @@ -6,5 +6,6 @@ + diff --git a/react-aspnet-mongodb/frontend/nginx.conf b/react-aspnet-mongodb/frontend/nginx.conf index b23e8a4..d406467 100755 --- a/react-aspnet-mongodb/frontend/nginx.conf +++ b/react-aspnet-mongodb/frontend/nginx.conf @@ -12,7 +12,6 @@ server { add_header X-Permitted-Cross-Domain-Policies master-only; add_header Referrer-Policy same-origin; add_header Expect-CT 'max-age=60'; - add_header Feature-Policy "accelerometer none; ambient-light-sensor none; battery none; camera none; gyroscope none;"; location / { root /usr/share/nginx/html;