// <auto-generated />
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;

#nullable disable

namespace DD.Persistence.Database.Postgres.Migrations
{
    [DbContext(typeof(PersistencePostgresContext))]
    [Migration("20250116093615_Init")]
    partial class Init
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "9.0.0")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("DD.Persistence.Database.Entity.DataSourceSystem", b =>
                {
                    b.Property<Guid>("SystemId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasComment("Id системы - источника данных");

                    b.Property<string>("Description")
                        .HasColumnType("text")
                        .HasComment("Описание системы - источника данных");

                    b.Property<string>("Name")
                        .IsRequired()
                        .HasColumnType("varchar(256)")
                        .HasComment("Наименование системы - источника данных");

                    b.HasKey("SystemId");

                    b.ToTable("DataSourceSystem");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.ParameterData", b =>
                {
                    b.Property<Guid>("DiscriminatorId")
                        .HasColumnType("uuid")
                        .HasComment("Дискриминатор системы");

                    b.Property<int>("ParameterId")
                        .HasColumnType("integer")
                        .HasComment("Id параметра");

                    b.Property<DateTimeOffset>("Timestamp")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Временная отметка");

                    b.Property<string>("Value")
                        .IsRequired()
                        .HasColumnType("varchar(256)")
                        .HasComment("Значение параметра в виде строки");

                    b.HasKey("DiscriminatorId", "ParameterId", "Timestamp");

                    b.ToTable("ParameterData");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
                {
                    b.Property<Guid>("EventId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasComment("Id события");

                    b.Property<int>("CategoryId")
                        .HasColumnType("integer")
                        .HasComment("Id Категории важности");

                    b.Property<int>("EventState")
                        .HasColumnType("integer")
                        .HasComment("Статус события");

                    b.Property<Guid>("SystemId")
                        .HasColumnType("uuid")
                        .HasComment("Id системы, к которой относится сообщение");

                    b.Property<string>("Text")
                        .IsRequired()
                        .HasColumnType("varchar(512)")
                        .HasComment("Текст сообщения");

                    b.Property<DateTimeOffset>("Timestamp")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Дата возникновения");

                    b.HasKey("EventId");

                    b.HasIndex("SystemId");

                    b.ToTable("TechMessage");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedValues", b =>
                {
                    b.Property<Guid>("DiscriminatorId")
                        .HasColumnType("uuid")
                        .HasComment("Дискриминатор системы");

                    b.Property<DateTimeOffset>("Timestamp")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Временная отметка");

                    b.Property<string>("Values")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasComment("Данные");

                    b.HasKey("DiscriminatorId", "Timestamp");

                    b.ToTable("TimestampedValues");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.ValuesIdentity", b =>
                {
                    b.Property<Guid>("DiscriminatorId")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasComment("Дискриминатор системы");

                    b.Property<string[]>("Identity")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasComment("Идентификаторы");

                    b.HasKey("DiscriminatorId");

                    b.ToTable("ValuesIdentities");
                });

            modelBuilder.Entity("DD.Persistence.Database.Model.ChangeLog", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasComment("Ключ записи");

                    b.Property<DateTimeOffset>("Creation")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Дата создания записи");

                    b.Property<double>("DepthEnd")
                        .HasColumnType("double precision")
                        .HasComment("Глубина забоя на дату окончания интервала");

                    b.Property<double>("DepthStart")
                        .HasColumnType("double precision")
                        .HasComment("Глубина забоя на дату начала интервала");

                    b.Property<Guid>("IdAuthor")
                        .HasColumnType("uuid")
                        .HasComment("Автор изменения");

                    b.Property<Guid>("IdDiscriminator")
                        .HasColumnType("uuid")
                        .HasComment("Дискриминатор таблицы");

                    b.Property<Guid?>("IdEditor")
                        .HasColumnType("uuid")
                        .HasComment("Редактор");

                    b.Property<Guid?>("IdNext")
                        .HasColumnType("uuid")
                        .HasComment("Id заменяющей записи");

                    b.Property<Guid>("IdSection")
                        .HasColumnType("uuid")
                        .HasComment("Ключ секции");

                    b.Property<DateTimeOffset?>("Obsolete")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Дата устаревания (например при удалении)");

                    b.Property<string>("Value")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasComment("Значение");

                    b.HasKey("Id");

                    b.ToTable("ChangeLog");
                });

            modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b =>
                {
                    b.Property<Guid>("Key")
                        .HasColumnType("uuid")
                        .HasComment("Ключ");

                    b.Property<DateTimeOffset>("Timestamp")
                        .HasColumnType("timestamp with time zone")
                        .HasComment("Дата создания уставки");

                    b.Property<Guid>("IdUser")
                        .HasColumnType("uuid")
                        .HasComment("Id автора последнего изменения");

                    b.Property<object>("Value")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasComment("Значение уставки");

                    b.HasKey("Key", "Timestamp");

                    b.ToTable("Setpoint");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
                {
                    b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System")
                        .WithMany()
                        .HasForeignKey("SystemId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("System");
                });

            modelBuilder.Entity("DD.Persistence.Database.Entity.TimestampedValues", b =>
                {
                    b.HasOne("DD.Persistence.Database.Entity.ValuesIdentity", "ValuesIdentity")
                        .WithMany()
                        .HasForeignKey("DiscriminatorId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("ValuesIdentity");
                });
#pragma warning restore 612, 618
        }
    }
}