diff --git a/exercise.sln b/exercise.sln new file mode 100644 index 0000000..aa29b35 --- /dev/null +++ b/exercise.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "exercise.wwwapi", "exercise.wwwapi\exercise.wwwapi.csproj", "{179BF0E1-48F6-433A-88CB-0B42A9CB3F7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {179BF0E1-48F6-433A-88CB-0B42A9CB3F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {179BF0E1-48F6-433A-88CB-0B42A9CB3F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {179BF0E1-48F6-433A-88CB-0B42A9CB3F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {179BF0E1-48F6-433A-88CB-0B42A9CB3F7E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/exercise.wwwapi/.gitignore b/exercise.wwwapi/.gitignore new file mode 100644 index 0000000..d7be6ac --- /dev/null +++ b/exercise.wwwapi/.gitignore @@ -0,0 +1 @@ +appsettings.json \ No newline at end of file diff --git a/exercise.wwwapi/DataContext/TodoContext.cs b/exercise.wwwapi/DataContext/TodoContext.cs new file mode 100644 index 0000000..5435059 --- /dev/null +++ b/exercise.wwwapi/DataContext/TodoContext.cs @@ -0,0 +1,33 @@ +using exercise.wwwapi.Models; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json.Linq; + +namespace exercise.wwwapi.DataContext +{ + public class TodoContext : DbContext + { + private static string GetConnectionString() + { + string jsonSettings = File.ReadAllText("appsettings.json"); + JObject configuration = JObject.Parse(jsonSettings); + return configuration["ConnectionStrings"]["DefaultConnection"].ToString(); + } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseNpgsql(GetConnectionString()); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity().HasData( + new Todo { Id = 1, Title = "First task", Completed = true }, + new Todo { Id = 2, Title = "Second task", Completed = false }, + new Todo { Id = 3, Title = "Third task", Completed = true } + ); + } + + public DbSet Todos { get; set; } + } +} \ No newline at end of file diff --git a/exercise.wwwapi/Endpoints/TodoAPI.cs b/exercise.wwwapi/Endpoints/TodoAPI.cs new file mode 100644 index 0000000..f8141ff --- /dev/null +++ b/exercise.wwwapi/Endpoints/TodoAPI.cs @@ -0,0 +1,109 @@ +using exercise.wwwapi.Models; +using exercise.wwwapi.Repository; + +namespace exercise.wwwapi.EndPoints +{ + public static class TodoAPI + { + public static void ConfigureTodoAPI(this WebApplication app) + { + app.MapGet("/", GetIndex); + app.MapGet("/todos", GetTodos); + app.MapPost("/todos", CreateTodo); + app.MapPut("/todos/{id:int}", UpdateTodo); + app.MapDelete("/todos/{id:int}", DeleteTodo); + } + + private static async Task GetIndex(IDatabaseRepository repository) + { + try + { + return Results.Ok("Working"); + } + catch (Exception ex) + { + return Results.Problem(ex.Message); + } + } + + private static async Task GetTodos(IDatabaseRepository repository) + { + try + { + return Results.Ok(repository.GetAll()); + } + catch (Exception ex) + { + return Results.Problem(ex.Message); + } + } + + private static async Task CreateTodo(Todo todo, IDatabaseRepository repository) + { + try + { + if (todo == null || string.IsNullOrWhiteSpace(todo.Title)) + { + return Results.BadRequest("Invalid Todo item."); + } + + repository.Insert(todo); // Assuming repository has an AddAsync method + return Results.Created($"/todos/{todo.Id}", todo); // Return the created todo with its location + } + catch (Exception ex) + { + return Results.Problem(ex.Message); + } + } + + private static async Task UpdateTodo(int id, Todo updatedTodo, IDatabaseRepository repository) + { + try + { + // Find the existing Todo + var existingTodo = repository.GetById(id); + if (existingTodo == null) + { + return Results.NotFound($"Todo with Id {id} not found."); + } + + // Update the fields + if (updatedTodo.Title != null) + existingTodo.Title = updatedTodo.Title; + if (updatedTodo.Completed != null) + existingTodo.Completed = updatedTodo.Completed; + + // Save changes + repository.Update(existingTodo); + + return Results.Ok(existingTodo); + } + catch (Exception ex) + { + return Results.Problem(ex.Message); + } + } + + private static async Task DeleteTodo(int id, IDatabaseRepository repository) + { + try + { + // Find the Todo by Id + var existingTodo = repository.GetById(id); + if (existingTodo == null) + { + return Results.NotFound($"Todo with Id {id} not found."); + } + + // Delete the Todo + repository.Delete(id); + + return Results.Ok(existingTodo); + } + catch (Exception ex) + { + return Results.Problem(ex.Message); + } + } + } +} \ No newline at end of file diff --git a/exercise.wwwapi/GUIDE.md b/exercise.wwwapi/GUIDE.md new file mode 100644 index 0000000..8178488 --- /dev/null +++ b/exercise.wwwapi/GUIDE.md @@ -0,0 +1,2 @@ +# Created a RDS database (PostgreSQL) for the application, and making sure the connection was successful. Adding the connection to my application, and then migrating to make sure the database is populated correctly. +# Created and configured a Elastic Beanstalk environment to deploy the backend API. \ No newline at end of file diff --git a/exercise.wwwapi/Migrations/20241008184527_InitialCreate.Designer.cs b/exercise.wwwapi/Migrations/20241008184527_InitialCreate.Designer.cs new file mode 100644 index 0000000..cc3bcca --- /dev/null +++ b/exercise.wwwapi/Migrations/20241008184527_InitialCreate.Designer.cs @@ -0,0 +1,49 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using exercise.wwwapi.DataContext; + +#nullable disable + +namespace exercise.wwwapi.Migrations +{ + [DbContext(typeof(TodoContext))] + [Migration("20241008184527_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("exercise.wwwapi.Models.Todo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Completed") + .HasColumnType("boolean"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Todos"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/exercise.wwwapi/Migrations/20241008184527_InitialCreate.cs b/exercise.wwwapi/Migrations/20241008184527_InitialCreate.cs new file mode 100644 index 0000000..bb2c2be --- /dev/null +++ b/exercise.wwwapi/Migrations/20241008184527_InitialCreate.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace exercise.wwwapi.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Todos", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Title = table.Column(type: "text", nullable: false), + Completed = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Todos", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Todos"); + } + } +} diff --git a/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.Designer.cs b/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.Designer.cs new file mode 100644 index 0000000..ce58970 --- /dev/null +++ b/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.Designer.cs @@ -0,0 +1,69 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using exercise.wwwapi.DataContext; + +#nullable disable + +namespace exercise.wwwapi.Migrations +{ + [DbContext(typeof(TodoContext))] + [Migration("20241008185152_SeedInitialData")] + partial class SeedInitialData + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("exercise.wwwapi.Models.Todo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Completed") + .HasColumnType("boolean"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Todos"); + + b.HasData( + new + { + Id = 1, + Completed = true, + Title = "First task" + }, + new + { + Id = 2, + Completed = false, + Title = "Second task" + }, + new + { + Id = 3, + Completed = true, + Title = "Third task" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.cs b/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.cs new file mode 100644 index 0000000..5bb573b --- /dev/null +++ b/exercise.wwwapi/Migrations/20241008185152_SeedInitialData.cs @@ -0,0 +1,45 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace exercise.wwwapi.Migrations +{ + /// + public partial class SeedInitialData : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Todos", + columns: new[] { "Id", "Completed", "Title" }, + values: new object[,] + { + { 1, true, "First task" }, + { 2, false, "Second task" }, + { 3, true, "Third task" } + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Todos", + keyColumn: "Id", + keyValue: 1); + + migrationBuilder.DeleteData( + table: "Todos", + keyColumn: "Id", + keyValue: 2); + + migrationBuilder.DeleteData( + table: "Todos", + keyColumn: "Id", + keyValue: 3); + } + } +} diff --git a/exercise.wwwapi/Migrations/TodoContextModelSnapshot.cs b/exercise.wwwapi/Migrations/TodoContextModelSnapshot.cs new file mode 100644 index 0000000..58edcd2 --- /dev/null +++ b/exercise.wwwapi/Migrations/TodoContextModelSnapshot.cs @@ -0,0 +1,66 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using exercise.wwwapi.DataContext; + +#nullable disable + +namespace exercise.wwwapi.Migrations +{ + [DbContext(typeof(TodoContext))] + partial class TodoContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("exercise.wwwapi.Models.Todo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Completed") + .HasColumnType("boolean"); + + b.Property("Title") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Todos"); + + b.HasData( + new + { + Id = 1, + Completed = true, + Title = "First task" + }, + new + { + Id = 2, + Completed = false, + Title = "Second task" + }, + new + { + Id = 3, + Completed = true, + Title = "Third task" + }); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/exercise.wwwapi/Models/Todo.cs b/exercise.wwwapi/Models/Todo.cs new file mode 100644 index 0000000..ef3f2d6 --- /dev/null +++ b/exercise.wwwapi/Models/Todo.cs @@ -0,0 +1,10 @@ +namespace exercise.wwwapi.Models +{ + public class Todo + { + public int Id { get; set; } + public string Title { get; set; } + + public bool Completed { get; set; } + } +} diff --git a/exercise.wwwapi/Program.cs b/exercise.wwwapi/Program.cs new file mode 100644 index 0000000..48590e6 --- /dev/null +++ b/exercise.wwwapi/Program.cs @@ -0,0 +1,41 @@ +using exercise.wwwapi.EndPoints; +using exercise.wwwapi.Models; +using exercise.wwwapi.Repository; + + +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddControllers(); + +// Add CORS service with policy that allows any origin +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowAll", builder => + { + builder.AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + }); +}); + +// Add services to the container. +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +builder.Services.AddScoped, DatabaseRepository>(); + +var app = builder.Build(); + +// Use the CORS policy +app.UseCors("AllowAll"); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.ConfigureTodoAPI(); +app.UseHttpsRedirection(); +app.MapControllers(); +app.Run(); \ No newline at end of file diff --git a/exercise.wwwapi/Properties/launchSettings.json b/exercise.wwwapi/Properties/launchSettings.json new file mode 100644 index 0000000..2c47398 --- /dev/null +++ b/exercise.wwwapi/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:48821", + "sslPort": 44370 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5168", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7040;http://localhost:5168", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/exercise.wwwapi/Repository/DatabaseRepository.cs b/exercise.wwwapi/Repository/DatabaseRepository.cs new file mode 100644 index 0000000..5d04853 --- /dev/null +++ b/exercise.wwwapi/Repository/DatabaseRepository.cs @@ -0,0 +1,72 @@ +using exercise.wwwapi.DataContext; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using Microsoft.EntityFrameworkCore; +using System.Linq.Expressions; + +namespace exercise.wwwapi.Repository +{ + + public class DatabaseRepository : IDatabaseRepository where T : class + { + + + private TodoContext _db; + private DbSet _table = null; + public DatabaseRepository() + { + _db = new TodoContext(); + _table = _db.Set(); + } + public DatabaseRepository(TodoContext db) + { + _db = db; + _table = _db.Set(); + } + + public IEnumerable Include(params Expression>[] includes) + { + DbSet dbSet = _db.Set(); + + IEnumerable query = null; + foreach (var include in includes) + { + query = dbSet.Include(include); + } + + return query ?? dbSet; + } + + + + public IEnumerable GetAll() + { + return _table.ToList(); + } + public T GetById(object id) + { + return _table.Find(id); + } + public void Insert(T obj) + { + _table.Add(obj); + this.Save(); + } + public void Update(T obj) + { + _table.Attach(obj); + _db.Entry(obj).State = EntityState.Modified; + this.Save(); + } + + public void Delete(object id) + { + T existing = _table.Find(id); + _table.Remove(existing); + this.Save(); + } + public void Save() + { + _db.SaveChanges(); + } + } +} \ No newline at end of file diff --git a/exercise.wwwapi/Repository/IDatabaseRepository.cs b/exercise.wwwapi/Repository/IDatabaseRepository.cs new file mode 100644 index 0000000..409cf58 --- /dev/null +++ b/exercise.wwwapi/Repository/IDatabaseRepository.cs @@ -0,0 +1,16 @@ +using exercise.wwwapi.Models; +using System.Linq.Expressions; + +namespace exercise.wwwapi.Repository +{ + public interface IDatabaseRepository where T : class + { + IEnumerable GetAll(); + T GetById(object id); + void Insert(T obj); + void Update(T obj); + void Delete(object id); + void Save(); + IEnumerable Include(params Expression>[] includes); + } +} \ No newline at end of file diff --git a/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 085907.png b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 085907.png new file mode 100644 index 0000000..0981fea Binary files /dev/null and b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 085907.png differ diff --git a/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 090636.png b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 090636.png new file mode 100644 index 0000000..f2dd0ff Binary files /dev/null and b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 090636.png differ diff --git a/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104121.png b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104121.png new file mode 100644 index 0000000..6ae93ad Binary files /dev/null and b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104121.png differ diff --git a/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104143.png b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104143.png new file mode 100644 index 0000000..a07556b Binary files /dev/null and b/exercise.wwwapi/Screenshots/Screenshot 2024-10-18 104143.png differ diff --git a/exercise.wwwapi/exercise.wwwapi.csproj b/exercise.wwwapi/exercise.wwwapi.csproj new file mode 100644 index 0000000..066a7d5 --- /dev/null +++ b/exercise.wwwapi/exercise.wwwapi.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + enable + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + diff --git a/exercise.wwwapi/exercise.wwwapi.http b/exercise.wwwapi/exercise.wwwapi.http new file mode 100644 index 0000000..19e6a75 --- /dev/null +++ b/exercise.wwwapi/exercise.wwwapi.http @@ -0,0 +1,6 @@ +@exercise.wwwapi_HostAddress = http://localhost:5168 + +GET {{exercise.wwwapi_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/exercise.wwwapi/out/Microsoft.AspNetCore.OpenApi.dll b/exercise.wwwapi/out/Microsoft.AspNetCore.OpenApi.dll new file mode 100644 index 0000000..1df70d4 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.AspNetCore.OpenApi.dll differ diff --git a/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Abstractions.dll b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Abstractions.dll new file mode 100644 index 0000000..2169cf8 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Abstractions.dll differ diff --git a/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Relational.dll b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Relational.dll new file mode 100644 index 0000000..f8c58d0 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.Relational.dll differ diff --git a/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.dll b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.dll new file mode 100644 index 0000000..b628ed6 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.EntityFrameworkCore.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.Caching.Memory.dll b/exercise.wwwapi/out/Microsoft.Extensions.Caching.Memory.dll new file mode 100644 index 0000000..077b1b6 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.Caching.Memory.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.Abstractions.dll new file mode 100644 index 0000000..81ed3de Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.dll b/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.dll new file mode 100644 index 0000000..bd71a2b Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.DependencyInjection.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.Logging.Abstractions.dll b/exercise.wwwapi/out/Microsoft.Extensions.Logging.Abstractions.dll new file mode 100644 index 0000000..f9d1dc6 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.Logging.Abstractions.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.Logging.dll b/exercise.wwwapi/out/Microsoft.Extensions.Logging.dll new file mode 100644 index 0000000..35905b6 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.Logging.dll differ diff --git a/exercise.wwwapi/out/Microsoft.Extensions.Options.dll b/exercise.wwwapi/out/Microsoft.Extensions.Options.dll new file mode 100644 index 0000000..a7b3f21 Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.Extensions.Options.dll differ diff --git a/exercise.wwwapi/out/Microsoft.OpenApi.dll b/exercise.wwwapi/out/Microsoft.OpenApi.dll new file mode 100644 index 0000000..1e0998d Binary files /dev/null and b/exercise.wwwapi/out/Microsoft.OpenApi.dll differ diff --git a/exercise.wwwapi/out/MyApi.zip b/exercise.wwwapi/out/MyApi.zip new file mode 100644 index 0000000..ecb8d73 Binary files /dev/null and b/exercise.wwwapi/out/MyApi.zip differ diff --git a/exercise.wwwapi/out/Newtonsoft.Json.dll b/exercise.wwwapi/out/Newtonsoft.Json.dll new file mode 100644 index 0000000..d035c38 Binary files /dev/null and b/exercise.wwwapi/out/Newtonsoft.Json.dll differ diff --git a/exercise.wwwapi/out/Npgsql.EntityFrameworkCore.PostgreSQL.dll b/exercise.wwwapi/out/Npgsql.EntityFrameworkCore.PostgreSQL.dll new file mode 100644 index 0000000..042c1f0 Binary files /dev/null and b/exercise.wwwapi/out/Npgsql.EntityFrameworkCore.PostgreSQL.dll differ diff --git a/exercise.wwwapi/out/Npgsql.dll b/exercise.wwwapi/out/Npgsql.dll new file mode 100644 index 0000000..c0eb4d9 Binary files /dev/null and b/exercise.wwwapi/out/Npgsql.dll differ diff --git a/exercise.wwwapi/out/Swashbuckle.AspNetCore.Swagger.dll b/exercise.wwwapi/out/Swashbuckle.AspNetCore.Swagger.dll new file mode 100644 index 0000000..e9b8cf7 Binary files /dev/null and b/exercise.wwwapi/out/Swashbuckle.AspNetCore.Swagger.dll differ diff --git a/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerGen.dll b/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerGen.dll new file mode 100644 index 0000000..68e38a2 Binary files /dev/null and b/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerGen.dll differ diff --git a/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerUI.dll b/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerUI.dll new file mode 100644 index 0000000..9c52aed Binary files /dev/null and b/exercise.wwwapi/out/Swashbuckle.AspNetCore.SwaggerUI.dll differ diff --git a/exercise.wwwapi/out/exercise.wwwapi.deps.json b/exercise.wwwapi/out/exercise.wwwapi.deps.json new file mode 100644 index 0000000..6b2031e --- /dev/null +++ b/exercise.wwwapi/out/exercise.wwwapi.deps.json @@ -0,0 +1,668 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "exercise.wwwapi/1.0.0": { + "dependencies": { + "Microsoft.AspNetCore.OpenApi": "8.0.6", + "Microsoft.EntityFrameworkCore.Tools": "8.0.10", + "Npgsql.EntityFrameworkCore.PostgreSQL": "8.0.8", + "Swashbuckle.AspNetCore": "6.4.0", + "Newtonsoft.Json": "13.0.3" + }, + "runtime": { + "exercise.wwwapi.dll": {} + } + }, + "Humanizer.Core/2.14.1": {}, + "Microsoft.AspNetCore.OpenApi/8.0.6": { + "dependencies": { + "Microsoft.OpenApi": "1.4.3" + }, + "runtime": { + "lib/net8.0/Microsoft.AspNetCore.OpenApi.dll": { + "assemblyVersion": "8.0.6.0", + "fileVersion": "8.0.624.26909" + } + } + }, + "Microsoft.Bcl.AsyncInterfaces/6.0.0": {}, + "Microsoft.CodeAnalysis.Analyzers/3.3.3": {}, + "Microsoft.CodeAnalysis.Common/4.5.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.3", + "System.Collections.Immutable": "6.0.0", + "System.Reflection.Metadata": "6.0.1", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encoding.CodePages": "6.0.0" + } + }, + "Microsoft.CodeAnalysis.CSharp/4.5.0": { + "dependencies": { + "Microsoft.CodeAnalysis.Common": "4.5.0" + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "4.5.0", + "Microsoft.CodeAnalysis.Common": "4.5.0", + "Microsoft.CodeAnalysis.Workspaces.Common": "4.5.0" + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "6.0.0", + "Microsoft.CodeAnalysis.Common": "4.5.0", + "System.Composition": "6.0.0", + "System.IO.Pipelines": "6.0.3", + "System.Threading.Channels": "6.0.0" + } + }, + "Microsoft.EntityFrameworkCore/8.0.10": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", + "Microsoft.EntityFrameworkCore.Analyzers": "8.0.10", + "Microsoft.Extensions.Caching.Memory": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.dll": { + "assemblyVersion": "8.0.10.0", + "fileVersion": "8.0.1024.46708" + } + } + }, + "Microsoft.EntityFrameworkCore.Abstractions/8.0.10": { + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": { + "assemblyVersion": "8.0.10.0", + "fileVersion": "8.0.1024.46708" + } + } + }, + "Microsoft.EntityFrameworkCore.Analyzers/8.0.10": {}, + "Microsoft.EntityFrameworkCore.Design/8.0.10": { + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.5.0", + "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Mono.TextTemplating": "2.2.1" + } + }, + "Microsoft.EntityFrameworkCore.Relational/8.0.10": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": { + "assemblyVersion": "8.0.10.0", + "fileVersion": "8.0.1024.46708" + } + } + }, + "Microsoft.EntityFrameworkCore.Tools/8.0.10": { + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": "8.0.10" + } + }, + "Microsoft.Extensions.ApiDescription.Server/6.0.5": {}, + "Microsoft.Extensions.Caching.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "runtime": { + "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.DependencyModel/8.0.2": {}, + "Microsoft.Extensions.Logging/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.1024.46610" + } + } + }, + "Microsoft.Extensions.Options/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.224.6711" + } + } + }, + "Microsoft.Extensions.Primitives/8.0.0": {}, + "Microsoft.OpenApi/1.4.3": { + "runtime": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "assemblyVersion": "1.4.3.0", + "fileVersion": "1.4.3.0" + } + } + }, + "Mono.TextTemplating/2.2.1": { + "dependencies": { + "System.CodeDom": "4.4.0" + } + }, + "Newtonsoft.Json/13.0.3": { + "runtime": { + "lib/net6.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.3.27908" + } + } + }, + "Npgsql/8.0.4": { + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "runtime": { + "lib/net8.0/Npgsql.dll": { + "assemblyVersion": "8.0.4.0", + "fileVersion": "8.0.4.0" + } + } + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/8.0.8": { + "dependencies": { + "Microsoft.EntityFrameworkCore": "8.0.10", + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.10", + "Microsoft.EntityFrameworkCore.Relational": "8.0.10", + "Npgsql": "8.0.4" + }, + "runtime": { + "lib/net8.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": { + "assemblyVersion": "8.0.8.0", + "fileVersion": "8.0.8.0" + } + } + }, + "Swashbuckle.AspNetCore/6.4.0": { + "dependencies": { + "Microsoft.Extensions.ApiDescription.Server": "6.0.5", + "Swashbuckle.AspNetCore.Swagger": "6.4.0", + "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", + "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" + } + }, + "Swashbuckle.AspNetCore.Swagger/6.4.0": { + "dependencies": { + "Microsoft.OpenApi": "1.4.3" + }, + "runtime": { + "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { + "assemblyVersion": "6.4.0.0", + "fileVersion": "6.4.0.0" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.4.0" + }, + "runtime": { + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { + "assemblyVersion": "6.4.0.0", + "fileVersion": "6.4.0.0" + } + } + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { + "runtime": { + "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { + "assemblyVersion": "6.4.0.0", + "fileVersion": "6.4.0.0" + } + } + }, + "System.CodeDom/4.4.0": {}, + "System.Collections.Immutable/6.0.0": { + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Composition/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0", + "System.Composition.Convention": "6.0.0", + "System.Composition.Hosting": "6.0.0", + "System.Composition.Runtime": "6.0.0", + "System.Composition.TypedParts": "6.0.0" + } + }, + "System.Composition.AttributedModel/6.0.0": {}, + "System.Composition.Convention/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0" + } + }, + "System.Composition.Hosting/6.0.0": { + "dependencies": { + "System.Composition.Runtime": "6.0.0" + } + }, + "System.Composition.Runtime/6.0.0": {}, + "System.Composition.TypedParts/6.0.0": { + "dependencies": { + "System.Composition.AttributedModel": "6.0.0", + "System.Composition.Hosting": "6.0.0", + "System.Composition.Runtime": "6.0.0" + } + }, + "System.IO.Pipelines/6.0.3": {}, + "System.Reflection.Metadata/6.0.1": { + "dependencies": { + "System.Collections.Immutable": "6.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": {}, + "System.Text.Encoding.CodePages/6.0.0": { + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Threading.Channels/6.0.0": {} + } + }, + "libraries": { + "exercise.wwwapi/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Humanizer.Core/2.14.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==", + "path": "humanizer.core/2.14.1", + "hashPath": "humanizer.core.2.14.1.nupkg.sha512" + }, + "Microsoft.AspNetCore.OpenApi/8.0.6": { + "type": "package", + "serviceable": true, + "sha512": "sha512-G0Qdo5ZtxmBFZ41CFRopZbSVeS/xwezmqZE0vLYcggoB7EEsPOUKSWnSrJPC2C+02iANAnnq6bSMIlKBgdqCmA==", + "path": "microsoft.aspnetcore.openapi/8.0.6", + "hashPath": "microsoft.aspnetcore.openapi.8.0.6.nupkg.sha512" + }, + "Microsoft.Bcl.AsyncInterfaces/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==", + "path": "microsoft.bcl.asyncinterfaces/6.0.0", + "hashPath": "microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Analyzers/3.3.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==", + "path": "microsoft.codeanalysis.analyzers/3.3.3", + "hashPath": "microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Common/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lwAbIZNdnY0SUNoDmZHkVUwLO8UyNnyyh1t/4XsbFxi4Ounb3xszIYZaWhyj5ZjyfcwqwmtMbE7fUTVCqQEIdQ==", + "path": "microsoft.codeanalysis.common/4.5.0", + "hashPath": "microsoft.codeanalysis.common.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cM59oMKAOxvdv76bdmaKPy5hfj+oR+zxikWoueEB7CwTko7mt9sVKZI8Qxlov0C/LuKEG+WQwifepqL3vuTiBQ==", + "path": "microsoft.codeanalysis.csharp/4.5.0", + "hashPath": "microsoft.codeanalysis.csharp.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h74wTpmGOp4yS4hj+EvNzEiPgg/KVs2wmSfTZ81upJZOtPkJsVkgfsgtxxqmAeapjT/vLKfmYV0bS8n5MNVP+g==", + "path": "microsoft.codeanalysis.csharp.workspaces/4.5.0", + "hashPath": "microsoft.codeanalysis.csharp.workspaces.4.5.0.nupkg.sha512" + }, + "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l4dDRmGELXG72XZaonnOeORyD/T5RpEu5LGHOUIhnv+MmUWDY/m1kWXGwtcgQ5CJ5ynkFiRnIYzTKXYjUs7rbw==", + "path": "microsoft.codeanalysis.workspaces.common/4.5.0", + "hashPath": "microsoft.codeanalysis.workspaces.common.4.5.0.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PPkQdIqfR1nU3n6YgGGDk8G+eaYbaAKM1AzIQtlPNTKf10Osg3N9T+iK9AlnSA/ujsK00flPpFHVfJrbuBFS1A==", + "path": "microsoft.entityframeworkcore/8.0.10", + "hashPath": "microsoft.entityframeworkcore.8.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Abstractions/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FV0QlcX9INY4kAD2o72uPtyOh0nZut2jB11Jf9mNYBtHay8gDLe+x4AbXFwuQg+eSvofjT7naV82e827zGfyMg==", + "path": "microsoft.entityframeworkcore.abstractions/8.0.10", + "hashPath": "microsoft.entityframeworkcore.abstractions.8.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Analyzers/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-51KkPIc0EMv/gVXhPIUi6cwJE9Mvh+PLr4Lap4naLcsoGZ0lF2SvOPgUUprwRV3MnN7nyD1XPhT5RJ/p+xFAXw==", + "path": "microsoft.entityframeworkcore.analyzers/8.0.10", + "hashPath": "microsoft.entityframeworkcore.analyzers.8.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Design/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uGNjfKvAsql2KHRqxlK5wHo8mMC60G/FecrFKEjJgeIxtUAbSXGOgKGw/gD9flO5Fzzt1C7uxfIcr6ZsMmFkeg==", + "path": "microsoft.entityframeworkcore.design/8.0.10", + "hashPath": "microsoft.entityframeworkcore.design.8.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Relational/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OefBEE47kGKPRPV3OT+FAW6o5BFgLk2D9EoeWVy7NbOepzUneayLQxbVE098FfedTyMwxvZQoDD9LrvZc3MadA==", + "path": "microsoft.entityframeworkcore.relational/8.0.10", + "hashPath": "microsoft.entityframeworkcore.relational.8.0.10.nupkg.sha512" + }, + "Microsoft.EntityFrameworkCore.Tools/8.0.10": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aaimNUjkJDHdZb2hxd6hjwz7OdeankbQHPx8/b+qCfVfaEpOAIW0LTBge4qG+AUKacKfcoK7GJq6ACjenEvPLQ==", + "path": "microsoft.entityframeworkcore.tools/8.0.10", + "hashPath": "microsoft.entityframeworkcore.tools.8.0.10.nupkg.sha512" + }, + "Microsoft.Extensions.ApiDescription.Server/6.0.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", + "path": "microsoft.extensions.apidescription.server/6.0.5", + "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", + "path": "microsoft.extensions.caching.abstractions/8.0.0", + "hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Caching.Memory/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "path": "microsoft.extensions.caching.memory/8.0.1", + "hashPath": "microsoft.extensions.caching.memory.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "path": "microsoft.extensions.dependencyinjection/8.0.1", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyModel/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==", + "path": "microsoft.extensions.dependencymodel/8.0.2", + "hashPath": "microsoft.extensions.dependencymodel.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "path": "microsoft.extensions.logging/8.0.1", + "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "path": "microsoft.extensions.logging.abstractions/8.0.2", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Options/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "path": "microsoft.extensions.options/8.0.2", + "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "path": "microsoft.extensions.primitives/8.0.0", + "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" + }, + "Microsoft.OpenApi/1.4.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rURwggB+QZYcSVbDr7HSdhw/FELvMlriW10OeOzjPT7pstefMo7IThhtNtDudxbXhW+lj0NfX72Ka5EDsG8x6w==", + "path": "microsoft.openapi/1.4.3", + "hashPath": "microsoft.openapi.1.4.3.nupkg.sha512" + }, + "Mono.TextTemplating/2.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==", + "path": "mono.texttemplating/2.2.1", + "hashPath": "mono.texttemplating.2.2.1.nupkg.sha512" + }, + "Newtonsoft.Json/13.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", + "path": "newtonsoft.json/13.0.3", + "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512" + }, + "Npgsql/8.0.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vaYEUlF/pB9m8bs21wQv3Da0kMHT4A9USe47VfY/L2BO97xz5KfIxhEu22QS9d68ZrLxvtL3wQDfDLPr2OjbjA==", + "path": "npgsql/8.0.4", + "hashPath": "npgsql.8.0.4.nupkg.sha512" + }, + "Npgsql.EntityFrameworkCore.PostgreSQL/8.0.8": { + "type": "package", + "serviceable": true, + "sha512": "sha512-D5WWJZJTgZYUmGv66BARXbTlinp2a5f5RueJqGYoHuWJw02J0i2va/RA+8N4A5hLORK5YKMRqXhFWtKsZdrksw==", + "path": "npgsql.entityframeworkcore.postgresql/8.0.8", + "hashPath": "npgsql.entityframeworkcore.postgresql.8.0.8.nupkg.sha512" + }, + "Swashbuckle.AspNetCore/6.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", + "path": "swashbuckle.aspnetcore/6.4.0", + "hashPath": "swashbuckle.aspnetcore.6.4.0.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.Swagger/6.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", + "path": "swashbuckle.aspnetcore.swagger/6.4.0", + "hashPath": "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", + "path": "swashbuckle.aspnetcore.swaggergen/6.4.0", + "hashPath": "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512" + }, + "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==", + "path": "swashbuckle.aspnetcore.swaggerui/6.4.0", + "hashPath": "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512" + }, + "System.CodeDom/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==", + "path": "system.codedom/4.4.0", + "hashPath": "system.codedom.4.4.0.nupkg.sha512" + }, + "System.Collections.Immutable/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==", + "path": "system.collections.immutable/6.0.0", + "hashPath": "system.collections.immutable.6.0.0.nupkg.sha512" + }, + "System.Composition/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-d7wMuKQtfsxUa7S13tITC8n1cQzewuhD5iDjZtK2prwFfKVzdYtgrTHgjaV03Zq7feGQ5gkP85tJJntXwInsJA==", + "path": "system.composition/6.0.0", + "hashPath": "system.composition.6.0.0.nupkg.sha512" + }, + "System.Composition.AttributedModel/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WK1nSDLByK/4VoC7fkNiFuTVEiperuCN/Hyn+VN30R+W2ijO1d0Z2Qm0ScEl9xkSn1G2MyapJi8xpf4R8WRa/w==", + "path": "system.composition.attributedmodel/6.0.0", + "hashPath": "system.composition.attributedmodel.6.0.0.nupkg.sha512" + }, + "System.Composition.Convention/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-XYi4lPRdu5bM4JVJ3/UIHAiG6V6lWWUlkhB9ab4IOq0FrRsp0F4wTyV4Dj+Ds+efoXJ3qbLqlvaUozDO7OLeXA==", + "path": "system.composition.convention/6.0.0", + "hashPath": "system.composition.convention.6.0.0.nupkg.sha512" + }, + "System.Composition.Hosting/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-w/wXjj7kvxuHPLdzZ0PAUt++qJl03t7lENmb2Oev0n3zbxyNULbWBlnd5J5WUMMv15kg5o+/TCZFb6lSwfaUUQ==", + "path": "system.composition.hosting/6.0.0", + "hashPath": "system.composition.hosting.6.0.0.nupkg.sha512" + }, + "System.Composition.Runtime/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qkRH/YBaMPTnzxrS5RDk1juvqed4A6HOD/CwRcDGyPpYps1J27waBddiiq1y93jk2ZZ9wuA/kynM+NO0kb3PKg==", + "path": "system.composition.runtime/6.0.0", + "hashPath": "system.composition.runtime.6.0.0.nupkg.sha512" + }, + "System.Composition.TypedParts/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iUR1eHrL8Cwd82neQCJ00MpwNIBs4NZgXzrPqx8NJf/k4+mwBO0XCRmHYJT4OLSwDDqh5nBLJWkz5cROnrGhRA==", + "path": "system.composition.typedparts/6.0.0", + "hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512" + }, + "System.IO.Pipelines/6.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==", + "path": "system.io.pipelines/6.0.3", + "hashPath": "system.io.pipelines.6.0.3.nupkg.sha512" + }, + "System.Reflection.Metadata/6.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-III/lNMSn0ZRBuM9m5Cgbiho5j81u0FAEagFX5ta2DKbljZ3T0IpD8j+BIiHQPeKqJppWS9bGEp6JnKnWKze0g==", + "path": "system.reflection.metadata/6.0.1", + "hashPath": "system.reflection.metadata.6.0.1.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==", + "path": "system.text.encoding.codepages/6.0.0", + "hashPath": "system.text.encoding.codepages.6.0.0.nupkg.sha512" + }, + "System.Threading.Channels/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==", + "path": "system.threading.channels/6.0.0", + "hashPath": "system.threading.channels.6.0.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/exercise.wwwapi/out/exercise.wwwapi.dll b/exercise.wwwapi/out/exercise.wwwapi.dll new file mode 100644 index 0000000..1f30c96 Binary files /dev/null and b/exercise.wwwapi/out/exercise.wwwapi.dll differ diff --git a/exercise.wwwapi/out/exercise.wwwapi.exe b/exercise.wwwapi/out/exercise.wwwapi.exe new file mode 100644 index 0000000..34fcb9e Binary files /dev/null and b/exercise.wwwapi/out/exercise.wwwapi.exe differ diff --git a/exercise.wwwapi/out/exercise.wwwapi.runtimeconfig.json b/exercise.wwwapi/out/exercise.wwwapi.runtimeconfig.json new file mode 100644 index 0000000..ffac358 --- /dev/null +++ b/exercise.wwwapi/out/exercise.wwwapi.runtimeconfig.json @@ -0,0 +1,21 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "8.0.0" + } + ], + "configProperties": { + "System.GC.Server": true, + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Reflection.NullabilityInfoContext.IsSupported": true, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/exercise.wwwapi/out/web.config b/exercise.wwwapi/out/web.config new file mode 100644 index 0000000..7fdffc1 --- /dev/null +++ b/exercise.wwwapi/out/web.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file