using Edge.Core.Database.Models; using Gateway.POS.Models; using Microsoft.EntityFrameworkCore; namespace Gateway.POS { public class PosAppDbContext : DbContext { private DbContextOptions options; public PosAppDbContext() : base() { } //public AppDbContext(DbContextOptions options) : base(options) { this.options = options; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=Gateway_Pos_App_database.db"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasIndex(p => new { p.Id }).IsUnique(true); modelBuilder.Entity().HasIndex(p => new { p.ReceiptId }).IsUnique(true); modelBuilder.Entity().HasIndex(p => new { p.ShiftId }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.ServerSideTimestamp }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.TotalAmount }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.NetAmount }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.Amount }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.FuelProductCode }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.SiteLevelNozzleId }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.PumpId, p.NozzleLogicalId }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.Name }).IsUnique(true); modelBuilder.Entity().HasIndex(p => new { p.Name, p.CompanyName, p.PhoneNumber }).IsUnique(false); modelBuilder.Entity().HasIndex(p => new { p.MembershipSubAccountId, p.Identity, p.IdentityCarrierType }).IsUnique(true); modelBuilder.Entity().HasIndex(p => new { p.Name }).IsUnique(true); modelBuilder.Entity().HasKey(p => new { p.MembershipTagId, p.MembershipAccountId }); modelBuilder.Entity().HasKey(p => new { p.MembershipTagId, p.MembershipSubAccountId }); #region otherwise, sqlite does not support Sum on decimal columns, so here underlying use double. modelBuilder.Entity().Property(e => e.TotalAmount).HasConversion(); modelBuilder.Entity().Property(e => e.NetAmount).HasConversion(); modelBuilder.Entity().Property(e => e.ExpectAmount).HasConversion(); modelBuilder.Entity().Property(e => e.PaidAmount).HasConversion(); modelBuilder.Entity().Property(e => e.Qualtity).HasConversion(); modelBuilder.Entity().Property(e => e.Amount).HasConversion(); modelBuilder.Entity().Property(e => e.Price).HasConversion(); modelBuilder.Entity().Property(e => e.TotalVolume).HasConversion(); modelBuilder.Entity().Property(e => e.Balance).HasConversion(); modelBuilder.Entity().Property(e => e.RechargeAmount).HasConversion(); modelBuilder.Entity().Property(e => e.RedeemedProfitAmount).HasConversion(); #endregion modelBuilder.Entity() .HasOne(at => at.Account) .WithMany(acct => acct.AccountTags) .HasForeignKey(at => at.MembershipAccountId); modelBuilder.Entity() .HasOne(at => at.SubAccount) .WithMany(subAcct => subAcct.SubAccountTags) .HasForeignKey(at => at.MembershipSubAccountId); modelBuilder.Entity().HasOne(t => t.MembershipProfitAccountRecharge).WithOne(r => r.SourceTrx) .HasForeignKey(b => b.SourceTrxId); modelBuilder.Entity().HasOne(t => t.MembershipProfitAccountRedeem).WithOne(r => r.SourceTrx) .HasForeignKey(b => b.SourceTrxId); } public DbSet Transactions { get; set; } public DbSet Discounts { get; set; } public DbSet FuelItems { get; set; } public DbSet Payments { get; set; } public DbSet Operators { get; set; } public DbSet MembershipAccounts { get; set; } public DbSet MembershipSubAccountIdentities { get; set; } public DbSet MembershipSubAccounts { get; set; } public DbSet MembershipProfitAccounts { get; set; } public DbSet MembershipProfitAccountRecharges { get; set; } public DbSet MembershipProfitAccountRedeems { get; set; } public DbSet MembershipTags { get; set; } public DbSet MembershipAccount_M2M_MembershipTags { get; set; } public DbSet MembershipSubAccount_M2M_MembershipTags { get; set; } } }