AppDbContext.cs
5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using Microsoft.EntityFrameworkCore;
using RobotProductionSystem.Api.Domain;
namespace RobotProductionSystem.Api.Infrastructure;
public sealed class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
public DbSet<User> Users => Set<User>();
public DbSet<UserRole> UserRoles => Set<UserRole>();
public DbSet<Member> Members => Set<Member>();
public DbSet<SettingsProfile> SettingsProfiles => Set<SettingsProfile>();
public DbSet<SettingsNotification> SettingsNotifications => Set<SettingsNotification>();
public DbSet<SecurityAccount> SecurityAccounts => Set<SecurityAccount>();
public DbSet<DeviceType> DeviceTypes => Set<DeviceType>();
public DbSet<WorkOrder> WorkOrders => Set<WorkOrder>();
public DbSet<WorkOrderEvent> WorkOrderEvents => Set<WorkOrderEvent>();
public DbSet<SnItem> SnItems => Set<SnItem>();
public DbSet<SnEvent> SnEvents => Set<SnEvent>();
public DbSet<OperationTask> OperationTasks => Set<OperationTask>();
public DbSet<OperationTaskEvent> OperationTaskEvents => Set<OperationTaskEvent>();
public DbSet<DashboardWorkOrderSnapshot> DashboardWorkOrderSnapshots => Set<DashboardWorkOrderSnapshot>();
public DbSet<ShellJsonItem> ShellJsonItems => Set<ShellJsonItem>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(entity =>
{
entity.ToTable("users");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasIndex(x => x.Username).IsUnique();
entity.HasIndex(x => x.Email).IsUnique();
entity.Property(x => x.Username).HasMaxLength(80);
entity.Property(x => x.PasswordHash).HasMaxLength(512);
entity.Property(x => x.Name).HasMaxLength(160);
entity.Property(x => x.Email).HasMaxLength(160);
entity.Property(x => x.Station).HasMaxLength(160);
entity.HasMany(x => x.Roles).WithOne(x => x.User).HasForeignKey(x => x.UserId).OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<UserRole>(entity =>
{
entity.ToTable("user_roles");
entity.HasIndex(x => new { x.UserId, x.Role }).IsUnique();
entity.Property(x => x.Role).HasMaxLength(80);
});
modelBuilder.Entity<Member>(entity =>
{
entity.ToTable("members");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasIndex(x => x.Username).IsUnique();
entity.HasIndex(x => x.Email).IsUnique();
});
modelBuilder.Entity<SettingsProfile>().ToTable("settings_profiles");
modelBuilder.Entity<SettingsProfile>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<SettingsNotification>().ToTable("settings_notifications");
modelBuilder.Entity<SettingsNotification>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<SecurityAccount>().ToTable("security_accounts");
modelBuilder.Entity<SecurityAccount>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<DeviceType>(entity =>
{
entity.ToTable("device_types");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasIndex(x => new { x.Name, x.Model }).IsUnique();
entity.Property(x => x.WeightKg).HasPrecision(10, 2);
});
modelBuilder.Entity<WorkOrder>(entity =>
{
entity.ToTable("work_orders");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasIndex(x => x.OrderNo).IsUnique();
entity.HasMany(x => x.Events).WithOne(x => x.WorkOrder).HasForeignKey(x => x.WorkOrderId).OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<WorkOrderEvent>(entity =>
{
entity.ToTable("work_order_events");
entity.HasIndex(x => x.EventId).IsUnique();
});
modelBuilder.Entity<SnItem>(entity =>
{
entity.ToTable("sn_items");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasIndex(x => x.Sn).IsUnique();
entity.HasMany(x => x.Events).WithOne(x => x.SnItem).HasForeignKey(x => x.SnItemId).OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<SnEvent>(entity =>
{
entity.ToTable("sn_events");
entity.HasIndex(x => x.EventId).IsUnique();
entity.Property(x => x.EvidencePath).HasMaxLength(512);
});
modelBuilder.Entity<OperationTask>(entity =>
{
entity.ToTable("operation_tasks");
entity.Property(x => x.Id).ValueGeneratedNever();
entity.HasMany(x => x.AuditEvents).WithOne(x => x.OperationTask).HasForeignKey(x => x.OperationTaskId).OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<OperationTaskEvent>(entity =>
{
entity.ToTable("operation_task_events");
entity.HasIndex(x => x.EventId).IsUnique();
entity.Property(x => x.EvidencePath).HasMaxLength(512);
});
modelBuilder.Entity<DashboardWorkOrderSnapshot>().ToTable("dashboard_work_order_snapshots");
modelBuilder.Entity<DashboardWorkOrderSnapshot>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<ShellJsonItem>(entity =>
{
entity.ToTable("shell_json_items");
entity.HasIndex(x => x.Kind).IsUnique();
entity.Property(x => x.PayloadJson).HasColumnType("jsonb");
});
}
}