Initial commit of LittleShop project (excluding large archives)
- BTCPay Server integration - TeleBot Telegram bot - Review system - Admin area - Docker deployment configuration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,7 @@ public class LittleShopContext : DbContext
|
||||
public DbSet<Customer> Customers { get; set; }
|
||||
public DbSet<CustomerMessage> CustomerMessages { get; set; }
|
||||
public DbSet<PushSubscription> PushSubscriptions { get; set; }
|
||||
public DbSet<Review> Reviews { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
@@ -200,5 +201,42 @@ public class LittleShopContext : DbContext
|
||||
entity.HasIndex(e => e.SubscribedAt);
|
||||
entity.HasIndex(e => e.IsActive);
|
||||
});
|
||||
|
||||
// Review entity
|
||||
modelBuilder.Entity<Review>(entity =>
|
||||
{
|
||||
entity.HasOne(r => r.Product)
|
||||
.WithMany(p => p.Reviews)
|
||||
.HasForeignKey(r => r.ProductId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
entity.HasOne(r => r.Customer)
|
||||
.WithMany()
|
||||
.HasForeignKey(r => r.CustomerId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
entity.HasOne(r => r.Order)
|
||||
.WithMany()
|
||||
.HasForeignKey(r => r.OrderId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
|
||||
entity.HasOne(r => r.ApprovedByUser)
|
||||
.WithMany()
|
||||
.HasForeignKey(r => r.ApprovedByUserId)
|
||||
.OnDelete(DeleteBehavior.SetNull);
|
||||
|
||||
// Indexes for performance
|
||||
entity.HasIndex(e => e.ProductId);
|
||||
entity.HasIndex(e => e.CustomerId);
|
||||
entity.HasIndex(e => e.OrderId);
|
||||
entity.HasIndex(e => e.Rating);
|
||||
entity.HasIndex(e => e.IsApproved);
|
||||
entity.HasIndex(e => e.IsActive);
|
||||
entity.HasIndex(e => e.CreatedAt);
|
||||
|
||||
// Composite indexes for common queries
|
||||
entity.HasIndex(e => new { e.ProductId, e.IsApproved, e.IsActive });
|
||||
entity.HasIndex(e => new { e.CustomerId, e.ProductId }).IsUnique(); // One review per customer per product
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user