using AltBot.Core.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace AltBot.Data; public class DataContext : DbContext { public DataContext(DbContextOptions options) : base(options) { } public DbSet Posts { get; set; } public DbSet Subscribers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); var didConverter = new ValueConverter( v => v.Value, v => Did.Load(v)); modelBuilder.Entity(entity => { entity.ToTable("image_post"); entity.HasKey(x => new { x.Did, x.Cid }); entity.Property(x => x.Did) .HasMaxLength(2048) .HasConversion(didConverter); entity.Property(x => x.Cid) .HasMaxLength(1000) .HasConversion( v => v.ToString(), v => Cid.Load(v)); entity.Property(x => x.Rkey) .HasMaxLength(512); entity.HasOne(x => x.Subscriber) .WithMany(x => x.Posts) .HasForeignKey(x => x.Did) .HasConstraintName("fk_image_post_subscriber"); }); modelBuilder.Entity(entity => { entity.ToTable("subscriber"); entity.HasKey(x => x.Did); entity.Property(x => x.Did) .HasMaxLength(2048) .HasConversion(didConverter); entity.Property(x => x.Active) .HasDefaultValue(true); entity.Property(x => x.Handle) .IsUnicode() .HasMaxLength(250); entity.Property(x => x.Rkey) .HasMaxLength(100); }); modelBuilder.Entity(entity => { entity.ToTable("subscriber_history"); entity.HasKey(x => new {x.Did, x.OccurredAt}); entity.Property(x => x.Did) .HasMaxLength(2048) .HasConversion(didConverter); entity.Property(x => x.Category) .HasMaxLength(200); entity.Property(x => x.Category) .HasMaxLength(2048); entity.HasOne(x => x.Subscriber) .WithMany(x => x.History) .HasForeignKey(x => x.Did) .HasConstraintName("fk_subscriber_history_subscriber"); }); } }