using System; using System.Collections.Generic; using DbConnect.Entities; using Microsoft.EntityFrameworkCore; namespace DbConnect.Data; public partial class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } public virtual DbSet Books { get; set; } public virtual DbSet Borrowings { get; set; } public virtual DbSet Categories { get; set; } public virtual DbSet Memberships { get; set; } public virtual DbSet Notifications { get; set; } public virtual DbSet Users { get; set; } public virtual DbSet UserSubscriptions { get; set; } public virtual DbSet WishlistItems { get; set; } public virtual DbSet WalletTransactions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__Books__3214EC07AE1974C8"); entity.HasIndex(e => e.Isbn, "UQ__Books__447D36EA79CF66CE").IsUnique(); entity.Property(e => e.Author).HasMaxLength(100); entity.Property(e => e.AvailableCopies).HasDefaultValue(1); entity.Property(e => e.CreatedAt) .HasDefaultValueSql("now()") .HasColumnType("timestamp"); entity.Property(e => e.IsActive).HasDefaultValue(true); entity.Property(e => e.Isbn) .HasMaxLength(20) .HasColumnName("ISBN"); entity.Property(e => e.Status) .HasMaxLength(20) .HasDefaultValue("Available"); entity.Property(e => e.Title).HasMaxLength(200); entity.Property(e => e.TotalCopies).HasDefaultValue(1); entity.Property(e => e.UpdatedAt).HasColumnType("timestamp"); entity.HasMany(d => d.Categories).WithMany(p => p.Books) .UsingEntity>( "BookCategory", r => r.HasOne().WithMany() .HasForeignKey("CategoryId") .HasConstraintName("FK_BookCategories_Categories"), l => l.HasOne().WithMany() .HasForeignKey("BookId") .HasConstraintName("FK_BookCategories_Books"), j => { j.HasKey("BookId", "CategoryId").HasName("PK__BookCate__9C7051A74E7D221D"); j.ToTable("BookCategories"); }); }); modelBuilder.Entity(entity => { entity.Property(e => e.Id).HasDefaultValueSql("gen_random_uuid()"); entity.Property(e => e.BorrowDate) .HasDefaultValueSql("now()") .HasColumnType("timestamp"); entity.Property(e => e.DueDate).HasColumnType("timestamp"); entity.Property(e => e.FineAmount).HasColumnType("decimal(10, 2)"); entity.Property(e => e.ReturnDate).HasColumnType("timestamp"); entity.Property(e => e.Status) .HasMaxLength(20) .HasDefaultValue("Active"); entity.HasOne(d => d.Book).WithMany(p => p.Borrowings) .HasForeignKey(d => d.BookId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Borrowings_Books"); entity.HasOne(d => d.User).WithMany(p => p.Borrowings) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Borrowings_Users"); }); modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__Categori__3214EC0751B5797D"); entity.HasIndex(e => e.Name, "UQ__Categori__737584F622B16D3A").IsUnique(); entity.Property(e => e.Name).HasMaxLength(100); }); modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__Membersh__3214EC07A6F5A55F"); entity.HasIndex(e => e.Type, "IX_Memberships_Type").IsUnique(); entity.Property(e => e.Price).HasColumnType("decimal(10, 2)"); entity.Property(e => e.RewardId).HasMaxLength(100); entity.Property(e => e.Type).HasMaxLength(50); }); modelBuilder.Entity(entity => { entity.HasIndex(e => e.UserId, "IX_Notifications_UserId"); entity.Property(e => e.ActionLink).HasMaxLength(500); entity.Property(e => e.ActionText).HasMaxLength(100); entity.Property(e => e.CreatedAt) .HasDefaultValueSql("now()") .HasColumnType("timestamp"); entity.Property(e => e.Message).HasMaxLength(1000); entity.Property(e => e.Title).HasMaxLength(200); entity.Property(e => e.Type) .HasMaxLength(50) .HasDefaultValue("Info"); entity.HasOne(d => d.User).WithMany(p => p.Notifications) .HasForeignKey(d => d.UserId) .HasConstraintName("FK_Notifications_Users"); }); modelBuilder.Entity(entity => { entity.ToTable("Users"); entity.HasIndex(e => e.Email, "UQ_Users_Email").IsUnique(); entity.Property(e => e.Id).HasDefaultValueSql("gen_random_uuid()"); entity.Property(e => e.Address).HasMaxLength(255); entity.Property(e => e.CreatedAt) .HasDefaultValueSql("now()") .HasColumnType("timestamp"); entity.Property(e => e.Email).HasMaxLength(100); entity.Property(e => e.FcmToken).HasMaxLength(500); entity.Property(e => e.FullName).HasMaxLength(100); entity.Property(e => e.IsActive).HasDefaultValue(true); entity.Property(e => e.PhoneNumber).HasMaxLength(20); entity.Property(e => e.Role) .HasMaxLength(20) .HasDefaultValue("User"); entity.Property(e => e.StudentId).HasMaxLength(20); entity.Property(e => e.SuspensionEndDate).HasColumnType("timestamp"); entity.Property(e => e.UpdatedAt).HasColumnType("timestamp"); entity.Property(e => e.Balance).HasColumnType("decimal(18, 2)").HasDefaultValue(0); }); modelBuilder.Entity(entity => { entity.Property(e => e.Id).HasDefaultValueSql("gen_random_uuid()"); entity.Property(e => e.ExpiryDate).HasColumnType("timestamp"); entity.Property(e => e.ExternalRedemptionId).HasMaxLength(100); entity.Property(e => e.IsActive).HasDefaultValue(true); entity.Property(e => e.StartDate).HasColumnType("timestamp"); entity.Property(e => e.Status) .HasMaxLength(20) .HasDefaultValue("Active"); entity.HasOne(d => d.Membership).WithMany(p => p.UserSubscriptions) .HasForeignKey(d => d.MembershipId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_UserSubscriptions_Memberships"); entity.HasOne(d => d.User).WithMany(p => p.UserSubscriptions) .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_UserSubscriptions_Users"); }); modelBuilder.Entity(entity => { entity.HasIndex(e => e.BookId, "IX_WishlistItems_BookId"); entity.HasIndex(e => e.UserId, "IX_WishlistItems_UserId"); entity.Property(e => e.AddedAt) .HasDefaultValueSql("now()") .HasColumnType("timestamp"); entity.HasOne(d => d.Book).WithMany(p => p.WishlistItems) .HasForeignKey(d => d.BookId) .HasConstraintName("FK_WishlistItems_Books"); entity.HasOne(d => d.User).WithMany(p => p.WishlistItems) .HasForeignKey(d => d.UserId) .HasConstraintName("FK_WishlistItems_Users"); }); modelBuilder.Entity(entity => { entity.ToTable("WalletTransactions"); entity.HasKey(e => e.Id); entity.Property(e => e.Id).HasDefaultValueSql("gen_random_uuid()"); entity.Property(e => e.Amount).HasColumnType("decimal(18, 2)"); entity.Property(e => e.Type).HasMaxLength(20); entity.Property(e => e.CreatedAt).HasColumnType("timestamp").HasDefaultValueSql("now()"); entity.HasOne(d => d.User) .WithMany() .HasForeignKey(d => d.UserId) .OnDelete(DeleteBehavior.Cascade); }); OnModelCreatingPartial(modelBuilder); } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); }