106 lines
4.1 KiB
C#
106 lines
4.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using FutureMailAPI.Models;
|
|
|
|
namespace FutureMailAPI.Data
|
|
{
|
|
public class FutureMailDbContext : DbContext
|
|
{
|
|
public FutureMailDbContext(DbContextOptions<FutureMailDbContext> options) : base(options)
|
|
{
|
|
}
|
|
|
|
public DbSet<User> Users { get; set; }
|
|
public DbSet<SentMail> SentMails { get; set; }
|
|
public DbSet<ReceivedMail> ReceivedMails { get; set; }
|
|
public DbSet<TimeCapsule> TimeCapsules { get; set; }
|
|
public DbSet<OAuthClient> OAuthClients { get; set; }
|
|
public DbSet<OAuthToken> OAuthTokens { get; set; }
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
// 配置User实体
|
|
modelBuilder.Entity<User>(entity =>
|
|
{
|
|
entity.HasIndex(e => e.Email).IsUnique();
|
|
entity.HasIndex(e => e.Username).IsUnique();
|
|
entity.Property(e => e.CreatedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
|
|
// 配置SentMail实体
|
|
modelBuilder.Entity<SentMail>(entity =>
|
|
{
|
|
entity.HasOne(e => e.Sender)
|
|
.WithMany(u => u.SentMails)
|
|
.HasForeignKey(e => e.SenderId)
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
|
|
entity.HasOne<User>()
|
|
.WithMany()
|
|
.HasForeignKey(e => e.RecipientId)
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
entity.Property(e => e.SentAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
|
|
// 配置ReceivedMail实体
|
|
modelBuilder.Entity<ReceivedMail>(entity =>
|
|
{
|
|
entity.HasOne(e => e.SentMail)
|
|
.WithMany()
|
|
.HasForeignKey(e => e.SentMailId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.HasOne<User>()
|
|
.WithMany()
|
|
.HasForeignKey(e => e.RecipientId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.Property(e => e.ReceivedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
|
|
// 配置TimeCapsule实体
|
|
modelBuilder.Entity<TimeCapsule>(entity =>
|
|
{
|
|
entity.HasOne(e => e.User)
|
|
.WithMany(u => u.TimeCapsules)
|
|
.HasForeignKey(e => e.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.HasOne<SentMail>()
|
|
.WithMany()
|
|
.HasForeignKey(e => e.SentMailId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.Property(e => e.CreatedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
|
|
// 配置OAuthClient实体
|
|
modelBuilder.Entity<OAuthClient>(entity =>
|
|
{
|
|
entity.HasIndex(e => e.ClientId).IsUnique();
|
|
entity.Property(e => e.CreatedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
entity.Property(e => e.UpdatedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
|
|
// 配置OAuthToken实体
|
|
modelBuilder.Entity<OAuthToken>(entity =>
|
|
{
|
|
entity.HasOne(e => e.User)
|
|
.WithMany()
|
|
.HasForeignKey(e => e.UserId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.HasOne(e => e.Client)
|
|
.WithMany(c => c.Tokens)
|
|
.HasForeignKey(e => e.ClientId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
entity.HasIndex(e => e.AccessToken).IsUnique();
|
|
entity.HasIndex(e => e.RefreshToken).IsUnique();
|
|
entity.Property(e => e.CreatedAt).HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
});
|
|
}
|
|
}
|
|
} |