diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml new file mode 100644 index 0000000..73261a0 --- /dev/null +++ b/.gitea/workflows/test.yaml @@ -0,0 +1,38 @@ +name: Unit tests +run-name: ${{ gitea.actor }} is testing +on: push + +jobs: + test: + runs-on: ubuntu-latest + container: node + + # Service containers to run with `runner-job` + services: + # Label used to access the service container + postgres: + # Docker Hub image + image: postgres + # Provide the password for postgres + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5442:5432 + + steps: + - name: Setup dotnet + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + - name: Check out repository code + uses: actions/checkout@v4 + - name: Run integration tests + run: dotnet test DD.Persistence.IntegrationTests diff --git a/DD.Persistence.API/DependencyInjection.cs b/DD.Persistence.API/DependencyInjection.cs index b5068cc..b0a71d5 100644 --- a/DD.Persistence.API/DependencyInjection.cs +++ b/DD.Persistence.API/DependencyInjection.cs @@ -16,12 +16,12 @@ namespace DD.Persistence.API; public static class DependencyInjection { - public static void MapsterSetup() - { - TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() - .Ignore(dest => dest.System, dest => dest.SystemId); - } + //public static void MapsterSetup() + //{ + // TypeAdapterConfig.GlobalSettings.Default.Config + // .ForType() + // .Ignore(dest => dest.System, dest => dest.SystemId); + //} public static void AddSwagger(this IServiceCollection services, IConfiguration configuration) { services.AddSwaggerGen(c => diff --git a/DD.Persistence.API/Startup.cs b/DD.Persistence.API/Startup.cs index 09e4a21..c6c44a4 100644 --- a/DD.Persistence.API/Startup.cs +++ b/DD.Persistence.API/Startup.cs @@ -27,7 +27,7 @@ public class Startup services.AddMemoryCache(); services.AddServices(); - DependencyInjection.MapsterSetup(); + //DependencyInjection.MapsterSetup(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) diff --git a/DD.Persistence.App/Program.cs b/DD.Persistence.App/Program.cs index 2477352..4a02472 100644 --- a/DD.Persistence.App/Program.cs +++ b/DD.Persistence.App/Program.cs @@ -1,5 +1,6 @@ using DD.Persistence.API; +using System.Globalization; namespace DD.Persistence.App; @@ -7,7 +8,8 @@ public class Program { public static void Main(string[] args) { - + CultureInfo uiCulture = CultureInfo.CurrentUICulture; + CultureInfo.CurrentUICulture = new CultureInfo("en-EN"); var host = CreateHostBuilder(args).Build(); Startup.BeforeRunHandler(host); host.Run(); diff --git a/DD.Persistence.App/appsettings.Tests.json b/DD.Persistence.App/appsettings.Tests.json index 6201a8f..72c43d3 100644 --- a/DD.Persistence.App/appsettings.Tests.json +++ b/DD.Persistence.App/appsettings.Tests.json @@ -1,9 +1,10 @@ { "DbConnection": { - "Host": "localhost", + "Host": "postgres", "Port": 5432, + "Database": "persistence", "Username": "postgres", - "Password": "q" + "Password": "postgres" }, "NeedUseKeyCloak": false, "AuthUser": { diff --git a/DD.Persistence.App/appsettings.json b/DD.Persistence.App/appsettings.json index 9b3a54f..4e263b2 100644 --- a/DD.Persistence.App/appsettings.json +++ b/DD.Persistence.App/appsettings.json @@ -6,7 +6,7 @@ } }, "ConnectionStrings": { - "DefaultConnection": "Host=localhost;Database=persistence;Username=postgres;Password=q;Persist Security Info=True" + "DefaultConnection": "Host=localhost;Port=5432;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True" }, "AllowedHosts": "*", "NeedUseKeyCloak": false, diff --git a/DD.Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs b/DD.Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs deleted file mode 100644 index e9f5b95..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241118052225_SetpointMigration.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - /// - public partial class SetpointMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Setpoint", - columns: table => new - { - Key = table.Column(type: "uuid", nullable: false, comment: "Ключ"), - Created = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата изменения уставки"), - Value = table.Column(type: "jsonb", nullable: false, comment: "Значение уставки"), - IdUser = table.Column(type: "uuid", nullable: false, comment: "Id автора последнего изменения") - }, - constraints: table => - { - table.PrimaryKey("PK_Setpoint", x => new { x.Key, x.Created }); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Setpoint"); - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.Designer.cs b/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.Designer.cs deleted file mode 100644 index 7fa7567..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.Designer.cs +++ /dev/null @@ -1,169 +0,0 @@ -// -using System; -using System.Collections.Generic; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using DD.Persistence.Database.Model; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - [DbContext(typeof(PersistenceDbContext))] - [Migration("20241126071115_Add_ChangeLog")] - partial class Add_ChangeLog - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseCollation("Russian_Russia.1251") - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("DD.Persistence.Database.Model.ChangeLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid") - .HasColumnName("Id"); - - b.Property("Creation") - .HasColumnType("timestamp with time zone") - .HasColumnName("Creation"); - - b.Property("DepthEnd") - .HasColumnType("double precision") - .HasColumnName("DepthEnd"); - - b.Property("DepthStart") - .HasColumnType("double precision") - .HasColumnName("DepthStart"); - - b.Property("IdAuthor") - .HasColumnType("uuid") - .HasColumnName("IdAuthor"); - - b.Property("IdDiscriminator") - .HasColumnType("uuid") - .HasColumnName("IdDiscriminator"); - - b.Property("IdEditor") - .HasColumnType("uuid") - .HasColumnName("IdEditor"); - - b.Property("IdNext") - .HasColumnType("uuid") - .HasColumnName("IdNext"); - - b.Property("IdSection") - .HasColumnType("uuid") - .HasColumnName("IdSection"); - - b.Property("Obsolete") - .HasColumnType("timestamp with time zone") - .HasColumnName("Obsolete"); - - b.Property>("Value") - .IsRequired() - .HasColumnType("jsonb") - .HasColumnName("Value"); - - b.HasKey("Id"); - - b.ToTable("ChangeLog"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b => - { - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date"); - - b.Property("AxialLoad") - .HasColumnType("double precision") - .HasColumnName("axialLoad"); - - b.Property("BitDepth") - .HasColumnType("double precision") - .HasColumnName("bitDepth"); - - b.Property("BlockPosition") - .HasColumnType("double precision") - .HasColumnName("blockPosition"); - - b.Property("BlockSpeed") - .HasColumnType("double precision") - .HasColumnName("blockSpeed"); - - b.Property("Flow") - .HasColumnType("double precision") - .HasColumnName("flow"); - - b.Property("HookWeight") - .HasColumnType("double precision") - .HasColumnName("hookWeight"); - - b.Property("IdFeedRegulator") - .HasColumnType("integer") - .HasColumnName("idFeedRegulator"); - - b.Property("Mode") - .HasColumnType("integer") - .HasColumnName("mode"); - - b.Property("Mse") - .HasColumnType("double precision") - .HasColumnName("mse"); - - b.Property("MseState") - .HasColumnType("smallint") - .HasColumnName("mseState"); - - b.Property("Pressure") - .HasColumnType("double precision") - .HasColumnName("pressure"); - - b.Property("Pump0Flow") - .HasColumnType("double precision") - .HasColumnName("pump0Flow"); - - b.Property("Pump1Flow") - .HasColumnType("double precision") - .HasColumnName("pump1Flow"); - - b.Property("Pump2Flow") - .HasColumnType("double precision") - .HasColumnName("pump2Flow"); - - b.Property("RotorSpeed") - .HasColumnType("double precision") - .HasColumnName("rotorSpeed"); - - b.Property("RotorTorque") - .HasColumnType("double precision") - .HasColumnName("rotorTorque"); - - b.Property("User") - .HasColumnType("text") - .HasColumnName("user"); - - b.Property("WellDepth") - .HasColumnType("double precision") - .HasColumnName("wellDepth"); - - b.HasKey("Date"); - - b.ToTable("DataSaub"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs b/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs deleted file mode 100644 index e001cfe..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241126071115_Add_ChangeLog.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - /// - public partial class Add_ChangeLog : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ChangeLog", - columns: table => new - { - Id = table.Column(type: "uuid", nullable: false), - IdDiscriminator = table.Column(type: "uuid", nullable: false), - IdAuthor = table.Column(type: "uuid", nullable: false), - IdEditor = table.Column(type: "uuid", nullable: true), - Creation = table.Column(type: "timestamp with time zone", nullable: false), - Obsolete = table.Column(type: "timestamp with time zone", nullable: true), - IdNext = table.Column(type: "uuid", nullable: true), - DepthStart = table.Column(type: "double precision", nullable: false), - DepthEnd = table.Column(type: "double precision", nullable: false), - IdSection = table.Column(type: "uuid", nullable: false), - Value = table.Column>(type: "jsonb", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ChangeLog", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ChangeLog"); - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.Designer.cs b/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.Designer.cs deleted file mode 100644 index a43cb6a..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.Designer.cs +++ /dev/null @@ -1,162 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using DD.Persistence.Database.Model; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - [DbContext(typeof(PersistencePostgresContext))] - [Migration("20241126100631_Init")] - partial class Init - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseCollation("Russian_Russia.1251") - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b => - { - b.Property("IdDiscriminator") - .HasColumnType("uuid") - .HasComment("Дискриминатор ссылка на тип сохраняемых данных"); - - b.Property("Timestamp") - .HasColumnType("timestamp with time zone") - .HasComment("Отметка времени, строго в UTC"); - - b.Property("Set") - .IsRequired() - .HasColumnType("jsonb") - .HasComment("Набор сохраняемых данных"); - - b.HasKey("IdDiscriminator", "Timestamp"); - - b.ToTable("TimestampedSets", t => - { - t.HasComment("Общая таблица данных временных рядов"); - }); - }); - - modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b => - { - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date"); - - b.Property("AxialLoad") - .HasColumnType("double precision") - .HasColumnName("axialLoad"); - - b.Property("BitDepth") - .HasColumnType("double precision") - .HasColumnName("bitDepth"); - - b.Property("BlockPosition") - .HasColumnType("double precision") - .HasColumnName("blockPosition"); - - b.Property("BlockSpeed") - .HasColumnType("double precision") - .HasColumnName("blockSpeed"); - - b.Property("Flow") - .HasColumnType("double precision") - .HasColumnName("flow"); - - b.Property("HookWeight") - .HasColumnType("double precision") - .HasColumnName("hookWeight"); - - b.Property("IdFeedRegulator") - .HasColumnType("integer") - .HasColumnName("idFeedRegulator"); - - b.Property("Mode") - .HasColumnType("integer") - .HasColumnName("mode"); - - b.Property("Mse") - .HasColumnType("double precision") - .HasColumnName("mse"); - - b.Property("MseState") - .HasColumnType("smallint") - .HasColumnName("mseState"); - - b.Property("Pressure") - .HasColumnType("double precision") - .HasColumnName("pressure"); - - b.Property("Pump0Flow") - .HasColumnType("double precision") - .HasColumnName("pump0Flow"); - - b.Property("Pump1Flow") - .HasColumnType("double precision") - .HasColumnName("pump1Flow"); - - b.Property("Pump2Flow") - .HasColumnType("double precision") - .HasColumnName("pump2Flow"); - - b.Property("RotorSpeed") - .HasColumnType("double precision") - .HasColumnName("rotorSpeed"); - - b.Property("RotorTorque") - .HasColumnType("double precision") - .HasColumnName("rotorTorque"); - - b.Property("User") - .HasColumnType("text") - .HasColumnName("user"); - - b.Property("WellDepth") - .HasColumnType("double precision") - .HasColumnName("wellDepth"); - - b.HasKey("Date"); - - b.ToTable("DataSaub"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b => - { - b.Property("Key") - .HasColumnType("uuid") - .HasComment("Ключ"); - - b.Property("Created") - .HasColumnType("timestamp with time zone") - .HasComment("Дата создания уставки"); - - b.Property("IdUser") - .HasColumnType("integer") - .HasComment("Id автора последнего изменения"); - - b.Property("Value") - .IsRequired() - .HasColumnType("jsonb") - .HasComment("Значение уставки"); - - b.HasKey("Key", "Created"); - - b.ToTable("Setpoint"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.cs b/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.cs deleted file mode 100644 index 9bbd704..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241126100631_Init.cs +++ /dev/null @@ -1,87 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - /// - public partial class Init : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterDatabase() - .Annotation("Npgsql:PostgresExtension:adminpack", ",,"); - - migrationBuilder.CreateTable( - name: "DataSaub", - columns: table => new - { - date = table.Column(type: "timestamp with time zone", nullable: false), - mode = table.Column(type: "integer", nullable: true), - user = table.Column(type: "text", nullable: true), - wellDepth = table.Column(type: "double precision", nullable: true), - bitDepth = table.Column(type: "double precision", nullable: true), - blockPosition = table.Column(type: "double precision", nullable: true), - blockSpeed = table.Column(type: "double precision", nullable: true), - pressure = table.Column(type: "double precision", nullable: true), - axialLoad = table.Column(type: "double precision", nullable: true), - hookWeight = table.Column(type: "double precision", nullable: true), - rotorTorque = table.Column(type: "double precision", nullable: true), - rotorSpeed = table.Column(type: "double precision", nullable: true), - flow = table.Column(type: "double precision", nullable: true), - mseState = table.Column(type: "smallint", nullable: false), - idFeedRegulator = table.Column(type: "integer", nullable: false), - mse = table.Column(type: "double precision", nullable: true), - pump0Flow = table.Column(type: "double precision", nullable: true), - pump1Flow = table.Column(type: "double precision", nullable: true), - pump2Flow = table.Column(type: "double precision", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_DataSaub", x => x.date); - }); - - migrationBuilder.CreateTable( - name: "Setpoint", - columns: table => new - { - Key = table.Column(type: "uuid", nullable: false, comment: "Ключ"), - Created = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата создания уставки"), - Value = table.Column(type: "jsonb", nullable: false, comment: "Значение уставки"), - IdUser = table.Column(type: "integer", nullable: false, comment: "Id автора последнего изменения") - }, - constraints: table => - { - table.PrimaryKey("PK_Setpoint", x => new { x.Key, x.Created }); - }); - - migrationBuilder.CreateTable( - name: "TimestampedSets", - columns: table => new - { - IdDiscriminator = table.Column(type: "uuid", nullable: false, comment: "Дискриминатор ссылка на тип сохраняемых данных"), - Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Отметка времени, строго в UTC"), - Set = table.Column(type: "jsonb", nullable: false, comment: "Набор сохраняемых данных") - }, - constraints: table => - { - table.PrimaryKey("PK_TimestampedSets", x => new { x.IdDiscriminator, x.Timestamp }); - }, - comment: "Общая таблица данных временных рядов"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "DataSaub"); - - migrationBuilder.DropTable( - name: "Setpoint"); - - migrationBuilder.DropTable( - name: "TimestampedSets"); - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.Designer.cs b/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.Designer.cs deleted file mode 100644 index 2afaaa3..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.Designer.cs +++ /dev/null @@ -1,257 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using DD.Persistence.Database.Model; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - [DbContext(typeof(PersistenceDbContext))] - [Migration("20241203120141_ParameterDataMigration")] - partial class ParameterDataMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseCollation("Russian_Russia.1251") - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("DD.Persistence.Database.Entity.DrillingSystem", b => - { - b.Property("SystemId") - .ValueGeneratedOnAdd() - .HasColumnType("uuid") - .HasComment("Id системы автобурения"); - - b.Property("Description") - .HasColumnType("text") - .HasComment("Описание системы автобурения"); - - b.Property("Name") - .IsRequired() - .HasColumnType("varchar(256)") - .HasComment("Наименование системы автобурения"); - - b.HasKey("SystemId"); - - b.ToTable("DrillingSystem"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b => - { - b.Property("DiscriminatorId") - .HasColumnType("integer") - .HasComment("Дискриминатор системы"); - - b.Property("ParameterId") - .HasColumnType("integer") - .HasComment("Id параметра"); - - b.Property("Timestamp") - .HasColumnType("timestamp with time zone") - .HasComment("Временная отметка"); - - b.Property("Value") - .IsRequired() - .HasColumnType("varchar(256)") - .HasComment("Значение параметра в виде строки"); - - b.HasKey("DiscriminatorId", "ParameterId", "Timestamp"); - - b.ToTable("ParameterData"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => - { - b.Property("EventId") - .ValueGeneratedOnAdd() - .HasColumnType("uuid") - .HasComment("Id события"); - - b.Property("CategoryId") - .HasColumnType("integer") - .HasComment("Id Категории важности"); - - b.Property("Depth") - .HasColumnType("double precision") - .HasComment("Глубина забоя"); - - b.Property("MessageText") - .IsRequired() - .HasColumnType("varchar(512)") - .HasComment("Текст сообщения"); - - b.Property("SystemId") - .HasColumnType("uuid") - .HasComment("Id системы автобурения, к которой относится сообщение"); - - b.Property("Timestamp") - .HasColumnType("timestamp with time zone") - .HasComment("Дата возникновения"); - - b.Property("UserId") - .HasColumnType("uuid") - .HasComment("Id пользователя за пультом бурильщика"); - - b.HasKey("EventId"); - - b.HasIndex("SystemId"); - - b.ToTable("TechMessage"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedSet", b => - { - b.Property("IdDiscriminator") - .HasColumnType("uuid") - .HasComment("Дискриминатор ссылка на тип сохраняемых данных"); - - b.Property("Timestamp") - .HasColumnType("timestamp with time zone") - .HasComment("Отметка времени, строго в UTC"); - - b.Property("Set") - .IsRequired() - .HasColumnType("jsonb") - .HasComment("Набор сохраняемых данных"); - - b.HasKey("IdDiscriminator", "Timestamp"); - - b.ToTable("TimestampedSets", t => - { - t.HasComment("Общая таблица данных временных рядов"); - }); - }); - - modelBuilder.Entity("DD.Persistence.Database.Model.DataSaub", b => - { - b.Property("Date") - .HasColumnType("timestamp with time zone") - .HasColumnName("date"); - - b.Property("AxialLoad") - .HasColumnType("double precision") - .HasColumnName("axialLoad"); - - b.Property("BitDepth") - .HasColumnType("double precision") - .HasColumnName("bitDepth"); - - b.Property("BlockPosition") - .HasColumnType("double precision") - .HasColumnName("blockPosition"); - - b.Property("BlockSpeed") - .HasColumnType("double precision") - .HasColumnName("blockSpeed"); - - b.Property("Flow") - .HasColumnType("double precision") - .HasColumnName("flow"); - - b.Property("HookWeight") - .HasColumnType("double precision") - .HasColumnName("hookWeight"); - - b.Property("IdFeedRegulator") - .HasColumnType("integer") - .HasColumnName("idFeedRegulator"); - - b.Property("Mode") - .HasColumnType("integer") - .HasColumnName("mode"); - - b.Property("Mse") - .HasColumnType("double precision") - .HasColumnName("mse"); - - b.Property("MseState") - .HasColumnType("smallint") - .HasColumnName("mseState"); - - b.Property("Pressure") - .HasColumnType("double precision") - .HasColumnName("pressure"); - - b.Property("Pump0Flow") - .HasColumnType("double precision") - .HasColumnName("pump0Flow"); - - b.Property("Pump1Flow") - .HasColumnType("double precision") - .HasColumnName("pump1Flow"); - - b.Property("Pump2Flow") - .HasColumnType("double precision") - .HasColumnName("pump2Flow"); - - b.Property("RotorSpeed") - .HasColumnType("double precision") - .HasColumnName("rotorSpeed"); - - b.Property("RotorTorque") - .HasColumnType("double precision") - .HasColumnName("rotorTorque"); - - b.Property("User") - .HasColumnType("text") - .HasColumnName("user"); - - b.Property("WellDepth") - .HasColumnType("double precision") - .HasColumnName("wellDepth"); - - b.HasKey("Date"); - - b.ToTable("DataSaub"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b => - { - b.Property("Key") - .HasColumnType("uuid") - .HasComment("Ключ"); - - b.Property("Created") - .HasColumnType("timestamp with time zone") - .HasComment("Дата создания уставки"); - - b.Property("IdUser") - .HasColumnType("uuid") - .HasComment("Id автора последнего изменения"); - - b.Property("Value") - .IsRequired() - .HasColumnType("jsonb") - .HasComment("Значение уставки"); - - b.HasKey("Key", "Created"); - - b.ToTable("Setpoint"); - }); - - modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => - { - b.HasOne("DD.Persistence.Database.Entity.DrillingSystem", "System") - .WithMany() - .HasForeignKey("SystemId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("System"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs b/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs deleted file mode 100644 index 830f5b9..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241203120141_ParameterDataMigration.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations -{ - /// - public partial class ParameterDataMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ParameterData", - columns: table => new - { - DiscriminatorId = table.Column(type: "uuid", nullable: false, comment: "Дискриминатор системы"), - ParameterId = table.Column(type: "integer", nullable: false, comment: "Id параметра"), - Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Временная отметка"), - Value = table.Column(type: "varchar(256)", nullable: false, comment: "Значение параметра в виде строки") - }, - constraints: table => - { - table.PrimaryKey("PK_ParameterData", x => new { x.DiscriminatorId, x.ParameterId, x.Timestamp }); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ParameterData"); - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs b/DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs deleted file mode 100644 index 04be23a..0000000 --- a/DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace DD.Persistence.Database.Postgres.Migrations.PersistencePostgres -{ - /// - public partial class TechMessageMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "DataSourceSystem", - columns: table => new - { - SystemId = table.Column(type: "uuid", nullable: false, comment: "Id системы - источника данных"), - Name = table.Column(type: "varchar(256)", nullable: false, comment: "Наименование системы - источника данных"), - Description = table.Column(type: "text", nullable: true, comment: "Описание системы - источника данных") - }, - constraints: table => - { - table.PrimaryKey("PK_DataSourceSystem", x => x.SystemId); - }); - - migrationBuilder.CreateTable( - name: "TechMessage", - columns: table => new - { - EventId = table.Column(type: "uuid", nullable: false, comment: "Id события"), - CategoryId = table.Column(type: "integer", nullable: false, comment: "Id Категории важности"), - Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата возникновения"), - Text = table.Column(type: "varchar(512)", nullable: false, comment: "Текст сообщения"), - SystemId = table.Column(type: "uuid", nullable: false, comment: "Id системы, к которой относится сообщение"), - EventState = table.Column(type: "integer", nullable: false, comment: "Статус события") - }, - constraints: table => - { - table.PrimaryKey("PK_TechMessage", x => x.EventId); - table.ForeignKey( - name: "FK_TechMessage_DataSourceSystem_SystemId", - column: x => x.SystemId, - principalTable: "DataSourceSystem", - principalColumn: "SystemId", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_TechMessage_SystemId", - table: "TechMessage", - column: "SystemId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "TechMessage"); - - migrationBuilder.DropTable( - name: "DataSourceSystem"); - } - } -} diff --git a/DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.Designer.cs b/DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.Designer.cs similarity index 95% rename from DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.Designer.cs rename to DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.Designer.cs index 1e28de3..02a25ce 100644 --- a/DD.Persistence.Database.Postgres/Migrations/20241212041758_TechMessageMigration.Designer.cs +++ b/DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.Designer.cs @@ -1,51 +1,49 @@ // using System; +using DD.Persistence.Database.Model; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using DD.Persistence.Database.Model; #nullable disable -namespace DD.Persistence.Database.Postgres.Migrations.PersistencePostgres +namespace DD.Persistence.Database.Postgres.Migrations { [DbContext(typeof(PersistencePostgresContext))] - [Migration("20241212041758_TechMessageMigration")] - partial class TechMessageMigration + [Migration("20241220062251_Init")] + partial class Init { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .UseCollation("Russian_Russia.1251") .HasAnnotation("ProductVersion", "8.0.10") .HasAnnotation("Relational:MaxIdentifierLength", 63); - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("DD.Persistence.Database.Entity.DrillingSystem", b => + modelBuilder.Entity("DD.Persistence.Database.Entity.DataSourceSystem", b => { b.Property("SystemId") .ValueGeneratedOnAdd() .HasColumnType("uuid") - .HasComment("Id системы автобурения"); + .HasComment("Id системы - источника данных"); b.Property("Description") .HasColumnType("text") - .HasComment("Описание системы автобурения"); + .HasComment("Описание системы - источника данных"); b.Property("Name") .IsRequired() .HasColumnType("varchar(256)") - .HasComment("Наименование системы автобурения"); + .HasComment("Наименование системы - источника данных"); b.HasKey("SystemId"); - b.ToTable("DrillingSystem"); + b.ToTable("DataSourceSystem"); }); modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b => @@ -292,7 +290,7 @@ namespace DD.Persistence.Database.Postgres.Migrations.PersistencePostgres modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b => { - b.HasOne("DD.Persistence.Database.Entity.DrillingSystem", "System") + b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System") .WithMany() .HasForeignKey("SystemId") .OnDelete(DeleteBehavior.Cascade) diff --git a/DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.cs b/DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.cs new file mode 100644 index 0000000..03a8c43 --- /dev/null +++ b/DD.Persistence.Database.Postgres/Migrations/20241220062251_Init.cs @@ -0,0 +1,172 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DD.Persistence.Database.Postgres.Migrations +{ + /// + public partial class Init : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ChangeLog", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false, comment: "Ключ записи"), + IdDiscriminator = table.Column(type: "uuid", nullable: false, comment: "Дискриминатор таблицы"), + IdAuthor = table.Column(type: "uuid", nullable: false, comment: "Автор изменения"), + IdEditor = table.Column(type: "uuid", nullable: true, comment: "Редактор"), + Creation = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата создания записи"), + Obsolete = table.Column(type: "timestamp with time zone", nullable: true, comment: "Дата устаревания (например при удалении)"), + IdNext = table.Column(type: "uuid", nullable: true, comment: "Id заменяющей записи"), + DepthStart = table.Column(type: "double precision", nullable: false, comment: "Глубина забоя на дату начала интервала"), + DepthEnd = table.Column(type: "double precision", nullable: false, comment: "Глубина забоя на дату окончания интервала"), + IdSection = table.Column(type: "uuid", nullable: false, comment: "Ключ секции"), + Value = table.Column(type: "jsonb", nullable: false, comment: "Значение") + }, + constraints: table => + { + table.PrimaryKey("PK_ChangeLog", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "DataSaub", + columns: table => new + { + date = table.Column(type: "timestamp with time zone", nullable: false), + mode = table.Column(type: "integer", nullable: true), + user = table.Column(type: "text", nullable: true), + wellDepth = table.Column(type: "double precision", nullable: true), + bitDepth = table.Column(type: "double precision", nullable: true), + blockPosition = table.Column(type: "double precision", nullable: true), + blockSpeed = table.Column(type: "double precision", nullable: true), + pressure = table.Column(type: "double precision", nullable: true), + axialLoad = table.Column(type: "double precision", nullable: true), + hookWeight = table.Column(type: "double precision", nullable: true), + rotorTorque = table.Column(type: "double precision", nullable: true), + rotorSpeed = table.Column(type: "double precision", nullable: true), + flow = table.Column(type: "double precision", nullable: true), + mseState = table.Column(type: "smallint", nullable: false), + idFeedRegulator = table.Column(type: "integer", nullable: false), + mse = table.Column(type: "double precision", nullable: true), + pump0Flow = table.Column(type: "double precision", nullable: true), + pump1Flow = table.Column(type: "double precision", nullable: true), + pump2Flow = table.Column(type: "double precision", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DataSaub", x => x.date); + }); + + migrationBuilder.CreateTable( + name: "DataSourceSystem", + columns: table => new + { + SystemId = table.Column(type: "uuid", nullable: false, comment: "Id системы - источника данных"), + Name = table.Column(type: "varchar(256)", nullable: false, comment: "Наименование системы - источника данных"), + Description = table.Column(type: "text", nullable: true, comment: "Описание системы - источника данных") + }, + constraints: table => + { + table.PrimaryKey("PK_DataSourceSystem", x => x.SystemId); + }); + + migrationBuilder.CreateTable( + name: "ParameterData", + columns: table => new + { + DiscriminatorId = table.Column(type: "uuid", nullable: false, comment: "Дискриминатор системы"), + ParameterId = table.Column(type: "integer", nullable: false, comment: "Id параметра"), + Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Временная отметка"), + Value = table.Column(type: "varchar(256)", nullable: false, comment: "Значение параметра в виде строки") + }, + constraints: table => + { + table.PrimaryKey("PK_ParameterData", x => new { x.DiscriminatorId, x.ParameterId, x.Timestamp }); + }); + + migrationBuilder.CreateTable( + name: "Setpoint", + columns: table => new + { + Key = table.Column(type: "uuid", nullable: false, comment: "Ключ"), + Created = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата создания уставки"), + Value = table.Column(type: "jsonb", nullable: false, comment: "Значение уставки"), + IdUser = table.Column(type: "uuid", nullable: false, comment: "Id автора последнего изменения") + }, + constraints: table => + { + table.PrimaryKey("PK_Setpoint", x => new { x.Key, x.Created }); + }); + + migrationBuilder.CreateTable( + name: "TimestampedSets", + columns: table => new + { + IdDiscriminator = table.Column(type: "uuid", nullable: false, comment: "Дискриминатор ссылка на тип сохраняемых данных"), + Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Отметка времени, строго в UTC"), + Set = table.Column(type: "jsonb", nullable: false, comment: "Набор сохраняемых данных") + }, + constraints: table => + { + table.PrimaryKey("PK_TimestampedSets", x => new { x.IdDiscriminator, x.Timestamp }); + }, + comment: "Общая таблица данных временных рядов"); + + migrationBuilder.CreateTable( + name: "TechMessage", + columns: table => new + { + EventId = table.Column(type: "uuid", nullable: false, comment: "Id события"), + CategoryId = table.Column(type: "integer", nullable: false, comment: "Id Категории важности"), + Timestamp = table.Column(type: "timestamp with time zone", nullable: false, comment: "Дата возникновения"), + Text = table.Column(type: "varchar(512)", nullable: false, comment: "Текст сообщения"), + SystemId = table.Column(type: "uuid", nullable: false, comment: "Id системы, к которой относится сообщение"), + EventState = table.Column(type: "integer", nullable: false, comment: "Статус события") + }, + constraints: table => + { + table.PrimaryKey("PK_TechMessage", x => x.EventId); + table.ForeignKey( + name: "FK_TechMessage_DataSourceSystem_SystemId", + column: x => x.SystemId, + principalTable: "DataSourceSystem", + principalColumn: "SystemId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_TechMessage_SystemId", + table: "TechMessage", + column: "SystemId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ChangeLog"); + + migrationBuilder.DropTable( + name: "DataSaub"); + + migrationBuilder.DropTable( + name: "ParameterData"); + + migrationBuilder.DropTable( + name: "Setpoint"); + + migrationBuilder.DropTable( + name: "TechMessage"); + + migrationBuilder.DropTable( + name: "TimestampedSets"); + + migrationBuilder.DropTable( + name: "DataSourceSystem"); + } + } +} diff --git a/DD.Persistence.Database.Postgres/Migrations/PersistencePostgresContextModelSnapshot.cs b/DD.Persistence.Database.Postgres/Migrations/PersistencePostgresContextModelSnapshot.cs index a475f75..4c66e90 100644 --- a/DD.Persistence.Database.Postgres/Migrations/PersistencePostgresContextModelSnapshot.cs +++ b/DD.Persistence.Database.Postgres/Migrations/PersistencePostgresContextModelSnapshot.cs @@ -1,10 +1,10 @@ // using System; +using DD.Persistence.Database.Model; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using DD.Persistence.Database.Model; #nullable disable @@ -17,11 +17,9 @@ namespace DD.Persistence.Database.Postgres.Migrations { #pragma warning disable 612, 618 modelBuilder - .UseCollation("Russian_Russia.1251") .HasAnnotation("ProductVersion", "8.0.10") .HasAnnotation("Relational:MaxIdentifierLength", 63); - NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, "adminpack"); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); modelBuilder.Entity("DD.Persistence.Database.Entity.DataSourceSystem", b => diff --git a/DD.Persistence.Database.Postgres/PersistencePostgresContext.cs b/DD.Persistence.Database.Postgres/PersistencePostgresContext.cs index 00f1a31..6cd8955 100644 --- a/DD.Persistence.Database.Postgres/PersistencePostgresContext.cs +++ b/DD.Persistence.Database.Postgres/PersistencePostgresContext.cs @@ -13,10 +13,6 @@ public partial class PersistencePostgresContext : PersistenceDbContext protected override void OnModelCreating(ModelBuilder modelBuilder) { - modelBuilder.HasPostgresExtension("adminpack") - .HasAnnotation("Relational:Collation", "Russian_Russia.1251"); - base.OnModelCreating(modelBuilder); - } } diff --git a/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs index 558ef33..3f1bb6c 100644 --- a/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/ChangeLogControllerTest.cs @@ -51,7 +51,7 @@ public class ChangeLogControllerTest : BaseIntegrationTest var result = await client.ClearAndAddRange(idDiscriminator, dtos, new CancellationToken()); // assert - Assert.Equal(insertedCount*2, result); + Assert.Equal(insertedCount * 2, result); } [Fact] @@ -115,11 +115,11 @@ public class ChangeLogControllerTest : BaseIntegrationTest Assert.NotNull(changeLogResult); var obsoleteDto = changeLogResult - .Where(e => e.Obsolete.HasValue) + .Where(e => e.Obsolete.HasValue) .FirstOrDefault(); var activeDto = changeLogResult - .Where(e => !e.Obsolete.HasValue) + .Where(e => !e.Obsolete.HasValue) .FirstOrDefault(); if (obsoleteDto == null || activeDto == null) diff --git a/DD.Persistence.IntegrationTests/Controllers/DataSourceSystemControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/DataSourceSystemControllerTest.cs index 12c8b95..03d5b8a 100644 --- a/DD.Persistence.IntegrationTests/Controllers/DataSourceSystemControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/DataSourceSystemControllerTest.cs @@ -9,74 +9,74 @@ using Xunit; namespace DD.Persistence.IntegrationTests.Controllers { - public class DataSourceSystemControllerTest : BaseIntegrationTest - { - private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; - private readonly IDataSourceSystemClient dataSourceSystemClient; - private readonly IMemoryCache memoryCache; - public DataSourceSystemControllerTest(WebAppFactoryFixture factory) : base(factory) - { - var scope = factory.Services.CreateScope(); - var persistenceClientFactory = scope.ServiceProvider - .GetRequiredService(); + public class DataSourceSystemControllerTest : BaseIntegrationTest + { + private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; + private readonly IDataSourceSystemClient dataSourceSystemClient; + private readonly IMemoryCache memoryCache; + public DataSourceSystemControllerTest(WebAppFactoryFixture factory) : base(factory) + { + var scope = factory.Services.CreateScope(); + var persistenceClientFactory = scope.ServiceProvider + .GetRequiredService(); - dataSourceSystemClient = persistenceClientFactory.GetDataSourceSystemClient(); - memoryCache = scope.ServiceProvider.GetRequiredService(); - } + dataSourceSystemClient = persistenceClientFactory.GetDataSourceSystemClient(); + memoryCache = scope.ServiceProvider.GetRequiredService(); + } - [Fact] - public async Task Get_returns_success() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); + [Fact] + public async Task Get_returns_success() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); - //act - var response = await dataSourceSystemClient.Get(CancellationToken.None); + //act + var response = await dataSourceSystemClient.Get(CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } - [Fact] - public async Task Get_AfterSave_returns_success() - { - //arrange - await Add(); + [Fact] + public async Task Get_AfterSave_returns_success() + { + //arrange + await Add(); - //act - var response = await dataSourceSystemClient.Get(CancellationToken.None); + //act + var response = await dataSourceSystemClient.Get(CancellationToken.None); - //assert - Assert.NotNull(response); + //assert + Assert.NotNull(response); - var expectedSystemCount = 1; - var actualSystemCount = response!.Count(); - Assert.Equal(expectedSystemCount, actualSystemCount); - } + var expectedSystemCount = 1; + var actualSystemCount = response!.Count(); + Assert.Equal(expectedSystemCount, actualSystemCount); + } - [Fact] - public async Task Add_returns_success() - { - await Add(); - } + [Fact] + public async Task Add_returns_success() + { + await Add(); + } - private async Task Add() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); + private async Task Add() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); - var dto = new DataSourceSystemDto() - { - SystemId = Guid.NewGuid(), - Name = "Test", - Description = "Test" - }; + var dto = new DataSourceSystemDto() + { + SystemId = Guid.NewGuid(), + Name = "Test", + Description = "Test" + }; - //act - await dataSourceSystemClient.Add(dto, CancellationToken.None); - } - } + //act + await dataSourceSystemClient.Add(dto, CancellationToken.None); + } + } } diff --git a/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs index 2770c5e..d79b6c0 100644 --- a/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/SetpointControllerTest.cs @@ -21,8 +21,8 @@ namespace DD.Persistence.IntegrationTests.Controllers var persistenceClientFactory = scope.ServiceProvider .GetRequiredService(); - setpointClient = persistenceClientFactory.GetSetpointClient(); - } + setpointClient = persistenceClientFactory.GetSetpointClient(); + } [Fact] public async Task GetCurrent_returns_success() @@ -34,13 +34,13 @@ namespace DD.Persistence.IntegrationTests.Controllers Guid.NewGuid() }; - //act - var response = await setpointClient.GetCurrent(setpointKeys, new CancellationToken()); + //act + var response = await setpointClient.GetCurrent(setpointKeys, new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task GetCurrent_AfterSave_returns_success() @@ -48,14 +48,14 @@ namespace DD.Persistence.IntegrationTests.Controllers //arrange var setpointKey = await Add(); - //act - var response = await setpointClient.GetCurrent([setpointKey], new CancellationToken()); + //act + var response = await setpointClient.GetCurrent([setpointKey], new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - Assert.Equal(setpointKey, response.FirstOrDefault()?.Key); - } + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + Assert.Equal(setpointKey, response.FirstOrDefault()?.Key); + } [Fact] public async Task GetHistory_returns_success() @@ -68,13 +68,13 @@ namespace DD.Persistence.IntegrationTests.Controllers }; var historyMoment = DateTimeOffset.UtcNow; - //act - var response = await setpointClient.GetHistory(setpointKeys, historyMoment, new CancellationToken()); + //act + var response = await setpointClient.GetHistory(setpointKeys, historyMoment, new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task GetHistory_AfterSave_returns_success() @@ -84,14 +84,14 @@ namespace DD.Persistence.IntegrationTests.Controllers var historyMoment = DateTimeOffset.UtcNow; historyMoment = historyMoment.AddDays(1); - //act - var response = await setpointClient.GetHistory([setpointKey], historyMoment, new CancellationToken()); + //act + var response = await setpointClient.GetHistory([setpointKey], historyMoment, new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - Assert.Equal(setpointKey, response.FirstOrDefault()?.Key); - } + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + Assert.Equal(setpointKey, response.FirstOrDefault()?.Key); + } [Fact] public async Task GetLog_returns_success() @@ -103,13 +103,13 @@ namespace DD.Persistence.IntegrationTests.Controllers Guid.NewGuid() }; - //act - var response = await setpointClient.GetLog(setpointKeys, new CancellationToken()); + //act + var response = await setpointClient.GetLog(setpointKeys, new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task GetLog_AfterSave_returns_success() @@ -117,14 +117,14 @@ namespace DD.Persistence.IntegrationTests.Controllers //arrange var setpointKey = await Add(); - //act - var response = await setpointClient.GetLog([setpointKey], new CancellationToken()); + //act + var response = await setpointClient.GetLog([setpointKey], new CancellationToken()); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - Assert.Equal(setpointKey, response.FirstOrDefault().Key); - } + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + Assert.Equal(setpointKey, response.FirstOrDefault().Key); + } [Fact] public async Task GetDatesRange_returns_success() @@ -132,14 +132,14 @@ namespace DD.Persistence.IntegrationTests.Controllers //arrange dbContext.CleanupDbSet(); - //act - var response = await setpointClient.GetDatesRangeAsync(CancellationToken.None); + //act + var response = await setpointClient.GetDatesRangeAsync(CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Equal(DateTimeOffset.MinValue, response!.From); - Assert.Equal(DateTimeOffset.MaxValue, response!.To); - } + //assert + Assert.NotNull(response); + Assert.Equal(DateTimeOffset.MinValue, response!.From); + Assert.Equal(DateTimeOffset.MaxValue, response!.To); + } [Fact] public async Task GetDatesRange_AfterSave_returns_success() @@ -149,27 +149,27 @@ namespace DD.Persistence.IntegrationTests.Controllers await Add(); - var dateBegin = DateTimeOffset.MinValue; - var take = 1; - var part = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); + var dateBegin = DateTimeOffset.MinValue; + var take = 1; + var part = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); - //act - var response = await setpointClient.GetDatesRangeAsync(CancellationToken.None); + //act + var response = await setpointClient.GetDatesRangeAsync(CancellationToken.None); - //assert - Assert.NotNull(response); + //assert + Assert.NotNull(response); - var expectedValue = part! - .FirstOrDefault()!.Created - .ToString("dd.MM.yyyy-HH:mm:ss"); - var actualValueFrom = response.From - .ToString("dd.MM.yyyy-HH:mm:ss"); - Assert.Equal(expectedValue, actualValueFrom); + var expectedValue = part! + .FirstOrDefault()!.Created + .ToString("dd.MM.yyyy-HH:mm:ss"); + var actualValueFrom = response.From + .ToString("dd.MM.yyyy-HH:mm:ss"); + Assert.Equal(expectedValue, actualValueFrom); - var actualValueTo = response.To - .ToString("dd.MM.yyyy-HH:mm:ss"); - Assert.Equal(expectedValue, actualValueTo); - } + var actualValueTo = response.To + .ToString("dd.MM.yyyy-HH:mm:ss"); + Assert.Equal(expectedValue, actualValueTo); + } [Fact] public async Task GetPart_returns_success() @@ -178,13 +178,13 @@ namespace DD.Persistence.IntegrationTests.Controllers var dateBegin = DateTimeOffset.UtcNow; var take = 2; - //act - var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); + //act + var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task GetPart_AfterSave_returns_success() @@ -194,13 +194,13 @@ namespace DD.Persistence.IntegrationTests.Controllers var take = 1; await Add(); - //act - var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); + //act + var response = await setpointClient.GetPart(dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - } + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + } [Fact] public async Task Save_returns_success() @@ -218,10 +218,10 @@ namespace DD.Persistence.IntegrationTests.Controllers Value2 = 2 }; - //act - await setpointClient.Add(setpointKey, setpointValue, new CancellationToken()); + //act + await setpointClient.Add(setpointKey, setpointValue, new CancellationToken()); - return setpointKey; - } - } + return setpointKey; + } + } } diff --git a/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs index eb0fed9..bdcddb9 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; using DD.Persistence.Client; using DD.Persistence.Client.Clients.Interfaces; @@ -209,20 +209,20 @@ namespace DD.Persistence.IntegrationTests.Controllers Assert.NotNull(response?.To); } - [Fact] - public async Task GetPart_returns_success() - { - //arrange - var dateBegin = DateTimeOffset.UtcNow; - var take = 2; + // [Fact] + // public async Task GetPart_returns_success() + // { + // //arrange + // var dateBegin = DateTimeOffset.UtcNow; + // var take = 2; - //act - var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None); + // //act + // var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + // //assert + // Assert.NotNull(response); + // Assert.Empty(response); + //} [Fact] public async Task GetPart_AfterSave_returns_success() diff --git a/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs index c083f3b..7d75875 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs @@ -22,7 +22,7 @@ public abstract class TimeSeriesBaseControllerTest : BaseIntegrat var persistenceClientFactory = scope.ServiceProvider .GetRequiredService(); - timeSeriesClient = persistenceClientFactory.GetTimeSeriesClient(); + timeSeriesClient = persistenceClientFactory.GetTimeSeriesClient(); } public async Task InsertRangeSuccess(TDto dto) diff --git a/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs index 28dc734..567b8c8 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs @@ -72,7 +72,7 @@ public class TimestampedSetControllerTest : BaseIntegrationTest } } - [Fact] + [Fact] public async Task Get_geDate() { // arrange @@ -112,11 +112,11 @@ public class TimestampedSetControllerTest : BaseIntegrationTest // assert Assert.NotNull(response); - Assert.Equal(expectedCount, response.Count()); - } + Assert.Equal(expectedCount, response.Count()); + } - [Fact] + [Fact] public async Task Get_with_big_skip_take() { // arrange diff --git a/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs index f96d21c..6db5853 100644 --- a/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs @@ -17,8 +17,8 @@ public class WitsDataControllerTest : BaseIntegrationTest var persistenceClientFactory = scope.ServiceProvider .GetRequiredService(); - witsDataClient = persistenceClientFactory.GetWitsDataClient(); - } + witsDataClient = persistenceClientFactory.GetWitsDataClient(); + } [Fact] public async Task GetDatesRangeAsync_returns_success() @@ -31,9 +31,9 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None); - //assert - Assert.NotNull(response); - } + //assert + Assert.NotNull(response); + } [Fact] public async Task GetPart_returns_success() @@ -48,10 +48,10 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task InsertRange_returns_success() @@ -77,10 +77,10 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response); - } + //assert + Assert.NotNull(response); + Assert.Empty(response); + } [Fact] public async Task GetDatesRangeAsync_AfterSave_returns_success() @@ -94,25 +94,25 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetDatesRangeAsync(discriminatorId, CancellationToken.None); - //assert - Assert.NotNull(response); + //assert + Assert.NotNull(response); - var expectedDateFrom = dtos - .Select(e => e.Timestamped) - .Min() - .ToString("dd.MM.yyyy-HH:mm:ss"); - var actualDateFrom = response.From.DateTime - .ToString("dd.MM.yyyy-HH:mm:ss"); - Assert.Equal(expectedDateFrom, actualDateFrom); + var expectedDateFrom = dtos + .Select(e => e.Timestamped) + .Min() + .ToString("dd.MM.yyyy-HH:mm:ss"); + var actualDateFrom = response.From.DateTime + .ToString("dd.MM.yyyy-HH:mm:ss"); + Assert.Equal(expectedDateFrom, actualDateFrom); - var expectedDateTo = dtos - .Select(e => e.Timestamped) - .Max() - .ToString("dd.MM.yyyy-HH:mm:ss"); - var actualDateTo = response.To.DateTime - .ToString("dd.MM.yyyy-HH:mm:ss"); - Assert.Equal(expectedDateTo, actualDateTo); - } + var expectedDateTo = dtos + .Select(e => e.Timestamped) + .Max() + .ToString("dd.MM.yyyy-HH:mm:ss"); + var actualDateTo = response.To.DateTime + .ToString("dd.MM.yyyy-HH:mm:ss"); + Assert.Equal(expectedDateTo, actualDateTo); + } [Fact] public async Task GetPart_AfterSave_returns_success() @@ -128,14 +128,14 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetPart(discriminatorId, dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - Assert.Equal(take, response.Count()); + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + Assert.Equal(take, response.Count()); - var expectedDto = dtos.FirstOrDefault(); - var actualDto = response.FirstOrDefault(); - Assert.Equal(expectedDto?.DiscriminatorId, actualDto?.DiscriminatorId); + var expectedDto = dtos.FirstOrDefault(); + var actualDto = response.FirstOrDefault(); + Assert.Equal(expectedDto?.DiscriminatorId, actualDto?.DiscriminatorId); var expectedValueDto = expectedDto?.Values.FirstOrDefault(); var actualValueDto = actualDto?.Values.FirstOrDefault(); @@ -158,27 +158,27 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.GetValuesForGraph(discriminatorId, dateFrom, dateTo, approxPointCount, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Equal(approxPointCount, response.Count()); - } + //assert + Assert.NotNull(response); + Assert.Equal(approxPointCount, response.Count()); + } - [Fact] - public async Task AddRange_returns_BadRequest() - { - //arrange - const string exceptionMessage = "Ошибка валидации, формата или маршрутизации запроса"; - var dtos = new List() - { - new WitsDataDto() - { - DiscriminatorId = Guid.NewGuid(), - Timestamped = DateTimeOffset.UtcNow, - Values = new List() - { - new WitsValueDto() - { - RecordId = -1, // < 0 + [Fact] + public async Task AddRange_returns_BadRequest() + { + //arrange + const string exceptionMessage = "Ошибка валидации, формата или маршрутизации запроса"; + var dtos = new List() + { + new WitsDataDto() + { + DiscriminatorId = Guid.NewGuid(), + Timestamped = DateTimeOffset.UtcNow, + Values = new List() + { + new WitsValueDto() + { + RecordId = -1, // < 0 ItemId = 101, // > 100 Value = string.Empty } @@ -186,17 +186,17 @@ public class WitsDataControllerTest : BaseIntegrationTest } }; - try - { - //act - var response = await witsDataClient.AddRange(dtos, CancellationToken.None); - } - catch (Exception ex) - { - //assert - Assert.Equal(exceptionMessage, ex.Message); - } - } + try + { + //act + var response = await witsDataClient.AddRange(dtos, CancellationToken.None); + } + catch (Exception ex) + { + //assert + Assert.Equal(exceptionMessage, ex.Message); + } + } private async Task> AddRange(int countToCreate = 10) { @@ -225,9 +225,9 @@ public class WitsDataControllerTest : BaseIntegrationTest //act var response = await witsDataClient.AddRange(dtos, CancellationToken.None); - //assert - var count = dtos.SelectMany(e => e.Values).Count(); - Assert.Equal(count, response); + //assert + var count = dtos.SelectMany(e => e.Values).Count(); + Assert.Equal(count, response); return dtos; } diff --git a/DD.Persistence.IntegrationTests/WebAppFactoryFixture.cs b/DD.Persistence.IntegrationTests/WebAppFactoryFixture.cs index 84c1a9e..76cf71b 100644 --- a/DD.Persistence.IntegrationTests/WebAppFactoryFixture.cs +++ b/DD.Persistence.IntegrationTests/WebAppFactoryFixture.cs @@ -25,6 +25,7 @@ public class WebAppFactoryFixture : WebApplicationFactory var dbConnection = config.Build().GetSection("DbConnection").Get()!; connectionString = dbConnection.GetConnectionString(); + //connectionString = "Host=postgres;Port=5442;Username=postgres;Password=postgres;Database=persistence"; }); builder.ConfigureServices(services => diff --git a/DD.Persistence.Repository/DependencyInjection.cs b/DD.Persistence.Repository/DependencyInjection.cs index 6a2e5f4..df15095 100644 --- a/DD.Persistence.Repository/DependencyInjection.cs +++ b/DD.Persistence.Repository/DependencyInjection.cs @@ -4,6 +4,8 @@ using DD.Persistence.Database.Model; using DD.Persistence.Models; using DD.Persistence.Repositories; using DD.Persistence.Repository.Repositories; +using DD.Persistence.Database.Entity; +using System.Reflection; namespace DD.Persistence.Repository; public static class DependencyInjection @@ -11,7 +13,10 @@ public static class DependencyInjection public static void MapsterSetup() { TypeAdapterConfig.GlobalSettings.Default.Config - .ForType() + .ForType() + .Ignore(dest => dest.System, dest => dest.SystemId); + + TypeAdapterConfig.NewConfig() .Map(dest => dest.Value, src => new DataWithWellDepthAndSectionDto() { DepthEnd = src.DepthEnd, @@ -20,11 +25,14 @@ public static class DependencyInjection Value = src.Value, Id = src.Id }); - } public static IServiceCollection AddInfrastructure(this IServiceCollection services) { + var typeAdapterConfig = TypeAdapterConfig.GlobalSettings; + typeAdapterConfig.RuleMap.Clear(); + typeAdapterConfig.Scan(Assembly.GetExecutingAssembly()); + MapsterSetup(); services.AddTransient, TimeSeriesDataRepository>(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e69de29