From 1433d592077d8adeec11097b1e3feac0396436ac Mon Sep 17 00:00:00 2001 From: KaasKop- Date: Fri, 7 Apr 2023 13:03:22 +0200 Subject: [PATCH] Start on dockerization Edited freezerDto a tad --- .dockerignore | 7 + Controllers/FreezerController.cs | 5 +- Controllers/IndexController.cs | 14 ++ Dockerfile | 13 ++ .../20230406151852_InitialDb.Designer.cs | 131 ++++++++++++++++++ Migrations/20230406151852_InitialDb.cs | 103 ++++++++++++++ Migrations/ThuisDbContextModelSnapshot.cs | 128 +++++++++++++++++ Models/FreezerDto.cs | 2 +- Program.cs | 5 +- Properties/launchSettings.json | 3 +- appsettings.Development.json | 2 +- appsettings.json | 2 +- docker-compose.yml | 9 ++ 13 files changed, 415 insertions(+), 9 deletions(-) create mode 100644 .dockerignore create mode 100644 Controllers/IndexController.cs create mode 100644 Dockerfile create mode 100644 Migrations/20230406151852_InitialDb.Designer.cs create mode 100644 Migrations/20230406151852_InitialDb.cs create mode 100644 Migrations/ThuisDbContextModelSnapshot.cs create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e41cbba --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.idea +bin +Migrations +obj +.gitignore +appsettings.Development.json diff --git a/Controllers/FreezerController.cs b/Controllers/FreezerController.cs index 7b904f1..ca338f8 100644 --- a/Controllers/FreezerController.cs +++ b/Controllers/FreezerController.cs @@ -36,7 +36,7 @@ namespace ThuisApi.Controllers freezerResponse.Add(new FreezerDto { FreezerId = freezer.FreezerId, - Location = freezer.Name, + Name = freezer.Name, AmountInFreezer = await _context.FreezerItem.CountAsync(a => a.Freezer.FreezerId == freezer.FreezerId) }); @@ -55,8 +55,7 @@ namespace ThuisApi.Controllers { return NotFound(); } - - + return Ok(_mapper.Map(freezer)); } diff --git a/Controllers/IndexController.cs b/Controllers/IndexController.cs new file mode 100644 index 0000000..5b97faa --- /dev/null +++ b/Controllers/IndexController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.AspNetCore.Mvc; + +namespace ThuisApi.Controllers; + +public class IndexController : ControllerBase +{ + [Route("")] + [Route("api")] + public IActionResult Index() + { + return Ok("nice"); + } +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d3cf2cb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build +WORKDIR /src + +COPY ThuisApi.csproj . +RUN dotnet restore + +COPY . . +RUN dotnet publish -c release -o /app --no-restore + +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS final +WORKDIR /app +COPY --from=build /app . +ENTRYPOINT ["dotnet", "ThuisApi.dll"] \ No newline at end of file diff --git a/Migrations/20230406151852_InitialDb.Designer.cs b/Migrations/20230406151852_InitialDb.Designer.cs new file mode 100644 index 0000000..4b9a6c1 --- /dev/null +++ b/Migrations/20230406151852_InitialDb.Designer.cs @@ -0,0 +1,131 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using ThuisApi.Data; + +#nullable disable + +namespace ThuisApi.Migrations +{ + [DbContext(typeof(ThuisDbContext))] + [Migration("20230406151852_InitialDb")] + partial class InitialDb + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("ThuisApi.Models.Card", b => + { + b.Property("CardId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Code") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Issuer") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("CardId"); + + b.ToTable("Cards"); + }); + + modelBuilder.Entity("ThuisApi.Models.Freezer", b => + { + b.Property("FreezerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("FreezerId"); + + b.ToTable("Freezer"); + + b.HasData( + new + { + FreezerId = 1, + Name = "Keuken" + }, + new + { + FreezerId = 2, + Name = "Berging" + }); + }); + + modelBuilder.Entity("ThuisApi.Models.FreezerItem", b => + { + b.Property("FreezerItemId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Amount") + .HasColumnType("INTEGER"); + + b.Property("DatePlacedInFreezer") + .HasColumnType("TEXT"); + + b.Property("Drawer") + .HasColumnType("INTEGER"); + + b.Property("FreezerId") + .HasColumnType("INTEGER"); + + b.Property("Item") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("FreezerItemId"); + + b.HasIndex("FreezerId"); + + b.ToTable("FreezerItem"); + + b.HasData( + new + { + FreezerItemId = 1, + Amount = 1, + DatePlacedInFreezer = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Drawer = 1, + FreezerId = 1, + Item = "Kip" + }, + new + { + FreezerItemId = 2, + Amount = 1, + DatePlacedInFreezer = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Drawer = 2, + FreezerId = 2, + Item = "1 pak van 2 hamburgers" + }); + }); + + modelBuilder.Entity("ThuisApi.Models.FreezerItem", b => + { + b.HasOne("ThuisApi.Models.Freezer", "Freezer") + .WithMany() + .HasForeignKey("FreezerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Freezer"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20230406151852_InitialDb.cs b/Migrations/20230406151852_InitialDb.cs new file mode 100644 index 0000000..247fea1 --- /dev/null +++ b/Migrations/20230406151852_InitialDb.cs @@ -0,0 +1,103 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace ThuisApi.Migrations +{ + /// + public partial class InitialDb : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Cards", + columns: table => new + { + CardId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Issuer = table.Column(type: "TEXT", nullable: false), + Code = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Cards", x => x.CardId); + }); + + migrationBuilder.CreateTable( + name: "Freezer", + columns: table => new + { + FreezerId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Name = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Freezer", x => x.FreezerId); + }); + + migrationBuilder.CreateTable( + name: "FreezerItem", + columns: table => new + { + FreezerItemId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Item = table.Column(type: "TEXT", nullable: false), + Amount = table.Column(type: "INTEGER", nullable: false), + Drawer = table.Column(type: "INTEGER", nullable: false), + DatePlacedInFreezer = table.Column(type: "TEXT", nullable: false), + FreezerId = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FreezerItem", x => x.FreezerItemId); + table.ForeignKey( + name: "FK_FreezerItem_Freezer_FreezerId", + column: x => x.FreezerId, + principalTable: "Freezer", + principalColumn: "FreezerId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.InsertData( + table: "Freezer", + columns: new[] { "FreezerId", "Name" }, + values: new object[,] + { + { 1, "Keuken" }, + { 2, "Berging" } + }); + + migrationBuilder.InsertData( + table: "FreezerItem", + columns: new[] { "FreezerItemId", "Amount", "DatePlacedInFreezer", "Drawer", "FreezerId", "Item" }, + values: new object[,] + { + { 1, 1, new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 1, "Kip" }, + { 2, 1, new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), 2, 2, "1 pak van 2 hamburgers" } + }); + + migrationBuilder.CreateIndex( + name: "IX_FreezerItem_FreezerId", + table: "FreezerItem", + column: "FreezerId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Cards"); + + migrationBuilder.DropTable( + name: "FreezerItem"); + + migrationBuilder.DropTable( + name: "Freezer"); + } + } +} diff --git a/Migrations/ThuisDbContextModelSnapshot.cs b/Migrations/ThuisDbContextModelSnapshot.cs new file mode 100644 index 0000000..428ae5d --- /dev/null +++ b/Migrations/ThuisDbContextModelSnapshot.cs @@ -0,0 +1,128 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using ThuisApi.Data; + +#nullable disable + +namespace ThuisApi.Migrations +{ + [DbContext(typeof(ThuisDbContext))] + partial class ThuisDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("ThuisApi.Models.Card", b => + { + b.Property("CardId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Code") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Issuer") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("CardId"); + + b.ToTable("Cards"); + }); + + modelBuilder.Entity("ThuisApi.Models.Freezer", b => + { + b.Property("FreezerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("FreezerId"); + + b.ToTable("Freezer"); + + b.HasData( + new + { + FreezerId = 1, + Name = "Keuken" + }, + new + { + FreezerId = 2, + Name = "Berging" + }); + }); + + modelBuilder.Entity("ThuisApi.Models.FreezerItem", b => + { + b.Property("FreezerItemId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Amount") + .HasColumnType("INTEGER"); + + b.Property("DatePlacedInFreezer") + .HasColumnType("TEXT"); + + b.Property("Drawer") + .HasColumnType("INTEGER"); + + b.Property("FreezerId") + .HasColumnType("INTEGER"); + + b.Property("Item") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("FreezerItemId"); + + b.HasIndex("FreezerId"); + + b.ToTable("FreezerItem"); + + b.HasData( + new + { + FreezerItemId = 1, + Amount = 1, + DatePlacedInFreezer = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Drawer = 1, + FreezerId = 1, + Item = "Kip" + }, + new + { + FreezerItemId = 2, + Amount = 1, + DatePlacedInFreezer = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + Drawer = 2, + FreezerId = 2, + Item = "1 pak van 2 hamburgers" + }); + }); + + modelBuilder.Entity("ThuisApi.Models.FreezerItem", b => + { + b.HasOne("ThuisApi.Models.Freezer", "Freezer") + .WithMany() + .HasForeignKey("FreezerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Freezer"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Models/FreezerDto.cs b/Models/FreezerDto.cs index 75a24ba..3f7f926 100644 --- a/Models/FreezerDto.cs +++ b/Models/FreezerDto.cs @@ -3,6 +3,6 @@ namespace ThuisApi.Models; public class FreezerDto { public int FreezerId { get; set; } - public string Location { get; set; } + public string Name { get; set; } public int AmountInFreezer { get; set; } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index 3b40591..124b8d7 100644 --- a/Program.cs +++ b/Program.cs @@ -1,3 +1,4 @@ +using Microsoft.AspNetCore.Authentication; using Microsoft.EntityFrameworkCore; using ThuisApi.Data; using ThuisApi.Models; @@ -27,9 +28,9 @@ if (app.Environment.IsDevelopment()) app.UseSwaggerUI(); } -app.UseHttpsRedirection(); +// app.UseHttpsRedirection(); -app.UseAuthorization(); +// app.UseAuthorization(); app.MapControllers(); diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json index d9d2da2..7bca823 100644 --- a/Properties/launchSettings.json +++ b/Properties/launchSettings.json @@ -16,7 +16,8 @@ "launchUrl": "swagger", "applicationUrl": "https://localhost:7239;http://localhost:5052", "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Development", + "AUTH_TOKEN": "kaas" } }, "IIS Express": { diff --git a/appsettings.Development.json b/appsettings.Development.json index a6e86ac..b9a1332 100644 --- a/appsettings.Development.json +++ b/appsettings.Development.json @@ -4,5 +4,5 @@ "Default": "Debug", "Microsoft.AspNetCore": "Warning" } - } + }, } diff --git a/appsettings.json b/appsettings.json index 10f68b8..be2e30e 100644 --- a/appsettings.json +++ b/appsettings.json @@ -5,5 +5,5 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a772439 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +services: + thuis_api: + build: . + container_name: thuis_api + ports: + - "8080:80" + volumes: + - "./db.sqlite3:/app/db.sqlite3" + \ No newline at end of file