AltHeroes Bot v2
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}