diff --git a/backend/Api/DBAccess/DBAccess.cs b/backend/Api/DBAccess/DBAccess.cs index b4c803a..a4a1273 100644 --- a/backend/Api/DBAccess/DBAccess.cs +++ b/backend/Api/DBAccess/DBAccess.cs @@ -120,6 +120,8 @@ namespace Api.DBAccess device1.ReferenceId = device.ReferenceId; + device1.Name = device.Name; + return await _context.SaveChangesAsync() == 1; } diff --git a/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.Designer.cs b/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.Designer.cs new file mode 100644 index 0000000..6a74e0e --- /dev/null +++ b/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.Designer.cs @@ -0,0 +1,132 @@ +// +using System; +using Api; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Api.Migrations +{ + [DbContext(typeof(DBContext))] + [Migration("20250319124149_AddedSaltUserNameDevice")] + partial class AddedSaltUserNameDevice + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.3"); + + modelBuilder.Entity("Api.Models.Device", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ReferenceId") + .HasColumnType("TEXT"); + + b.Property("TempHigh") + .HasColumnType("REAL"); + + b.Property("TempLow") + .HasColumnType("REAL"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("Api.Models.TemperatureLogs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Date") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("INTEGER"); + + b.Property("TempHigh") + .HasColumnType("REAL"); + + b.Property("TempLow") + .HasColumnType("REAL"); + + b.Property("Temperature") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DeviceId"); + + b.ToTable("TemperatureLogs"); + }); + + modelBuilder.Entity("Api.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Email") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Password") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Salt") + .HasColumnType("TEXT"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Api.Models.Device", b => + { + b.HasOne("Api.Models.User", null) + .WithMany("Devices") + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Api.Models.TemperatureLogs", b => + { + b.HasOne("Api.Models.Device", null) + .WithMany("Logs") + .HasForeignKey("DeviceId"); + }); + + modelBuilder.Entity("Api.Models.Device", b => + { + b.Navigation("Logs"); + }); + + modelBuilder.Entity("Api.Models.User", b => + { + b.Navigation("Devices"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.cs b/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.cs new file mode 100644 index 0000000..9e9cf79 --- /dev/null +++ b/backend/Api/Migrations/20250319124149_AddedSaltUserNameDevice.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Api.Migrations +{ + /// + public partial class AddedSaltUserNameDevice : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Salt", + table: "Users", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "Name", + table: "Devices", + type: "TEXT", + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Salt", + table: "Users"); + + migrationBuilder.DropColumn( + name: "Name", + table: "Devices"); + } + } +} diff --git a/backend/Api/Migrations/DBContextModelSnapshot.cs b/backend/Api/Migrations/DBContextModelSnapshot.cs index babadca..69184bb 100644 --- a/backend/Api/Migrations/DBContextModelSnapshot.cs +++ b/backend/Api/Migrations/DBContextModelSnapshot.cs @@ -17,12 +17,16 @@ namespace Api.Migrations #pragma warning disable 612, 618 modelBuilder.HasAnnotation("ProductVersion", "9.0.3"); - modelBuilder.Entity("Models.Device", b => + modelBuilder.Entity("Api.Models.Device", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("ReferenceId") .HasColumnType("TEXT"); @@ -42,7 +46,7 @@ namespace Api.Migrations b.ToTable("Devices"); }); - modelBuilder.Entity("Models.TemperatureLogs", b => + modelBuilder.Entity("Api.Models.TemperatureLogs", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -70,7 +74,7 @@ namespace Api.Migrations b.ToTable("TemperatureLogs"); }); - modelBuilder.Entity("Models.User", b => + modelBuilder.Entity("Api.Models.User", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -84,6 +88,9 @@ namespace Api.Migrations .IsRequired() .HasColumnType("TEXT"); + b.Property("Salt") + .HasColumnType("TEXT"); + b.Property("UserName") .IsRequired() .HasColumnType("TEXT"); @@ -93,26 +100,26 @@ namespace Api.Migrations b.ToTable("Users"); }); - modelBuilder.Entity("Models.Device", b => + modelBuilder.Entity("Api.Models.Device", b => { - b.HasOne("Models.User", null) + b.HasOne("Api.Models.User", null) .WithMany("Devices") .HasForeignKey("UserId"); }); - modelBuilder.Entity("Models.TemperatureLogs", b => + modelBuilder.Entity("Api.Models.TemperatureLogs", b => { - b.HasOne("Models.Device", null) + b.HasOne("Api.Models.Device", null) .WithMany("Logs") .HasForeignKey("DeviceId"); }); - modelBuilder.Entity("Models.Device", b => + modelBuilder.Entity("Api.Models.Device", b => { b.Navigation("Logs"); }); - modelBuilder.Entity("Models.User", b => + modelBuilder.Entity("Api.Models.User", b => { b.Navigation("Devices"); }); diff --git a/backend/Api/Models/Device.cs b/backend/Api/Models/Device.cs index 1c7c1b0..aa629ed 100644 --- a/backend/Api/Models/Device.cs +++ b/backend/Api/Models/Device.cs @@ -4,6 +4,8 @@ { public int Id { get; set; } + public string Name { get; set; } + public double TempHigh { get; set; } public double TempLow { get; set; } diff --git a/backend/Api/Models/User.cs b/backend/Api/Models/User.cs index fd519ba..4583fab 100644 --- a/backend/Api/Models/User.cs +++ b/backend/Api/Models/User.cs @@ -10,7 +10,7 @@ public string Email { get; set; } - public string Salt { get; set; } + public string? Salt { get; set; } public List? Devices { get; set; } } diff --git a/backend/Api/Program.cs b/backend/Api/Program.cs index 5490e59..ce4f270 100644 --- a/backend/Api/Program.cs +++ b/backend/Api/Program.cs @@ -2,14 +2,28 @@ using Api; using Microsoft.AspNetCore; using Microsoft.EntityFrameworkCore; -var app = WebHost.CreateDefaultBuilder(args) - .UseUrls("http://0.0.0.0:5000") - .UseStartup() - .Build(); +class Program +{ + public static void Main(string[] args) + { + var app = CreateWebHostBuilder(args).Build(); -await using var scope = app.Services.CreateAsyncScope(); -await using var db = scope.ServiceProvider.GetService(); -await db.Database.MigrateAsync(); + RunMigrations(app); + + app.Run(); + } + // Calls the startup class and creates the webinterface + public static IWebHostBuilder CreateWebHostBuilder(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseUrls("0.0.0.0:5000") + .UseStartup(); + + public static async void RunMigrations(IWebHost app) + { + await using var scope = app.Services.CreateAsyncScope(); + await using var db = scope.ServiceProvider.GetService(); + await db.Database.MigrateAsync(); + } +} -app.Run();