namespace marlin.web.Data; using System.Linq.Expressions; using System.Text.Json; using core; using core.models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Models; // user-based session grant // agent id/token grant // agent job claim session grant // service grant public interface IActiveGrant { bool CanAccessSource(Guid sourceId); } public class ApplicationDbContext : DbContext { public DbSet Sources => this.Set(); public DbSet SourceBranches => this.Set(); public DbSet SourceCommits => this.Set(); public DbSet SourceBlobs => this.Set(); public DbSet Secrets => this.Set(); public DbSet Jobs => this.Set(); public DbSet Agents => this.Set(); public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder .Entity() .Property(p => p.Capabilities) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions?)null), v => JsonSerializer.Deserialize(v, (JsonSerializerOptions?)null)!); modelBuilder .Entity() .HasAlternateKey(x => new { x.SourceId, x.Hash }); modelBuilder .Entity() .Property(p => p.Content) .HasConversion( v => JsonSerializer.Serialize(v, (JsonSerializerOptions?)null), v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions?)null)!); base.OnModelCreating(modelBuilder); } }