using System.Reflection; using CMSMicroservice.Application.Common.Interfaces; using CMSMicroservice.Domain.Entities; using CMSMicroservice.Infrastructure.Persistence.Interceptors; using MediatR; using Microsoft.EntityFrameworkCore; namespace CMSMicroservice.Infrastructure.Persistence; public class ApplicationDbContext : DbContext, IApplicationDbContext { private readonly IMediator _mediator; private readonly AuditableEntitySaveChangesInterceptor _auditableEntitySaveChangesInterceptor; public ApplicationDbContext( DbContextOptions options, IMediator mediator, AuditableEntitySaveChangesInterceptor auditableEntitySaveChangesInterceptor) : base(options) { _mediator = mediator; _auditableEntitySaveChangesInterceptor = auditableEntitySaveChangesInterceptor; } protected override void OnModelCreating(ModelBuilder builder) { builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); builder.HasDefaultSchema("CMS"); base.OnModelCreating(builder); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.AddInterceptors(_auditableEntitySaveChangesInterceptor); } public override async Task SaveChangesAsync(CancellationToken cancellationToken = default) { await _mediator.DispatchDomainEvents(this); return await base.SaveChangesAsync(cancellationToken); } public DbSet UserAddresss => Set(); public DbSet Packages => Set(); public DbSet Roles => Set(); public DbSet Categorys => Set(); public DbSet UserRoles => Set(); public DbSet UserCartss => Set(); public DbSet ProductGalleryss => Set(); public DbSet FactorDetailss => Set(); public DbSet Productss => Set(); public DbSet ProductImagess => Set(); public DbSet Users => Set(); public DbSet OtpTokens => Set(); public DbSet Contracts => Set(); public DbSet UserContracts => Set(); public DbSet Tags => Set(); public DbSet PruductCategorys => Set(); public DbSet PruductTags => Set(); public DbSet Transactionss => Set(); public DbSet UserOrders => Set(); public DbSet UserWallets => Set(); public DbSet UserWalletChangeLogs => Set(); }