diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml
index ba07e3c..e8063be 100644
--- a/.github/workflows/deployment.yml
+++ b/.github/workflows/deployment.yml
@@ -6,99 +6,16 @@ on:
- master
jobs:
- detect_changes:
- name: Detect changed microservices
- runs-on: ubuntu-latest
- outputs:
- changed_services: ${{ steps.set-matrix.outputs.changed_services }}
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0 # Needed for Git tags
-
- - name: Detect changed files
- id: changes
- uses: tj-actions/changed-files@v45
- with:
- files: |
- Services/**
- Common/**
-
- - name: Determine changed services
- id: set-matrix
- run: |
- echo "All changed files:"
- echo "${{ steps.changes.outputs.all_modified_files }}"
-
- ALL_SERVICES=("Devices" "Raports" "Measurements" "Emulators" "Gateways")
- CHANGED_FILES="${{ steps.changes.outputs.all_modified_files }}"
-
- # If anything changed in Common → rebuild all services
- if echo "$CHANGED_FILES" | grep -q "^Common/"; then
- echo "Common changed → rebuilding all microservices."
- JSON=$(printf '"%s",' "${ALL_SERVICES[@]}" | sed 's/,$//')
- echo "changed_services=[$JSON]" >> $GITHUB_OUTPUT
- exit 0
- fi
-
- # Detect individual service changes
- SERVICES=()
- for folder in "${ALL_SERVICES[@]}"; do
- if echo "$CHANGED_FILES" | grep -q "Services/$folder"; then
- SERVICES+=("\"$folder\"")
- fi
- done
-
- if [ ${#SERVICES[@]} -eq 0 ]; then
- echo "changed_services=[]" >> $GITHUB_OUTPUT
- exit 0
- fi
-
- JSON="[$(IFS=,; echo "${SERVICES[*]}")]"
- echo "Detected changed microservices: $JSON"
- echo "changed_services=$JSON" >> $GITHUB_OUTPUT
-
build_and_push:
- name: Build, push Docker images and create Git tags
- needs: detect_changes
- if: needs.detect_changes.outputs.changed_services != '[]'
+ name: Build and push Docker images
runs-on: ubuntu-latest
strategy:
matrix:
- service: ${{ fromJson(needs.detect_changes.outputs.changed_services) }}
+ service: [Devices, Measurements, Raports, Emulators, Gateways]
steps:
- name: Checkout
uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Determine Docker tag for service
- id: version
- run: |
- SERVICE="${{ matrix.service }}"
-
- # Get latest Git tag for this service
- LAST_TAG=$(git tag --list "${SERVICE}-v*" --sort=-v:refname | head -n 1)
-
- if [ -z "$LAST_TAG" ]; then
- NEXT_TAG="v1.0.0"
- else
- VERSION=${LAST_TAG#${SERVICE}-}
- MAJOR=${VERSION%%.*}
- MINOR=$(echo $VERSION | cut -d. -f2)
- PATCH=$(echo $VERSION | cut -d. -f3)
- PATCH=$((PATCH+1))
- NEXT_TAG="$MAJOR.$MINOR.$PATCH"
- fi
-
- echo "Service: $SERVICE"
- echo "Last tag: $LAST_TAG"
- echo "Next Docker tag: $NEXT_TAG"
-
- echo "NEXT_TAG=$NEXT_TAG" >> $GITHUB_ENV
- name: Build Docker image
run: |
@@ -120,9 +37,8 @@ jobs:
exit 1
fi
- echo "Building Docker image for $SERVICE:${NEXT_TAG}"
- docker build -f $DOCKERFILE -t darekkrawczyk/homee.server.$SERVICE_LOWER:${NEXT_TAG} .
-
+ echo "Building Docker image for $SERVICE"
+ docker build -f $DOCKERFILE -t darekkrawczyk/homee.server.$SERVICE_LOWER:latest .
- name: Push Docker image
env:
@@ -132,21 +48,4 @@ jobs:
SERVICE_LOWER=$(echo "$SERVICE" | tr '[:upper:]' '[:lower:]')
echo $DOCKERHUB_TOKEN | docker login -u darekkrawczyk --password-stdin
- docker push darekkrawczyk/homee.server.$SERVICE_LOWER:${NEXT_TAG}
-
- - name: Create Git tag for service
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- SERVICE="${{ matrix.service }}"
- TAG_NAME="${SERVICE}-${NEXT_TAG}"
-
- git config user.name "github-actions[bot]"
- git config user.email "github-actions[bot]@users.noreply.github.com"
-
- if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
- echo "Tag $TAG_NAME already exists, skipping."
- else
- git tag "$TAG_NAME"
- git push "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}" "$TAG_NAME"
- fi
\ No newline at end of file
+ docker push darekkrawczyk/homee.server.$SERVICE_LOWER:latest
\ No newline at end of file
diff --git a/Common/CommonServiceLibrary.GRPC/CommonServiceLibrary.GRPC.csproj b/Common/CommonServiceLibrary.GRPC/CommonServiceLibrary.GRPC.csproj
index f31f02e..94c30e1 100644
--- a/Common/CommonServiceLibrary.GRPC/CommonServiceLibrary.GRPC.csproj
+++ b/Common/CommonServiceLibrary.GRPC/CommonServiceLibrary.GRPC.csproj
@@ -11,6 +11,7 @@
+
all
diff --git a/Services/Devices/Devices.API/Program.cs b/Services/Devices/Devices.API/Program.cs
index 9c72dd5..7c4cbec 100644
--- a/Services/Devices/Devices.API/Program.cs
+++ b/Services/Devices/Devices.API/Program.cs
@@ -1,38 +1,41 @@
var builder = WebApplication.CreateBuilder(args);
+builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
+
+builder.Configuration.AddEnvironmentVariables();
+
+if (builder.Environment.IsDevelopment())
+{
+ builder.Configuration.AddUserSecrets();
+}
+
builder.Services.AddInfrastructureServices(builder.Configuration, builder.Environment);
builder.Services.AddApplicationServices(builder.Configuration, builder.Environment);
builder.Services.AddGRPCServerServices(builder.Configuration);
+
builder.Services.AddHealthChecks();
+
builder.Services.AddCors(options =>
{
+
options.AddDefaultPolicy(policy =>
{
- policy.WithOrigins("http://localhost:5173")
+ var corsOrigins = builder.Configuration.GetSection("CorsOrigins").Get();
+
+ policy.WithOrigins(corsOrigins)
.AllowAnyHeader()
- .AllowCredentials()
- .AllowAnyMethod();
+ .AllowAnyMethod()
+ .AllowCredentials();
});
});
-builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- .AddUserSecrets();
-
var app = builder.Build();
-bool initializeDB = app.Configuration["InitializeDBOnStart"] == "true" ? true : false;
-
-if (app.Environment.IsDevelopment() && initializeDB)
-{
- await app.InitializeDatabaseAsync();
-}
-
app.AddApplicationServicesUsage();
app.AddGRPCServerServicesUsage();
app.UseRouting();
-
app.UseCors();
app.MapHealthChecks("/devices/health", new HealthCheckOptions
diff --git a/Services/Devices/Devices.API/README.md b/Services/Devices/Devices.API/README.md
deleted file mode 100644
index 3149b37..0000000
--- a/Services/Devices/Devices.API/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# Devices service
\ No newline at end of file
diff --git a/Services/Devices/Devices.API/appsettings.Development.json b/Services/Devices/Devices.API/appsettings.Development.json
index 0c208ae..d809943 100644
--- a/Services/Devices/Devices.API/appsettings.Development.json
+++ b/Services/Devices/Devices.API/appsettings.Development.json
@@ -4,5 +4,9 @@
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
- }
-}
+ },
+ "CorsOrigins": [
+ "http://localhost:5173",
+ "http://localhost:3000"
+ ]
+}
\ No newline at end of file
diff --git a/Services/Devices/Devices.API/appsettings.Production.json b/Services/Devices/Devices.API/appsettings.Production.json
new file mode 100644
index 0000000..92d416d
--- /dev/null
+++ b/Services/Devices/Devices.API/appsettings.Production.json
@@ -0,0 +1,10 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning"
+ }
+ },
+ "CorsOrigins": [
+ "https://homeesystem.azurewebsites.net"
+ ]
+}
\ No newline at end of file
diff --git a/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/DependencyInjection.cs b/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/DependencyInjection.cs
index f6f0c69..39734f6 100644
--- a/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/DependencyInjection.cs
+++ b/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/DependencyInjection.cs
@@ -27,27 +27,6 @@ public static IServiceCollection AddGRPCServerServices(this IServiceCollection s
.Map(dest => dest.Id, src => src.ID)
.Map(dest => dest.Type, src => src.Type);
- //TypeAdapterConfig
- // .NewConfig()
- // .Map(dest => dest.Id, src => src.ID)
- // .Map(dest => dest.Temperature, src => src.Temperature)
- // .Map(dest => dest.Humidity, src => src.Humidity)
- // .Map(dest => dest.CarbonDioxide, src => src.CarbonDioxide)
- // .Map(dest => dest.VolatileOrganicCompounds, src => src.VolatileOrganicCompounds)
- // .Map(dest => dest.Pm1, src => src.PM1)
- // .Map(dest => dest.Pm25, src => src.PM25)
- // .Map(dest => dest.Pm10, src => src.PM10)
- // .Map(dest => dest.Formaldehyde, src => src.Formaldehyde)
- // .Map(dest => dest.CarbonMonoxide, src => src.CarbonMonoxide)
- // .Map(dest => dest.Ozone, src => src.Ozone)
- // .Map(dest => dest.Ammonia, src => src.Ammonia)
- // .Map(dest => dest.Airflow, src => src.Airflow)
- // .Map(dest => dest.AirIonizationLevel, src => src.AirIonizationLevel)
- // .Map(dest => dest.Oxygen, src => src.Oxygen)
- // .Map(dest => dest.Radon, src => src.Radon)
- // .Map(dest => dest.Illuminance, src => src.Illuminance)
- // .Map(dest => dest.SoundLevel, src => src.SoundLevel);
-
TypeAdapterConfig
.NewConfig()
.Map(dest => dest.Id, src => src.ID)
@@ -60,6 +39,7 @@ public static IServiceCollection AddGRPCServerServices(this IServiceCollection s
public static WebApplication AddGRPCServerServicesUsage(this WebApplication app)
{
+ app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
app.MapGrpcService();
return app;
diff --git a/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/Devices.GRPCServer.csproj b/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/Devices.GRPCServer.csproj
index 004e9f9..74ff952 100644
--- a/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/Devices.GRPCServer.csproj
+++ b/Services/Devices/Devices.GRPCServer/Devices.GRPCServer/Devices.GRPCServer.csproj
@@ -12,6 +12,7 @@
+
diff --git a/Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.Designer.cs b/Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.Designer.cs
deleted file mode 100644
index ff0a73f..0000000
--- a/Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.Designer.cs
+++ /dev/null
@@ -1,217 +0,0 @@
-//
-using System;
-using Devices.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Devices.Infrastructure.Migrations
-{
- [DbContext(typeof(DevicesDBContext))]
- [Migration("20251121145936_Initial migration")]
- partial class Initialmigration
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.7")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Devices.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("RegisterDate")
- .HasColumnType("datetime2");
-
- b.Property("StatusID")
- .HasColumnType("int");
-
- b.Property("TimestampID")
- .HasColumnType("int");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.HasIndex("LocationID");
-
- b.HasIndex("StatusID");
-
- b.HasIndex("TimestampID");
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.DeviceMeasurementType", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceID")
- .HasColumnType("int");
-
- b.Property("MeasurementTypeID")
- .HasColumnType("int");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceID");
-
- b.HasIndex("MeasurementTypeID");
-
- b.ToTable("DeviceMeasurementTypes");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Name of location, for example: 'Kitchen'...");
-
- b.HasKey("ID");
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.MeasurementType", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("For example: 'Air Temperature'");
-
- b.Property("Unit")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("For example: 'ppm'");
-
- b.HasKey("ID");
-
- b.ToTable("MeasurementTypes");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.Status", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Type")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("Statuses");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.Timestamp", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Cron")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Timestamp measurement configuration stored in CRON format");
-
- b.HasKey("ID");
-
- b.ToTable("Timestamps");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.Device", b =>
- {
- b.HasOne("Devices.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Devices.Domain.Models.Status", "Status")
- .WithMany()
- .HasForeignKey("StatusID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Devices.Domain.Models.Timestamp", "Timestamp")
- .WithMany()
- .HasForeignKey("TimestampID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Location");
-
- b.Navigation("Status");
-
- b.Navigation("Timestamp");
- });
-
- modelBuilder.Entity("Devices.Domain.Models.DeviceMeasurementType", b =>
- {
- b.HasOne("Devices.Domain.Models.Device", "Device")
- .WithMany()
- .HasForeignKey("DeviceID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Devices.Domain.Models.MeasurementType", "MeasurementType")
- .WithMany()
- .HasForeignKey("MeasurementTypeID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Device");
-
- b.Navigation("MeasurementType");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.cs b/Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.cs
deleted file mode 100644
index 2b2483e..0000000
--- a/Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Devices.Infrastructure.Migrations
-{
- ///
- public partial class _2HashPropertyAddedToLocationEntity : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn(
- name: "Hash",
- table: "Locations",
- type: "uniqueidentifier",
- nullable: false,
- defaultValue: new Guid("00000000-0000-0000-0000-000000000000"));
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "Hash",
- table: "Locations");
- }
- }
-}
diff --git a/Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.Designer.cs b/Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.Designer.cs
similarity index 98%
rename from Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.Designer.cs
rename to Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.Designer.cs
index 2a857f6..ec952e6 100644
--- a/Services/Devices/Devices.Infrastructure/Migrations/20251129140540_2-Hash-Property-Added-To-Location-Entity.Designer.cs
+++ b/Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.Designer.cs
@@ -12,8 +12,8 @@
namespace Devices.Infrastructure.Migrations
{
[DbContext(typeof(DevicesDBContext))]
- [Migration("20251129140540_2-Hash-Property-Added-To-Location-Entity")]
- partial class _2HashPropertyAddedToLocationEntity
+ [Migration("20251209170350_#1-Initial")]
+ partial class _1Initial
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
diff --git a/Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.cs b/Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.cs
similarity index 98%
rename from Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.cs
rename to Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.cs
index 3ac9cee..015785f 100644
--- a/Services/Devices/Devices.Infrastructure/Migrations/20251121145936_Initial migration.cs
+++ b/Services/Devices/Devices.Infrastructure/Migrations/20251209170350_#1-Initial.cs
@@ -6,7 +6,7 @@
namespace Devices.Infrastructure.Migrations
{
///
- public partial class Initialmigration : Migration
+ public partial class _1Initial : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
@@ -17,7 +17,8 @@ protected override void Up(MigrationBuilder migrationBuilder)
{
ID = table.Column(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
- Name = table.Column(type: "nvarchar(max)", nullable: false, comment: "Name of location, for example: 'Kitchen'...")
+ Name = table.Column(type: "nvarchar(max)", nullable: false, comment: "Name of location, for example: 'Kitchen'..."),
+ Hash = table.Column(type: "uniqueidentifier", nullable: false)
},
constraints: table =>
{
diff --git a/Services/Devices/Devices.Infrastructure/Scripts/M_1-Initial.sql b/Services/Devices/Devices.Infrastructure/Scripts/M_1-Initial.sql
new file mode 100644
index 0000000..2826f8b
--- /dev/null
+++ b/Services/Devices/Devices.Infrastructure/Scripts/M_1-Initial.sql
@@ -0,0 +1,178 @@
+IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
+BEGIN
+ CREATE TABLE [__EFMigrationsHistory] (
+ [MigrationId] nvarchar(150) NOT NULL,
+ [ProductVersion] nvarchar(32) NOT NULL,
+ CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
+ );
+END;
+GO
+
+BEGIN TRANSACTION;
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [Locations] (
+ [ID] int NOT NULL IDENTITY,
+ [Name] nvarchar(max) NOT NULL,
+ [Hash] uniqueidentifier NOT NULL,
+ CONSTRAINT [PK_Locations] PRIMARY KEY ([ID])
+ );
+ DECLARE @defaultSchema AS sysname;
+ SET @defaultSchema = SCHEMA_NAME();
+ DECLARE @description AS sql_variant;
+ SET @description = N'Name of location, for example: ''Kitchen''...';
+ EXEC sp_addextendedproperty 'MS_Description', @description, 'SCHEMA', @defaultSchema, 'TABLE', N'Locations', 'COLUMN', N'Name';
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [MeasurementTypes] (
+ [ID] int NOT NULL IDENTITY,
+ [Name] nvarchar(max) NOT NULL,
+ [Unit] nvarchar(max) NOT NULL,
+ CONSTRAINT [PK_MeasurementTypes] PRIMARY KEY ([ID])
+ );
+ DECLARE @defaultSchema1 AS sysname;
+ SET @defaultSchema1 = SCHEMA_NAME();
+ DECLARE @description1 AS sql_variant;
+ SET @description1 = N'For example: ''Air Temperature''';
+ EXEC sp_addextendedproperty 'MS_Description', @description1, 'SCHEMA', @defaultSchema1, 'TABLE', N'MeasurementTypes', 'COLUMN', N'Name';
+ SET @description1 = N'For example: ''ppm''';
+ EXEC sp_addextendedproperty 'MS_Description', @description1, 'SCHEMA', @defaultSchema1, 'TABLE', N'MeasurementTypes', 'COLUMN', N'Unit';
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [Statuses] (
+ [ID] int NOT NULL IDENTITY,
+ [Type] nvarchar(max) NOT NULL,
+ CONSTRAINT [PK_Statuses] PRIMARY KEY ([ID])
+ );
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [Timestamps] (
+ [ID] int NOT NULL IDENTITY,
+ [Cron] nvarchar(max) NOT NULL,
+ CONSTRAINT [PK_Timestamps] PRIMARY KEY ([ID])
+ );
+ DECLARE @defaultSchema2 AS sysname;
+ SET @defaultSchema2 = SCHEMA_NAME();
+ DECLARE @description2 AS sql_variant;
+ SET @description2 = N'Timestamp measurement configuration stored in CRON format';
+ EXEC sp_addextendedproperty 'MS_Description', @description2, 'SCHEMA', @defaultSchema2, 'TABLE', N'Timestamps', 'COLUMN', N'Cron';
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [Devices] (
+ [ID] int NOT NULL IDENTITY,
+ [Name] nvarchar(max) NOT NULL,
+ [DeviceNumber] uniqueidentifier NOT NULL,
+ [RegisterDate] datetime2 NOT NULL,
+ [LocationID] int NOT NULL,
+ [TimestampID] int NOT NULL,
+ [StatusID] int NOT NULL,
+ CONSTRAINT [PK_Devices] PRIMARY KEY ([ID]),
+ CONSTRAINT [FK_Devices_Locations_LocationID] FOREIGN KEY ([LocationID]) REFERENCES [Locations] ([ID]) ON DELETE CASCADE,
+ CONSTRAINT [FK_Devices_Statuses_StatusID] FOREIGN KEY ([StatusID]) REFERENCES [Statuses] ([ID]) ON DELETE CASCADE,
+ CONSTRAINT [FK_Devices_Timestamps_TimestampID] FOREIGN KEY ([TimestampID]) REFERENCES [Timestamps] ([ID]) ON DELETE CASCADE
+ );
+ DECLARE @defaultSchema3 AS sysname;
+ SET @defaultSchema3 = SCHEMA_NAME();
+ DECLARE @description3 AS sql_variant;
+ SET @description3 = N'This is unique name for device';
+ EXEC sp_addextendedproperty 'MS_Description', @description3, 'SCHEMA', @defaultSchema3, 'TABLE', N'Devices', 'COLUMN', N'DeviceNumber';
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE TABLE [DeviceMeasurementTypes] (
+ [ID] int NOT NULL IDENTITY,
+ [DeviceID] int NOT NULL,
+ [MeasurementTypeID] int NOT NULL,
+ CONSTRAINT [PK_DeviceMeasurementTypes] PRIMARY KEY ([ID]),
+ CONSTRAINT [FK_DeviceMeasurementTypes_Devices_DeviceID] FOREIGN KEY ([DeviceID]) REFERENCES [Devices] ([ID]) ON DELETE CASCADE,
+ CONSTRAINT [FK_DeviceMeasurementTypes_MeasurementTypes_MeasurementTypeID] FOREIGN KEY ([MeasurementTypeID]) REFERENCES [MeasurementTypes] ([ID]) ON DELETE CASCADE
+ );
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE INDEX [IX_DeviceMeasurementTypes_DeviceID] ON [DeviceMeasurementTypes] ([DeviceID]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE INDEX [IX_DeviceMeasurementTypes_MeasurementTypeID] ON [DeviceMeasurementTypes] ([MeasurementTypeID]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE UNIQUE INDEX [IX_Devices_DeviceNumber] ON [Devices] ([DeviceNumber]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE INDEX [IX_Devices_LocationID] ON [Devices] ([LocationID]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE INDEX [IX_Devices_StatusID] ON [Devices] ([StatusID]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ CREATE INDEX [IX_Devices_TimestampID] ON [Devices] ([TimestampID]);
+END;
+
+IF NOT EXISTS (
+ SELECT * FROM [__EFMigrationsHistory]
+ WHERE [MigrationId] = N'20251209170350_#1-Initial'
+)
+BEGIN
+ INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
+ VALUES (N'20251209170350_#1-Initial', N'9.0.7');
+END;
+
+COMMIT;
+GO
+
diff --git a/Services/Devices/Devices.Infrastructure/Scripts/README.md b/Services/Devices/Devices.Infrastructure/Scripts/README.md
deleted file mode 100644
index 6b373b2..0000000
--- a/Services/Devices/Devices.Infrastructure/Scripts/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Naming Convention
-
-- **`...S`** — Scripts used for **seeding** the database for the current version.
-- **`...M`** — Scripts used for **migrating** database tables from the previous version.
-- **`...C`** — Scripts used for **creating** the database schema from scratch.
diff --git a/Services/Devices/Devices.Infrastructure/Scripts/001S_Initial-migration.sql b/Services/Devices/Devices.Infrastructure/Scripts/S_1-Initial.sql
similarity index 100%
rename from Services/Devices/Devices.Infrastructure/Scripts/001S_Initial-migration.sql
rename to Services/Devices/Devices.Infrastructure/Scripts/S_1-Initial.sql
diff --git a/Services/Emulators/Emulators.Infrastructure/Emulators.Infrastructure.csproj b/Services/Emulators/Emulators.Infrastructure/Emulators.Infrastructure.csproj
index 930150a..8f668b9 100644
--- a/Services/Emulators/Emulators.Infrastructure/Emulators.Infrastructure.csproj
+++ b/Services/Emulators/Emulators.Infrastructure/Emulators.Infrastructure.csproj
@@ -26,4 +26,8 @@
+
+
+
+
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112090514_Init.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251112090514_Init.Designer.cs
deleted file mode 100644
index 30d2c52..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112090514_Init.Designer.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251112090514_Init")]
- partial class Init
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.Bias", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("MeasurementTypeID")
- .HasColumnType("int");
-
- b.Property("TimeOffset")
- .HasColumnType("int");
-
- b.Property("ValueOffset")
- .HasColumnType("float");
-
- b.Property("ValueSpread")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceID");
-
- b.HasIndex("LocationID");
-
- b.HasIndex("MeasurementTypeID");
-
- b.ToTable("Biases");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("MeasurementTypeID")
- .HasColumnType("int");
-
- b.HasKey("ID");
-
- b.HasIndex("MeasurementTypeID")
- .IsUnique();
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.MeasurementType", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("MeasurementTypes");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Bias", b =>
- {
- b.HasOne("Emulators.Domain.Models.Device", "Device")
- .WithMany()
- .HasForeignKey("DeviceID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.MeasurementType", "MeasurementType")
- .WithMany()
- .HasForeignKey("MeasurementTypeID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Device");
-
- b.Navigation("Location");
-
- b.Navigation("MeasurementType");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.HasOne("Emulators.Domain.Models.MeasurementType", "MeasurementType")
- .WithOne("ChartTemplate")
- .HasForeignKey("Emulators.Domain.Models.ChartTemplate", "MeasurementTypeID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("MeasurementType");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.MeasurementType", b =>
- {
- b.Navigation("ChartTemplate")
- .IsRequired();
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.Designer.cs
deleted file mode 100644
index 4078075..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.Designer.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251112102344_Deleted MeasurementType")]
- partial class DeletedMeasurementType
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.Bias", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("DeviceID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("TimeOffset")
- .HasColumnType("int");
-
- b.Property("ValueOffset")
- .HasColumnType("float");
-
- b.Property("ValueSpread")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("DeviceID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Biases");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.HasKey("ID");
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Bias", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Device", "Device")
- .WithMany()
- .HasForeignKey("DeviceID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Device");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.cs
deleted file mode 100644
index b87f16f..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251112102344_Deleted MeasurementType.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class DeletedMeasurementType : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_Biases_MeasurementTypes_MeasurementTypeID",
- table: "Biases");
-
- migrationBuilder.DropForeignKey(
- name: "FK_ChartTemplates_MeasurementTypes_MeasurementTypeID",
- table: "ChartTemplates");
-
- migrationBuilder.DropTable(
- name: "MeasurementTypes");
-
- migrationBuilder.DropIndex(
- name: "IX_ChartTemplates_MeasurementTypeID",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "MeasurementTypeID",
- table: "ChartTemplates");
-
- migrationBuilder.RenameColumn(
- name: "MeasurementTypeID",
- table: "Biases",
- newName: "ChartTemplateID");
-
- migrationBuilder.RenameIndex(
- name: "IX_Biases_MeasurementTypeID",
- table: "Biases",
- newName: "IX_Biases_ChartTemplateID");
-
- migrationBuilder.AddColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- defaultValue: "",
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.");
-
- migrationBuilder.AddForeignKey(
- name: "FK_Biases_ChartTemplates_ChartTemplateID",
- table: "Biases",
- column: "ChartTemplateID",
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_Biases_ChartTemplates_ChartTemplateID",
- table: "Biases");
-
- migrationBuilder.DropColumn(
- name: "Name",
- table: "ChartTemplates");
-
- migrationBuilder.RenameColumn(
- name: "ChartTemplateID",
- table: "Biases",
- newName: "MeasurementTypeID");
-
- migrationBuilder.RenameIndex(
- name: "IX_Biases_ChartTemplateID",
- table: "Biases",
- newName: "IX_Biases_MeasurementTypeID");
-
- migrationBuilder.AddColumn(
- name: "MeasurementTypeID",
- table: "ChartTemplates",
- type: "int",
- nullable: false,
- defaultValue: 0);
-
- migrationBuilder.CreateTable(
- name: "MeasurementTypes",
- columns: table => new
- {
- ID = table.Column(type: "int", nullable: false)
- .Annotation("SqlServer:Identity", "1, 1"),
- ChartTemplateID = table.Column(type: "int", nullable: false),
- Name = table.Column(type: "nvarchar(max)", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_MeasurementTypes", x => x.ID);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_ChartTemplates_MeasurementTypeID",
- table: "ChartTemplates",
- column: "MeasurementTypeID",
- unique: true);
-
- migrationBuilder.AddForeignKey(
- name: "FK_Biases_MeasurementTypes_MeasurementTypeID",
- table: "Biases",
- column: "MeasurementTypeID",
- principalTable: "MeasurementTypes",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
-
- migrationBuilder.AddForeignKey(
- name: "FK_ChartTemplates_MeasurementTypes_MeasurementTypeID",
- table: "ChartTemplates",
- column: "MeasurementTypeID",
- principalTable: "MeasurementTypes",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.Designer.cs
deleted file mode 100644
index 9a7f3a3..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.Designer.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251114155037_Location can have multiple charts")]
- partial class Locationcanhavemultiplecharts
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.Property("TimeOffset")
- .HasColumnType("int")
- .HasComment("Move chart to the right or left side.");
-
- b.Property("ValueOffset")
- .HasColumnType("float")
- .HasComment("Boost all values of this chart.");
-
- b.HasKey("ID");
-
- b.HasIndex("LocationID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.cs
deleted file mode 100644
index c99d2ed..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251114155037_Location can have multiple charts.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Locationcanhavemultiplecharts : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "Biases");
-
- migrationBuilder.AddColumn(
- name: "Spread",
- table: "Devices",
- type: "float",
- nullable: false,
- defaultValue: 0.0,
- comment: "Measurement value spread, expressed in percentage.");
-
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(450)",
- nullable: false,
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.",
- oldClrType: typeof(string),
- oldType: "nvarchar(max)",
- oldComment: "Name of chart, for example 'Temperature' it should represent measurement type.");
-
- migrationBuilder.AddColumn(
- name: "LocationID",
- table: "ChartTemplates",
- type: "int",
- nullable: false,
- defaultValue: 0);
-
- migrationBuilder.AddColumn(
- name: "TimeOffset",
- table: "ChartTemplates",
- type: "int",
- nullable: false,
- defaultValue: 0,
- comment: "Move chart to the right or left side.");
-
- migrationBuilder.AddColumn(
- name: "ValueOffset",
- table: "ChartTemplates",
- type: "float",
- nullable: false,
- defaultValue: 0.0,
- comment: "Boost all values of this chart.");
-
- migrationBuilder.CreateIndex(
- name: "IX_ChartTemplates_LocationID",
- table: "ChartTemplates",
- column: "LocationID");
-
- migrationBuilder.CreateIndex(
- name: "IX_ChartTemplates_Name",
- table: "ChartTemplates",
- column: "Name",
- unique: true);
-
- migrationBuilder.AddForeignKey(
- name: "FK_ChartTemplates_Locations_LocationID",
- table: "ChartTemplates",
- column: "LocationID",
- principalTable: "Locations",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ChartTemplates_Locations_LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropIndex(
- name: "IX_ChartTemplates_LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropIndex(
- name: "IX_ChartTemplates_Name",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "Spread",
- table: "Devices");
-
- migrationBuilder.DropColumn(
- name: "LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "TimeOffset",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "ValueOffset",
- table: "ChartTemplates");
-
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.",
- oldClrType: typeof(string),
- oldType: "nvarchar(450)",
- oldComment: "Name of chart, for example 'Temperature' it should represent measurement type.");
-
- migrationBuilder.CreateTable(
- name: "Biases",
- columns: table => new
- {
- ID = table.Column(type: "int", nullable: false)
- .Annotation("SqlServer:Identity", "1, 1"),
- ChartTemplateID = table.Column(type: "int", nullable: false),
- DeviceID = table.Column(type: "int", nullable: false),
- LocationID = table.Column(type: "int", nullable: false),
- TimeOffset = table.Column(type: "int", nullable: false),
- ValueOffset = table.Column(type: "float", nullable: false),
- ValueSpread = table.Column(type: "float", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Biases", x => x.ID);
- table.ForeignKey(
- name: "FK_Biases_ChartTemplates_ChartTemplateID",
- column: x => x.ChartTemplateID,
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_Biases_Devices_DeviceID",
- column: x => x.DeviceID,
- principalTable: "Devices",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_Biases_Locations_LocationID",
- column: x => x.LocationID,
- principalTable: "Locations",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_Biases_ChartTemplateID",
- table: "Biases",
- column: "ChartTemplateID");
-
- migrationBuilder.CreateIndex(
- name: "IX_Biases_DeviceID",
- table: "Biases",
- column: "DeviceID");
-
- migrationBuilder.CreateIndex(
- name: "IX_Biases_LocationID",
- table: "Biases",
- column: "LocationID");
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.Designer.cs
deleted file mode 100644
index 3133b59..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.Designer.cs
+++ /dev/null
@@ -1,175 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116141730_Offset added")]
- partial class Offsetadded
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("ID");
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.cs
deleted file mode 100644
index 6f0b8df..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116141730_Offset added.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Offsetadded : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_ChartTemplates_Locations_LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropIndex(
- name: "IX_ChartTemplates_LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "LocationID",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "TimeOffset",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "ValueOffset",
- table: "ChartTemplates");
-
- migrationBuilder.CreateTable(
- name: "Offsets",
- columns: table => new
- {
- ID = table.Column(type: "int", nullable: false)
- .Annotation("SqlServer:Identity", "1, 1"),
- Time = table.Column(type: "int", nullable: false),
- Value = table.Column(type: "float", nullable: false),
- LocationID = table.Column(type: "int", nullable: false),
- ChartTemplateID = table.Column(type: "int", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Offsets", x => x.ID);
- table.ForeignKey(
- name: "FK_Offsets_ChartTemplates_ChartTemplateID",
- column: x => x.ChartTemplateID,
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_Offsets_Locations_LocationID",
- column: x => x.LocationID,
- principalTable: "Locations",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_Offsets_ChartTemplateID",
- table: "Offsets",
- column: "ChartTemplateID");
-
- migrationBuilder.CreateIndex(
- name: "IX_Offsets_LocationID",
- table: "Offsets",
- column: "LocationID");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "Offsets");
-
- migrationBuilder.AddColumn(
- name: "LocationID",
- table: "ChartTemplates",
- type: "int",
- nullable: false,
- defaultValue: 0);
-
- migrationBuilder.AddColumn(
- name: "TimeOffset",
- table: "ChartTemplates",
- type: "int",
- nullable: false,
- defaultValue: 0,
- comment: "Move chart to the right or left side.");
-
- migrationBuilder.AddColumn(
- name: "ValueOffset",
- table: "ChartTemplates",
- type: "float",
- nullable: false,
- defaultValue: 0.0,
- comment: "Boost all values of this chart.");
-
- migrationBuilder.CreateIndex(
- name: "IX_ChartTemplates_LocationID",
- table: "ChartTemplates",
- column: "LocationID");
-
- migrationBuilder.AddForeignKey(
- name: "FK_ChartTemplates_Locations_LocationID",
- table: "ChartTemplates",
- column: "LocationID",
- principalTable: "Locations",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.Designer.cs
deleted file mode 100644
index a3a28cb..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.Designer.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116144048_Location-name-unique")]
- partial class Locationnameunique
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.cs
deleted file mode 100644
index eae6c83..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116144048_Location-name-unique.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Locationnameunique : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "Locations",
- type: "nvarchar(450)",
- nullable: false,
- oldClrType: typeof(string),
- oldType: "nvarchar(max)");
-
- migrationBuilder.CreateIndex(
- name: "IX_Locations_Name",
- table: "Locations",
- column: "Name",
- unique: true);
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_Locations_Name",
- table: "Locations");
-
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "Locations",
- type: "nvarchar(max)",
- nullable: false,
- oldClrType: typeof(string),
- oldType: "nvarchar(450)");
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.Designer.cs
deleted file mode 100644
index 96e2981..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.Designer.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116201654_Unit-for-chart")]
- partial class Unitforchart
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.Property("Unit")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Represents unit of Y axis");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices", t =>
- {
- t.HasCheckConstraint("CK_Device_Spread_Range", "Spread >= 0 AND Spread <= 100");
- });
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.cs
deleted file mode 100644
index 009a621..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116201654_Unit-for-chart.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Unitforchart : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AddColumn(
- name: "Unit",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- defaultValue: "",
- comment: "Represents unit of Y axis");
-
- migrationBuilder.AddCheckConstraint(
- name: "CK_Device_Spread_Range",
- table: "Devices",
- sql: "Spread >= 0 AND Spread <= 100");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropCheckConstraint(
- name: "CK_Device_Spread_Range",
- table: "Devices");
-
- migrationBuilder.DropColumn(
- name: "Unit",
- table: "ChartTemplates");
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.Designer.cs
deleted file mode 100644
index 4516dad..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.Designer.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116204452_Removed-unique-chart-name")]
- partial class Removeduniquechartname
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Name of chart, for example 'Temperature' it should represent measurement type.");
-
- b.Property("Unit")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Represents unit of Y axis");
-
- b.HasKey("ID");
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices", t =>
- {
- t.HasCheckConstraint("CK_Device_Spread_Range", "Spread >= 0 AND Spread <= 100");
- });
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.cs
deleted file mode 100644
index fd0009a..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116204452_Removed-unique-chart-name.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Removeduniquechartname : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropIndex(
- name: "IX_ChartTemplates_Name",
- table: "ChartTemplates");
-
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.",
- oldClrType: typeof(string),
- oldType: "nvarchar(450)",
- oldComment: "Name of chart, for example 'Temperature' it should represent measurement type.");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.AlterColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(450)",
- nullable: false,
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.",
- oldClrType: typeof(string),
- oldType: "nvarchar(max)",
- oldComment: "Name of chart, for example 'Temperature' it should represent measurement type.");
-
- migrationBuilder.CreateIndex(
- name: "IX_ChartTemplates_Name",
- table: "ChartTemplates",
- column: "Name",
- unique: true);
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.Designer.cs
deleted file mode 100644
index 9b73e53..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.Designer.cs
+++ /dev/null
@@ -1,212 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116205410_Moved-measurement-type-outside-chart")]
- partial class Movedmeasurementtypeoutsidechart
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.HasKey("ID");
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices", t =>
- {
- t.HasCheckConstraint("CK_Device_Spread_Range", "Spread >= 0 AND Spread <= 100");
- });
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Measurement", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Name of measurement, for example 'Air Temperature'.");
-
- b.Property("Unit")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Unit");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Measurement");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Measurement", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.cs
deleted file mode 100644
index f45a25e..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205410_Moved-measurement-type-outside-chart.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Movedmeasurementtypeoutsidechart : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropColumn(
- name: "Name",
- table: "ChartTemplates");
-
- migrationBuilder.DropColumn(
- name: "Unit",
- table: "ChartTemplates");
-
- migrationBuilder.CreateTable(
- name: "Measurement",
- columns: table => new
- {
- ID = table.Column(type: "int", nullable: false)
- .Annotation("SqlServer:Identity", "1, 1"),
- Name = table.Column(type: "nvarchar(max)", nullable: false, comment: "Name of measurement, for example 'Air Temperature'."),
- Unit = table.Column(type: "nvarchar(max)", nullable: false, comment: "Unit"),
- ChartTemplateID = table.Column(type: "int", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Measurement", x => x.ID);
- table.ForeignKey(
- name: "FK_Measurement_ChartTemplates_ChartTemplateID",
- column: x => x.ChartTemplateID,
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_Measurement_ChartTemplateID",
- table: "Measurement",
- column: "ChartTemplateID");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "Measurement");
-
- migrationBuilder.AddColumn(
- name: "Name",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- defaultValue: "",
- comment: "Name of chart, for example 'Temperature' it should represent measurement type.");
-
- migrationBuilder.AddColumn(
- name: "Unit",
- table: "ChartTemplates",
- type: "nvarchar(max)",
- nullable: false,
- defaultValue: "",
- comment: "Represents unit of Y axis");
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.Designer.cs
deleted file mode 100644
index cabcf2e..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.Designer.cs
+++ /dev/null
@@ -1,212 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116205605_Moved-measurement-type-outside-chart-2")]
- partial class Movedmeasurementtypeoutsidechart2
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.HasKey("ID");
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices", t =>
- {
- t.HasCheckConstraint("CK_Device_Spread_Range", "Spread >= 0 AND Spread <= 100");
- });
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(450)");
-
- b.HasKey("ID");
-
- b.HasIndex("Name")
- .IsUnique();
-
- b.ToTable("Locations");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Measurement", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Name of measurement, for example 'Air Temperature'.");
-
- b.Property("Unit")
- .IsRequired()
- .HasColumnType("nvarchar(max)")
- .HasComment("Unit");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Measurements");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("LocationID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("int");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.HasIndex("LocationID");
-
- b.ToTable("Offsets");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("ChartTemplateID")
- .HasColumnType("int");
-
- b.Property("Time")
- .HasColumnType("time");
-
- b.Property("Value")
- .HasColumnType("float");
-
- b.HasKey("ID");
-
- b.HasIndex("ChartTemplateID");
-
- b.ToTable("Samples");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Measurement", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Offset", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.HasOne("Emulators.Domain.Models.Location", "Location")
- .WithMany()
- .HasForeignKey("LocationID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
-
- b.Navigation("Location");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Sample", b =>
- {
- b.HasOne("Emulators.Domain.Models.ChartTemplate", "ChartTemplate")
- .WithMany()
- .HasForeignKey("ChartTemplateID")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("ChartTemplate");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.cs
deleted file mode 100644
index c5a471b..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205605_Moved-measurement-type-outside-chart-2.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- ///
- public partial class Movedmeasurementtypeoutsidechart2 : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_Measurement_ChartTemplates_ChartTemplateID",
- table: "Measurement");
-
- migrationBuilder.DropPrimaryKey(
- name: "PK_Measurement",
- table: "Measurement");
-
- migrationBuilder.RenameTable(
- name: "Measurement",
- newName: "Measurements");
-
- migrationBuilder.RenameIndex(
- name: "IX_Measurement_ChartTemplateID",
- table: "Measurements",
- newName: "IX_Measurements_ChartTemplateID");
-
- migrationBuilder.AddPrimaryKey(
- name: "PK_Measurements",
- table: "Measurements",
- column: "ID");
-
- migrationBuilder.AddForeignKey(
- name: "FK_Measurements_ChartTemplates_ChartTemplateID",
- table: "Measurements",
- column: "ChartTemplateID",
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropForeignKey(
- name: "FK_Measurements_ChartTemplates_ChartTemplateID",
- table: "Measurements");
-
- migrationBuilder.DropPrimaryKey(
- name: "PK_Measurements",
- table: "Measurements");
-
- migrationBuilder.RenameTable(
- name: "Measurements",
- newName: "Measurement");
-
- migrationBuilder.RenameIndex(
- name: "IX_Measurements_ChartTemplateID",
- table: "Measurement",
- newName: "IX_Measurement_ChartTemplateID");
-
- migrationBuilder.AddPrimaryKey(
- name: "PK_Measurement",
- table: "Measurement",
- column: "ID");
-
- migrationBuilder.AddForeignKey(
- name: "FK_Measurement_ChartTemplates_ChartTemplateID",
- table: "Measurement",
- column: "ChartTemplateID",
- principalTable: "ChartTemplates",
- principalColumn: "ID",
- onDelete: ReferentialAction.Cascade);
- }
- }
-}
diff --git a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205842_measurement-doesnt-require-chart.Designer.cs b/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205842_measurement-doesnt-require-chart.Designer.cs
deleted file mode 100644
index f852f74..0000000
--- a/Services/Emulators/Emulators.Infrastructure/Migrations/20251116205842_measurement-doesnt-require-chart.Designer.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-//
-using System;
-using Emulators.Infrastructure.Database;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace Emulators.Infrastructure.Migrations
-{
- [DbContext(typeof(EmulatorsDBContext))]
- [Migration("20251116205842_measurement-doesnt-require-chart")]
- partial class measurementdoesntrequirechart
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder
- .HasAnnotation("ProductVersion", "9.0.11")
- .HasAnnotation("Relational:MaxIdentifierLength", 128);
-
- SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
-
- modelBuilder.Entity("Emulators.Domain.Models.ChartTemplate", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.HasKey("ID");
-
- b.ToTable("ChartTemplates");
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Device", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property("DeviceNumber")
- .HasColumnType("uniqueidentifier")
- .HasComment("This is unique name for device");
-
- b.Property("Spread")
- .HasColumnType("float")
- .HasComment("Measurement value spread, expressed in percentage.");
-
- b.HasKey("ID");
-
- b.HasIndex("DeviceNumber")
- .IsUnique();
-
- b.ToTable("Devices", t =>
- {
- t.HasCheckConstraint("CK_Device_Spread_Range", "Spread >= 0 AND Spread <= 100");
- });
- });
-
- modelBuilder.Entity("Emulators.Domain.Models.Location", b =>
- {
- b.Property("ID")
- .ValueGeneratedOnAdd()
- .HasColumnType("int");
-
- SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID"));
-
- b.Property