Created Order, Refund, Shipping

This commit is contained in:
Khwezi Mngoma
2026-05-26 08:24:38 +02:00
parent 20b747e89c
commit 70860efcfb
19 changed files with 320 additions and 11 deletions
@@ -0,0 +1,11 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
[EntityTypeConfiguration<OrderConfiguration, Order>]
public class Order : Models.Order
{
public virtual Shipping? Shipping { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; } = [];
public virtual ICollection<Refund> Refunds { get; set; } = [];
}
@@ -0,0 +1,17 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class OrderConfiguration : IEntityTypeConfiguration<Order>
{
public void Configure(EntityTypeBuilder<Order> builder)
{
builder.ToTable("Orders");
builder.HasKey(o => o.Id);
builder.Property(o => o.CustomerId).IsRequired();
builder.Property(o => o.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
builder.Property(o => o.UpdatedAt).HasDefaultValueSql("now()");
builder.Property(o => o.Status).IsRequired();
builder.Property(o => o.Total).IsRequired().HasColumnType("decimal(18,2)");
builder.Property(o => o.Notes).HasMaxLength(1000);
}
}
@@ -0,0 +1,14 @@
using LiteCharms.Features.MidrandBooks.AuthorBooks.Entities;
using LiteCharms.Features.MidrandBooks.Products.Entities;
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
[EntityTypeConfiguration<OrderItemConfiguration, OrderItem>]
public class OrderItem : Models.OrderItem
{
public virtual Order? Order { get; set; }
public virtual AuthorBook? AuthorBook { get; set; }
public virtual ProductPrice? ProductPrice { get; set; }
}
@@ -0,0 +1,31 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class OrderItemConfiguration : IEntityTypeConfiguration<OrderItem>
{
public void Configure(EntityTypeBuilder<OrderItem> builder)
{
builder.ToTable("OrderItems");
builder.HasKey(oi => oi.Id);
builder.Property(oi => oi.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("new()");
builder.Property(oi => oi.OrderId).IsRequired();
builder.Property(oi => oi.AuthorBookId).IsRequired();
builder.Property(oi => oi.ProductPriceId).IsRequired();
builder.Property(oi => oi.Quantity).IsRequired();
builder.HasOne(oi => oi.Order)
.WithMany(o => o.OrderItems)
.HasForeignKey(oi => oi.OrderId)
.OnDelete(DeleteBehavior.Cascade);
builder.HasOne(oi => oi.AuthorBook)
.WithMany()
.HasForeignKey(oi => oi.AuthorBookId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(oi => oi.ProductPrice)
.WithMany()
.HasForeignKey(oi => oi.ProductPriceId)
.OnDelete(DeleteBehavior.Restrict);
}
}
@@ -0,0 +1,7 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
[EntityTypeConfiguration<RefundConfiguration, Refund>]
public class Refund : Models.Refund
{
public virtual Order? Order { get; set; }
}
@@ -0,0 +1,22 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class RefundConfiguration : IEntityTypeConfiguration<Refund>
{
public void Configure(EntityTypeBuilder<Refund> builder)
{
builder.ToTable("Refunds");
builder.HasKey(r => r.Id);
builder.Property(r => r.OrderId).IsRequired();
builder.Property(o => o.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
builder.Property(o => o.UpdatedAt).HasDefaultValueSql("now()");
builder.Property(o => o.Status).IsRequired();
builder.Property(r => r.Amount).IsRequired().HasPrecision(18, 2);
builder.Property(r => r.Reason).HasMaxLength(1000);
builder.HasOne(r => r.Order)
.WithMany(o => o.Refunds)
.HasForeignKey(r => r.OrderId)
.OnDelete(DeleteBehavior.Restrict);
}
}
@@ -0,0 +1,13 @@
using LiteCharms.Features.MidrandBooks.Customers.Entities;
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
[EntityTypeConfiguration<ShippingConfiguration, Shipping>]
public class Shipping : Models.Shipping
{
public virtual Order? Order { get; set; }
public virtual Address? Address { get; set; }
public virtual ShippingProvider? ShippingProvider { get; set; }
}
@@ -0,0 +1,32 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class ShippingConfiguration : IEntityTypeConfiguration<Shipping>
{
public void Configure(EntityTypeBuilder<Shipping> builder)
{
builder.ToTable("Shippings");
builder.HasKey(s => s.Id);
builder.Property(s => s.OrderId).IsRequired();
builder.Property(s => s.AddressId).IsRequired();
builder.Property(s => s.ShippingProviderId).IsRequired();
builder.Property(s => s.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
builder.Property(s => s.UpdatedAt).HasDefaultValueSql("now()");
builder.Property(s => s.Status).IsRequired();
builder.HasOne(s => s.Order)
.WithOne(o => o.Shipping)
.HasForeignKey<Shipping>(s => s.OrderId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(s => s.Address)
.WithMany()
.HasForeignKey(s => s.AddressId)
.OnDelete(DeleteBehavior.Restrict);
builder.HasOne(f => f.ShippingProvider)
.WithMany(f => f.Shippings)
.HasForeignKey(f => f.ShippingProviderId)
.OnDelete(DeleteBehavior.Restrict);
}
}
@@ -0,0 +1,6 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class ShippingProvider : Models.ShippingProvider
{
public virtual ICollection<Shipping> Shippings { get; set; } = [];
}
@@ -0,0 +1,17 @@
namespace LiteCharms.Features.MidrandBooks.Orders.Entities;
public class ShippingProviderConfiguration : IEntityTypeConfiguration<ShippingProvider>
{
public void Configure(EntityTypeBuilder<ShippingProvider> builder)
{
builder.ToTable("ShippingProviders");
builder.HasKey(f => f.Id);
builder.Property(f => f.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).HasDefaultValueSql("now()");
builder.Property(f => f.Type).IsRequired();
builder.Property(f => f.Name).IsRequired().HasMaxLength(100);
builder.Property(f => f.Price).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.Enabled).HasDefaultValue(true);
}
}