//
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Nexus.Api.Data;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Nexus.Api.Data.Migrations
{
[DbContext(typeof(NexusDbContext))]
[Migration("20260730191613_AddOpenClawConnectionProfile")]
partial class AddOpenClawConnectionProfile
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.8")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Nexus.Api.Data.ActivityEvent", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("Message")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("TaskId")
.HasColumnType("uuid");
b.Property("Type")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.HasIndex("CreatedAt");
b.HasIndex("TaskId");
b.ToTable("Activity");
});
modelBuilder.Entity("Nexus.Api.Data.NexusUser", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)");
b.Property("Email")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("LastLoginAt")
.HasColumnType("timestamp with time zone");
b.Property("NormalizedEmail")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("PasswordHash")
.IsRequired()
.HasColumnType("text");
b.Property("Role")
.IsRequired()
.HasColumnType("text");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.IsUnique();
b.ToTable("Users");
});
modelBuilder.Entity("Nexus.Api.Data.Notification", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("ForUser")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property("IsRead")
.HasColumnType("boolean");
b.Property("Message")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("TaskId")
.HasColumnType("uuid");
b.Property("Title")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("Type")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.HasKey("Id");
b.HasIndex("ForUser", "IsRead", "CreatedAt");
b.ToTable("Notifications");
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawConnectionProfile", b =>
{
b.Property("ProfileId")
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("AdoptedAt")
.HasColumnType("timestamp with time zone");
b.Property("AdoptionState")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("CapabilityHash")
.HasMaxLength(128)
.HasColumnType("character varying(128)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("DeviceId")
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("DiscoverySource")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Endpoint")
.IsRequired()
.HasMaxLength(2048)
.HasColumnType("character varying(2048)");
b.Property("LastProbedAt")
.HasColumnType("timestamp with time zone");
b.Property("LastVerifiedAt")
.HasColumnType("timestamp with time zone");
b.Property("ManagementEnabled")
.HasColumnType("boolean");
b.Property("RequiredVersion")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("Revision")
.IsConcurrencyToken()
.HasColumnType("integer");
b.Property("TlsCertificateFingerprint")
.HasMaxLength(128)
.HasColumnType("character varying(128)");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("ProfileId");
b.ToTable("OpenClawConnectionProfiles", null, t =>
{
t.HasCheckConstraint("CK_OpenClawConnectionProfiles_Primary", "\"ProfileId\" = 'primary'");
});
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawRun", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("Actor")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("AgentId")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("CorrelationId")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("FinishedAt")
.HasColumnType("timestamp with time zone");
b.Property("LastError")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property("LastGatewaySequence")
.HasColumnType("bigint");
b.Property("OpenClawRunId")
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("ProjectId")
.HasColumnType("uuid");
b.Property("Prompt")
.IsRequired()
.HasColumnType("text");
b.Property("RetriedFromRunId")
.HasColumnType("uuid");
b.Property("Revision")
.IsConcurrencyToken()
.HasColumnType("integer");
b.Property("SequenceGapDetected")
.HasColumnType("boolean");
b.Property("SessionKey")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("StartIdempotencyKey")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("StartedAt")
.HasColumnType("timestamp with time zone");
b.Property("Status")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("TaskId")
.HasColumnType("uuid");
b.Property("Title")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("TraceParent")
.HasMaxLength(128)
.HasColumnType("character varying(128)");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("OpenClawRunId")
.IsUnique();
b.HasIndex("ProjectId");
b.HasIndex("RetriedFromRunId");
b.HasIndex("SessionKey");
b.HasIndex("StartIdempotencyKey")
.IsUnique();
b.HasIndex("TaskId");
b.HasIndex("Status", "UpdatedAt");
b.ToTable("OpenClawRuns");
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawRunHistory", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("Action")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Actor")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("CorrelationId")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("FromStatus")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("GatewayEventId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("GatewaySequence")
.HasColumnType("bigint");
b.Property("IdempotencyKey")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("Message")
.IsRequired()
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property("OccurredAt")
.HasColumnType("timestamp with time zone");
b.Property("ResultRunId")
.HasColumnType("uuid");
b.Property("RunId")
.HasColumnType("uuid");
b.Property("SequenceGapDetected")
.HasColumnType("boolean");
b.Property("ToStatus")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("TraceParent")
.HasMaxLength(128)
.HasColumnType("character varying(128)");
b.HasKey("Id");
b.HasIndex("GatewayEventId")
.IsUnique();
b.HasIndex("RunId", "OccurredAt");
b.HasIndex("RunId", "Action", "IdempotencyKey")
.IsUnique();
b.ToTable("OpenClawRunHistory");
});
modelBuilder.Entity("Nexus.Api.Data.Project", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("Description")
.IsRequired()
.HasColumnType("text");
b.Property("Name")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("Progress")
.HasColumnType("integer");
b.Property("Status")
.HasColumnType("integer");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.ToTable("Projects");
});
modelBuilder.Entity("Nexus.Api.Data.RefreshToken", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("uuid");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("ExpiresAt")
.HasColumnType("timestamp with time zone");
b.Property("FamilyId")
.HasColumnType("uuid");
b.Property("ReplacedByTokenHash")
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property("RevokedAt")
.HasColumnType("timestamp with time zone");
b.Property("TokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
b.Property("UserId")
.HasColumnType("uuid");
b.HasKey("Id");
b.HasIndex("TokenHash")
.IsUnique();
b.HasIndex("UserId", "FamilyId");
b.ToTable("RefreshTokens");
});
modelBuilder.Entity("Nexus.Api.Data.SeedAudit", b =>
{
b.Property("Key")
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Key");
b.ToTable("SeedAudit");
});
modelBuilder.Entity("Nexus.Api.Data.WorkTask", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("AssignedTo")
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("Detail")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)");
b.Property("DueDate")
.HasColumnType("timestamp with time zone");
b.Property("ExpectedFrom")
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property("IsAgentTask")
.HasColumnType("boolean");
b.Property("ParentTaskId")
.HasColumnType("uuid");
b.Property("Priority")
.IsRequired()
.HasColumnType("text");
b.Property("ProjectId")
.HasColumnType("uuid");
b.Property("Source")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property("State")
.IsRequired()
.HasColumnType("text");
b.Property("Title")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.HasKey("Id");
b.HasIndex("AssignedTo");
b.HasIndex("ExpectedFrom");
b.HasIndex("IsAgentTask");
b.HasIndex("ParentTaskId");
b.HasIndex("Source");
b.ToTable("Tasks");
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawRun", b =>
{
b.HasOne("Nexus.Api.Data.Project", null)
.WithMany()
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("Nexus.Api.Data.WorkTask", null)
.WithMany()
.HasForeignKey("TaskId")
.OnDelete(DeleteBehavior.SetNull);
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawRunHistory", b =>
{
b.HasOne("Nexus.Api.Data.OpenClawRun", "Run")
.WithMany("History")
.HasForeignKey("RunId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Run");
});
modelBuilder.Entity("Nexus.Api.Data.RefreshToken", b =>
{
b.HasOne("Nexus.Api.Data.NexusUser", "User")
.WithMany("RefreshTokens")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("Nexus.Api.Data.WorkTask", b =>
{
b.HasOne("Nexus.Api.Data.WorkTask", "ParentTask")
.WithMany("ChildTasks")
.HasForeignKey("ParentTaskId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("ParentTask");
});
modelBuilder.Entity("Nexus.Api.Data.NexusUser", b =>
{
b.Navigation("RefreshTokens");
});
modelBuilder.Entity("Nexus.Api.Data.OpenClawRun", b =>
{
b.Navigation("History");
});
modelBuilder.Entity("Nexus.Api.Data.WorkTask", b =>
{
b.Navigation("ChildTasks");
});
#pragma warning restore 612, 618
}
}
}