at main 2.6 kB view raw
1using AltBot.Core.Models; 2using Microsoft.EntityFrameworkCore; 3using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 4 5namespace AltBot.Data; 6 7public class DataContext : DbContext 8{ 9 public DataContext(DbContextOptions<DataContext> options) : base(options) { } 10 11 public DbSet<ImagePost> Posts { get; set; } 12 public DbSet<Subscriber> Subscribers { get; set; } 13 14 protected override void OnModelCreating(ModelBuilder modelBuilder) 15 { 16 base.OnModelCreating(modelBuilder); 17 18 var didConverter = new ValueConverter<Did, string>( 19 v => v.Value, 20 v => Did.Load(v)); 21 22 modelBuilder.Entity<ImagePost>(entity => 23 { 24 entity.ToTable("image_post"); 25 26 entity.HasKey(x => new { x.Did, x.Cid }); 27 28 entity.Property(x => x.Did) 29 .HasMaxLength(2048) 30 .HasConversion(didConverter); 31 32 entity.Property(x => x.Cid) 33 .HasMaxLength(1000) 34 .HasConversion( 35 v => v.ToString(), 36 v => Cid.Load(v)); 37 38 entity.Property(x => x.Rkey) 39 .HasMaxLength(512); 40 41 entity.HasOne(x => x.Subscriber) 42 .WithMany(x => x.Posts) 43 .HasForeignKey(x => x.Did) 44 .HasConstraintName("fk_image_post_subscriber"); 45 }); 46 47 modelBuilder.Entity<Subscriber>(entity => 48 { 49 entity.ToTable("subscriber"); 50 51 entity.HasKey(x => x.Did); 52 53 entity.Property(x => x.Did) 54 .HasMaxLength(2048) 55 .HasConversion(didConverter); 56 57 entity.Property(x => x.Active) 58 .HasDefaultValue(true); 59 60 entity.Property(x => x.Handle) 61 .IsUnicode() 62 .HasMaxLength(250); 63 64 entity.Property(x => x.Rkey) 65 .HasMaxLength(100); 66 }); 67 68 modelBuilder.Entity<SubscriberHistory>(entity => 69 { 70 entity.ToTable("subscriber_history"); 71 72 entity.HasKey(x => new {x.Did, x.OccurredAt}); 73 74 entity.Property(x => x.Did) 75 .HasMaxLength(2048) 76 .HasConversion(didConverter); 77 78 entity.Property(x => x.Category) 79 .HasMaxLength(200); 80 81 entity.Property(x => x.Category) 82 .HasMaxLength(2048); 83 84 entity.HasOne(x => x.Subscriber) 85 .WithMany(x => x.History) 86 .HasForeignKey(x => x.Did) 87 .HasConstraintName("fk_subscriber_history_subscriber"); 88 }); 89 } 90}