using Microsoft.EntityFrameworkCore; using Tau.Acuvim.Console.Models; namespace Tau.Acuvim.Console.Data; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } public DbSet Devices => Set(); public DbSet TelemetryRecords => Set(); public DbSet Alerts => Set(); public DbSet Commands => Set(); public DbSet FirmwareVersions => Set(); public DbSet DeviceGroups => Set(); public DbSet Users => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(e => { e.ToTable("devices"); e.HasKey(d => d.Id); e.HasIndex(d => d.DeviceId).IsUnique(); e.HasIndex(d => d.Status); e.Property(d => d.Capabilities).HasColumnType("jsonb"); e.Property(d => d.Tags).HasColumnType("jsonb"); e.HasOne(d => d.Group).WithMany(g => g.Devices).HasForeignKey(d => d.GroupId); }); modelBuilder.Entity(e => { e.ToTable("telemetry_records"); e.HasKey(t => t.Id); e.HasIndex(t => new { t.DeviceId, t.Timestamp }).IsDescending(false, true); e.HasIndex(t => t.Timestamp).IsDescending(); e.Property(t => t.Data).HasColumnType("jsonb"); e.HasOne(t => t.Device).WithMany(d => d.TelemetryRecords) .HasForeignKey(t => t.DeviceId).HasPrincipalKey(d => d.DeviceId); }); modelBuilder.Entity(e => { e.ToTable("alerts"); e.HasKey(a => a.Id); e.HasIndex(a => new { a.DeviceId, a.CreatedAt }).IsDescending(false, true); e.Property(a => a.Metadata).HasColumnType("jsonb"); e.HasOne(a => a.Device).WithMany(d => d.Alerts) .HasForeignKey(a => a.DeviceId).HasPrincipalKey(d => d.DeviceId); }); modelBuilder.Entity(e => { e.ToTable("commands"); e.HasKey(c => c.Id); e.HasIndex(c => c.RequestId).IsUnique(); e.HasIndex(c => new { c.DeviceId, c.CreatedAt }).IsDescending(false, true); e.Property(c => c.Params).HasColumnType("jsonb"); e.Property(c => c.Response).HasColumnType("jsonb"); e.HasOne(c => c.Device).WithMany(d => d.Commands) .HasForeignKey(c => c.DeviceId).HasPrincipalKey(d => d.DeviceId); }); modelBuilder.Entity(e => { e.ToTable("firmware_versions"); e.HasKey(f => f.Id); e.HasIndex(f => f.Version).IsUnique(); }); modelBuilder.Entity(e => { e.ToTable("device_groups"); e.HasKey(g => g.Id); e.HasIndex(g => g.Name).IsUnique(); }); modelBuilder.Entity(e => { e.ToTable("users"); e.HasKey(u => u.Id); e.HasIndex(u => u.Username).IsUnique(); e.HasIndex(u => u.Email).IsUnique(); }); } }