Added payment database objects
This commit is contained in:
@@ -1,62 +0,0 @@
|
|||||||
namespace LiteCharms.Features.MidrandBooks;
|
|
||||||
|
|
||||||
public enum PublisherTypes : int
|
|
||||||
{
|
|
||||||
Individual = 0,
|
|
||||||
Company = 1,
|
|
||||||
Organization = 2,
|
|
||||||
SelfPublished = 3,
|
|
||||||
UniversityPress = 4,
|
|
||||||
GovernmentAgency = 5,
|
|
||||||
NonProfit = 6,
|
|
||||||
Independent = 7
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BookTypes : int
|
|
||||||
{
|
|
||||||
Fiction = 0,
|
|
||||||
NonFiction = 1,
|
|
||||||
Academic = 2,
|
|
||||||
SelfHelp = 3,
|
|
||||||
Biography = 4,
|
|
||||||
Poetry = 5,
|
|
||||||
Children = 6,
|
|
||||||
YoungAdult = 7,
|
|
||||||
ScienceFiction = 8,
|
|
||||||
Fantasy = 9
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BookContentTypes : int
|
|
||||||
{
|
|
||||||
Text = 0,
|
|
||||||
Image = 1,
|
|
||||||
Video = 2,
|
|
||||||
Audio = 3,
|
|
||||||
Interactive = 4,
|
|
||||||
Markdown = 5,
|
|
||||||
Html = 6,
|
|
||||||
Json = 7,
|
|
||||||
Yaml = 8
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BookPageTypes : int
|
|
||||||
{
|
|
||||||
Cover = 0,
|
|
||||||
Preface = 1,
|
|
||||||
Introduction = 2,
|
|
||||||
Content = 3,
|
|
||||||
Closing = 4,
|
|
||||||
Referencer = 5,
|
|
||||||
Credits = 6,
|
|
||||||
BackCover = 7
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ProductTypes : int
|
|
||||||
{
|
|
||||||
Book = 1,
|
|
||||||
Journal = 2,
|
|
||||||
Magazine = 3,
|
|
||||||
EBook = 4,
|
|
||||||
Audiobook = 5,
|
|
||||||
Accessory = 6
|
|
||||||
}
|
|
||||||
@@ -4,12 +4,61 @@ using LiteCharms.Features.MidrandBooks.Categories.Models;
|
|||||||
using LiteCharms.Features.MidrandBooks.Customers.Models;
|
using LiteCharms.Features.MidrandBooks.Customers.Models;
|
||||||
using LiteCharms.Features.MidrandBooks.Orders.Models;
|
using LiteCharms.Features.MidrandBooks.Orders.Models;
|
||||||
using LiteCharms.Features.MidrandBooks.Pages.Models;
|
using LiteCharms.Features.MidrandBooks.Pages.Models;
|
||||||
|
using LiteCharms.Features.MidrandBooks.Payments.Models;
|
||||||
using LiteCharms.Features.MidrandBooks.Products.Models;
|
using LiteCharms.Features.MidrandBooks.Products.Models;
|
||||||
|
|
||||||
namespace LiteCharms.Features.MidrandBooks.Extensions;
|
namespace LiteCharms.Features.MidrandBooks.Extensions;
|
||||||
|
|
||||||
public static class Mappers
|
public static class Mappers
|
||||||
{
|
{
|
||||||
|
public static PaymentLedger ToModel(this Payments.Entities.PaymentLedger entity) => new()
|
||||||
|
{
|
||||||
|
Id = entity.Id,
|
||||||
|
CreatedAt = entity.CreatedAt,
|
||||||
|
CustomerId = entity.CustomerId,
|
||||||
|
OrderId = entity.OrderId,
|
||||||
|
PaymentGatewayId = entity.PaymentGatewayId,
|
||||||
|
PaymentGatewayReference = entity.PaymentGatewayReference,
|
||||||
|
PaymentId = entity.PaymentId,
|
||||||
|
Status = entity.Status,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static PaymentGateway ToModel(this Payments.Entities.PaymentGateway entity) => new()
|
||||||
|
{
|
||||||
|
Id = entity.Id,
|
||||||
|
CreatedAt = entity.CreatedAt,
|
||||||
|
UpdatedAt = entity.UpdatedAt,
|
||||||
|
Enabled = entity.Enabled,
|
||||||
|
IsSandbox = entity.IsSandbox,
|
||||||
|
MerchantId = entity.MerchantId,
|
||||||
|
MerchantKey = entity.MerchantKey,
|
||||||
|
Name = entity.Name,
|
||||||
|
Passphrase = entity.Passphrase,
|
||||||
|
Website = entity.Website,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Payment ToModel(this Payments.Entities.Payment entity) => new()
|
||||||
|
{
|
||||||
|
Id = entity.Id,
|
||||||
|
Amount = entity.Amount,
|
||||||
|
CreatedAt = entity.CreatedAt,
|
||||||
|
OrderId = entity.OrderId,
|
||||||
|
Reference = entity.Reference,
|
||||||
|
Status = entity.Status,
|
||||||
|
UpdatedAt = entity.UpdatedAt,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static ProductInventory ToModel(this Products.Entities.ProductInventory entity) => new()
|
||||||
|
{
|
||||||
|
Id = entity.Id,
|
||||||
|
CreatedAt = entity.CreatedAt,
|
||||||
|
ProductId = entity.ProductId,
|
||||||
|
ProductPriceId = entity.ProductPriceId,
|
||||||
|
Status = entity.Status,
|
||||||
|
TotalAllocated = entity.TotalAllocated,
|
||||||
|
TotalReserved = entity.TotalReserved,
|
||||||
|
};
|
||||||
|
|
||||||
public static Category ToModel(this Categories.Entities.Category entity) => new()
|
public static Category ToModel(this Categories.Entities.Category entity) => new()
|
||||||
{
|
{
|
||||||
Id = entity.Id,
|
Id = entity.Id,
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using LiteCharms.Features.MidrandBooks.Orders.Entities;
|
||||||
|
|
||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
[EntityTypeConfiguration<PaymentConfiguration, Payment>]
|
||||||
|
public class Payment : Models.Payment
|
||||||
|
{
|
||||||
|
public virtual Order? Order { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
public sealed class PaymentConfiguration : IEntityTypeConfiguration<Payment>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Payment> builder)
|
||||||
|
{
|
||||||
|
builder.ToTable("Payments");
|
||||||
|
|
||||||
|
builder.HasKey(f => f.Id);
|
||||||
|
builder.Property(f => f.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
|
||||||
|
builder.Property(f => f.UpdatedAt);
|
||||||
|
builder.Property(f => f.Status).IsRequired();
|
||||||
|
builder.Property(f => f.Reference).IsRequired();
|
||||||
|
builder.Property(f => f.OrderId).IsRequired();
|
||||||
|
builder.Property(f => f.Amount).IsRequired().HasPrecision(18, 2);
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Order)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey(f => f.OrderId)
|
||||||
|
.OnDelete(DeleteBehavior.Restrict);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
[EntityTypeConfiguration<PaymentGatewayConfiguration, PaymentGateway>]
|
||||||
|
public class PaymentGateway : Models.PaymentGateway;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
public sealed class PaymentGatewayConfiguration : IEntityTypeConfiguration<PaymentGateway>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<PaymentGateway> builder)
|
||||||
|
{
|
||||||
|
builder.ToTable("Gateways");
|
||||||
|
|
||||||
|
builder.HasKey(f => f.Id);
|
||||||
|
builder.Property(f => f.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
|
||||||
|
builder.Property(f => f.UpdatedAt);
|
||||||
|
builder.Property(f => f.Website).IsRequired(false);
|
||||||
|
builder.Property(f => f.IsSandbox);
|
||||||
|
builder.Property(f => f.MerchantKey).IsRequired();
|
||||||
|
builder.Property(f => f.MerchantId).IsRequired();
|
||||||
|
builder.Property(f => f.Enabled);
|
||||||
|
builder.Property(f => f.Name).IsRequired();
|
||||||
|
builder.Property(f => f.Passphrase).IsRequired();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using LiteCharms.Features.MidrandBooks.Customers.Entities;
|
||||||
|
using LiteCharms.Features.MidrandBooks.Orders.Entities;
|
||||||
|
|
||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
[EntityTypeConfiguration<PaymentLedgerConfiguration, PaymentLedger>]
|
||||||
|
public class PaymentLedger : Models.PaymentLedger
|
||||||
|
{
|
||||||
|
public virtual Payment? Payment { get; set; }
|
||||||
|
|
||||||
|
public virtual Order? Order { get; set; }
|
||||||
|
|
||||||
|
public virtual Customer? Customer { get; set; }
|
||||||
|
|
||||||
|
public virtual PaymentGateway? Gateway { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Entities;
|
||||||
|
|
||||||
|
public sealed class PaymentLedgerConfiguration : IEntityTypeConfiguration<PaymentLedger>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<PaymentLedger> builder)
|
||||||
|
{
|
||||||
|
builder.ToTable("Ledger");
|
||||||
|
|
||||||
|
builder.HasKey(f => f.Id);
|
||||||
|
builder.Property(f => f.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
|
||||||
|
builder.Property(f => f.Status).IsRequired();
|
||||||
|
builder.Property(f => f.PaymentGatewayReference).IsRequired(false);
|
||||||
|
builder.Property(f => f.PaymentGatewayId).IsRequired(false);
|
||||||
|
builder.Property(f => f.OrderId).IsRequired();
|
||||||
|
builder.Property(f => f.CustomerId).IsRequired();
|
||||||
|
builder.Property(f => f.PaymentId).IsRequired();
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Payment)
|
||||||
|
.WithMany()
|
||||||
|
.IsRequired()
|
||||||
|
.HasForeignKey(f => f.PaymentId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Order)
|
||||||
|
.WithMany()
|
||||||
|
.IsRequired()
|
||||||
|
.HasForeignKey(f => f.OrderId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Customer)
|
||||||
|
.WithMany()
|
||||||
|
.IsRequired()
|
||||||
|
.HasForeignKey(f => f.CustomerId);
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Gateway)
|
||||||
|
.WithMany()
|
||||||
|
.IsRequired(false)
|
||||||
|
.HasForeignKey(f => f.PaymentGatewayId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Models;
|
||||||
|
|
||||||
|
public class Payment
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
public DateTime? UpdatedAt { get; set; }
|
||||||
|
|
||||||
|
public decimal Amount { get; set; }
|
||||||
|
|
||||||
|
public long OrderId { get; set; }
|
||||||
|
|
||||||
|
public string? Reference { get; set; }
|
||||||
|
|
||||||
|
public PaymentStatuses Status { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Models;
|
||||||
|
|
||||||
|
public class PaymentGateway
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
public DateTime? UpdatedAt { get; set; }
|
||||||
|
|
||||||
|
public string? Name { get; set; }
|
||||||
|
|
||||||
|
public string? Website { get; set; }
|
||||||
|
|
||||||
|
public string? MerchantId { get; set; }
|
||||||
|
|
||||||
|
public string? MerchantKey { get; set; }
|
||||||
|
|
||||||
|
public string? Passphrase { get; set; }
|
||||||
|
|
||||||
|
public bool IsSandbox { get; set; }
|
||||||
|
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Payments.Models;
|
||||||
|
|
||||||
|
public class PaymentLedger
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
public LedgerStatuses Status { get; set; }
|
||||||
|
|
||||||
|
public long OrderId { get; set; }
|
||||||
|
|
||||||
|
public long PaymentId { get; set; }
|
||||||
|
|
||||||
|
public long CustomerId { get; set; }
|
||||||
|
|
||||||
|
public string? PaymentGatewayReference { get; set; }
|
||||||
|
|
||||||
|
public long? PaymentGatewayId { get; set; }
|
||||||
|
}
|
||||||
@@ -40,4 +40,12 @@ public sealed class MidrandBooksDbContext(DbContextOptions<MidrandBooksDbContext
|
|||||||
public DbSet<Category> Categories => Set<Category>();
|
public DbSet<Category> Categories => Set<Category>();
|
||||||
|
|
||||||
public DbSet<ProductCategory> ProductCategories => Set<ProductCategory>();
|
public DbSet<ProductCategory> ProductCategories => Set<ProductCategory>();
|
||||||
|
|
||||||
|
public DbSet<ProductInventory> Inventories => Set<ProductInventory>();
|
||||||
|
|
||||||
|
public DbSet<Payment> Payments => Set<Payment>();
|
||||||
|
|
||||||
|
public DbSet<PaymentGateway> Gateways => Set<PaymentGateway>();
|
||||||
|
|
||||||
|
public DbSet<PaymentLedger> Ledger => Set<PaymentLedger>();
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+1235
File diff suppressed because it is too large
Load Diff
+185
@@ -0,0 +1,185 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AddedPaymentObjects : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Gateways",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<long>(type: "bigint", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
|
||||||
|
UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||||
|
Name = table.Column<string>(type: "text", nullable: false),
|
||||||
|
Website = table.Column<string>(type: "text", nullable: true),
|
||||||
|
MerchantId = table.Column<string>(type: "text", nullable: false),
|
||||||
|
MerchantKey = table.Column<string>(type: "text", nullable: false),
|
||||||
|
Passphrase = table.Column<string>(type: "text", nullable: false),
|
||||||
|
IsSandbox = table.Column<bool>(type: "boolean", nullable: false),
|
||||||
|
Enabled = table.Column<bool>(type: "boolean", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Gateways", x => x.Id);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Inventories",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<long>(type: "bigint", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
|
||||||
|
Status = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
ProductId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
ProductPriceId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
TotalAllocated = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
TotalReserved = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Inventories", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Inventories_Prices_ProductPriceId",
|
||||||
|
column: x => x.ProductPriceId,
|
||||||
|
principalTable: "Prices",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Inventories_Products_ProductId",
|
||||||
|
column: x => x.ProductId,
|
||||||
|
principalTable: "Products",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Payments",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<long>(type: "bigint", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
|
||||||
|
UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
|
||||||
|
Amount = table.Column<decimal>(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false),
|
||||||
|
OrderId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
Reference = table.Column<string>(type: "text", nullable: false),
|
||||||
|
Status = table.Column<int>(type: "integer", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Payments", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Payments_Orders_OrderId",
|
||||||
|
column: x => x.OrderId,
|
||||||
|
principalTable: "Orders",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Restrict);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Ledger",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<long>(type: "bigint", nullable: false)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||||
|
CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"),
|
||||||
|
Status = table.Column<int>(type: "integer", nullable: false),
|
||||||
|
OrderId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
PaymentId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
CustomerId = table.Column<long>(type: "bigint", nullable: false),
|
||||||
|
PaymentGatewayReference = table.Column<string>(type: "text", nullable: true),
|
||||||
|
PaymentGatewayId = table.Column<long>(type: "bigint", nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Ledger", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Ledger_Customers_CustomerId",
|
||||||
|
column: x => x.CustomerId,
|
||||||
|
principalTable: "Customers",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Ledger_Gateways_PaymentGatewayId",
|
||||||
|
column: x => x.PaymentGatewayId,
|
||||||
|
principalTable: "Gateways",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Ledger_Orders_OrderId",
|
||||||
|
column: x => x.OrderId,
|
||||||
|
principalTable: "Orders",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Ledger_Payments_PaymentId",
|
||||||
|
column: x => x.PaymentId,
|
||||||
|
principalTable: "Payments",
|
||||||
|
principalColumn: "Id",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Inventories_ProductId",
|
||||||
|
table: "Inventories",
|
||||||
|
column: "ProductId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Inventories_ProductPriceId",
|
||||||
|
table: "Inventories",
|
||||||
|
column: "ProductPriceId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Ledger_CustomerId",
|
||||||
|
table: "Ledger",
|
||||||
|
column: "CustomerId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Ledger_OrderId",
|
||||||
|
table: "Ledger",
|
||||||
|
column: "OrderId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Ledger_PaymentGatewayId",
|
||||||
|
table: "Ledger",
|
||||||
|
column: "PaymentGatewayId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Ledger_PaymentId",
|
||||||
|
table: "Ledger",
|
||||||
|
column: "PaymentId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Payments_OrderId",
|
||||||
|
table: "Payments",
|
||||||
|
column: "OrderId");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Inventories");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Ledger");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Gateways");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Payments");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+228
@@ -536,6 +536,133 @@ namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations
|
|||||||
b.ToTable("BookPages", (string)null);
|
b.ToTable("BookPages", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Payment", b =>
|
||||||
|
{
|
||||||
|
b.Property<long>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
||||||
|
|
||||||
|
b.Property<decimal>("Amount")
|
||||||
|
.HasPrecision(18, 2)
|
||||||
|
.HasColumnType("numeric(18,2)");
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasDefaultValueSql("now()");
|
||||||
|
|
||||||
|
b.Property<long>("OrderId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<string>("Reference")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int>("Status")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("UpdatedAt")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("OrderId");
|
||||||
|
|
||||||
|
b.ToTable("Payments", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.PaymentGateway", b =>
|
||||||
|
{
|
||||||
|
b.Property<long>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasDefaultValueSql("now()");
|
||||||
|
|
||||||
|
b.Property<bool>("Enabled")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<bool>("IsSandbox")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<string>("MerchantId")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("MerchantKey")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Passphrase")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("UpdatedAt")
|
||||||
|
.HasColumnType("timestamp with time zone");
|
||||||
|
|
||||||
|
b.Property<string>("Website")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Gateways", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.PaymentLedger", b =>
|
||||||
|
{
|
||||||
|
b.Property<long>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasDefaultValueSql("now()");
|
||||||
|
|
||||||
|
b.Property<long>("CustomerId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<long>("OrderId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<long?>("PaymentGatewayId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<string>("PaymentGatewayReference")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<long>("PaymentId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<int>("Status")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CustomerId");
|
||||||
|
|
||||||
|
b.HasIndex("OrderId");
|
||||||
|
|
||||||
|
b.HasIndex("PaymentGatewayId");
|
||||||
|
|
||||||
|
b.HasIndex("PaymentId");
|
||||||
|
|
||||||
|
b.ToTable("Ledger", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Refund", b =>
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Refund", b =>
|
||||||
{
|
{
|
||||||
b.Property<long>("Id")
|
b.Property<long>("Id")
|
||||||
@@ -653,6 +780,43 @@ namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations
|
|||||||
b.ToTable("ProductCategories", (string)null);
|
b.ToTable("ProductCategories", (string)null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductInventory", b =>
|
||||||
|
{
|
||||||
|
b.Property<long>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
||||||
|
|
||||||
|
b.Property<DateTime>("CreatedAt")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasDefaultValueSql("now()");
|
||||||
|
|
||||||
|
b.Property<long>("ProductId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<long>("ProductPriceId")
|
||||||
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
b.Property<int>("Status")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("TotalAllocated")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<int>("TotalReserved")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("ProductId");
|
||||||
|
|
||||||
|
b.HasIndex("ProductPriceId");
|
||||||
|
|
||||||
|
b.ToTable("Inventories", (string)null);
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductPrice", b =>
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductPrice", b =>
|
||||||
{
|
{
|
||||||
b.Property<long>("Id")
|
b.Property<long>("Id")
|
||||||
@@ -891,6 +1055,51 @@ namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations
|
|||||||
b.Navigation("References");
|
b.Navigation("References");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Payment", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Orders.Entities.Order", "Order")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("OrderId")
|
||||||
|
.OnDelete(DeleteBehavior.Restrict)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Order");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.PaymentLedger", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Customers.Entities.Customer", "Customer")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CustomerId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Orders.Entities.Order", "Order")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("OrderId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Payments.Entities.PaymentGateway", "Gateway")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("PaymentGatewayId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Payments.Entities.Payment", "Payment")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("PaymentId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Customer");
|
||||||
|
|
||||||
|
b.Navigation("Gateway");
|
||||||
|
|
||||||
|
b.Navigation("Order");
|
||||||
|
|
||||||
|
b.Navigation("Payment");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Refund", b =>
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Payments.Entities.Refund", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("LiteCharms.Features.MidrandBooks.Orders.Entities.Order", "Order")
|
b.HasOne("LiteCharms.Features.MidrandBooks.Orders.Entities.Order", "Order")
|
||||||
@@ -950,6 +1159,25 @@ namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations
|
|||||||
b.Navigation("Product");
|
b.Navigation("Product");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductInventory", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Products.Entities.Product", "Product")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ProductId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("LiteCharms.Features.MidrandBooks.Products.Entities.ProductPrice", "Price")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ProductPriceId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Price");
|
||||||
|
|
||||||
|
b.Navigation("Product");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductPrice", b =>
|
modelBuilder.Entity("LiteCharms.Features.MidrandBooks.Products.Entities.ProductPrice", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("LiteCharms.Features.MidrandBooks.Products.Entities.Product", "Product")
|
b.HasOne("LiteCharms.Features.MidrandBooks.Products.Entities.Product", "Product")
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Products.Entities;
|
||||||
|
|
||||||
|
[EntityTypeConfiguration<ProductInventoryConfiguration, ProductInventory>]
|
||||||
|
public class ProductInventory : Models.ProductInventory
|
||||||
|
{
|
||||||
|
public virtual Product? Product { get; set; }
|
||||||
|
|
||||||
|
public virtual ProductPrice? Price { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Products.Entities;
|
||||||
|
|
||||||
|
public sealed class ProductInventoryConfiguration : IEntityTypeConfiguration<ProductInventory>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<ProductInventory> builder)
|
||||||
|
{
|
||||||
|
builder.ToTable("Inventories");
|
||||||
|
|
||||||
|
builder.HasKey(f => f.Id);
|
||||||
|
builder.Property(f => f.CreatedAt).IsRequired().ValueGeneratedOnAdd().HasDefaultValueSql("now()");
|
||||||
|
builder.Property(f => f.Status).IsRequired();
|
||||||
|
builder.Property(f => f.TotalAllocated).IsRequired();
|
||||||
|
builder.Property(f => f.TotalReserved).IsRequired();
|
||||||
|
builder.Property(f => f.ProductId).IsRequired();
|
||||||
|
builder.Property(f => f.ProductPriceId).IsRequired();
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Product)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey(f => f.ProductId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
builder.HasOne(f => f.Price)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey(f => f.ProductPriceId)
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
namespace LiteCharms.Features.MidrandBooks.Products.Models;
|
||||||
|
|
||||||
|
public class ProductInventory
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
public InventoryStatuses Status { get; set; }
|
||||||
|
|
||||||
|
public long ProductId { get; set; }
|
||||||
|
|
||||||
|
public long ProductPriceId { get; set; }
|
||||||
|
|
||||||
|
public int TotalAllocated { get; set; }
|
||||||
|
|
||||||
|
public int TotalReserved { get; set; }
|
||||||
|
}
|
||||||
@@ -1,5 +1,35 @@
|
|||||||
namespace LiteCharms.Features;
|
namespace LiteCharms.Features;
|
||||||
|
|
||||||
|
public enum InventoryStatuses : int
|
||||||
|
{
|
||||||
|
Adjustment = 0,
|
||||||
|
Reserved = 1,
|
||||||
|
Released = 2,
|
||||||
|
Sold = 3,
|
||||||
|
Replenished = 4,
|
||||||
|
Correction = 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum LedgerStatuses : int
|
||||||
|
{
|
||||||
|
Changed = 0,
|
||||||
|
Sent = 1,
|
||||||
|
Received = 2,
|
||||||
|
Refunded = 3,
|
||||||
|
Cancelled = 4,
|
||||||
|
Failed = 5,
|
||||||
|
Partial = 6,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum PaymentStatuses : int
|
||||||
|
{
|
||||||
|
NotPaid = 0,
|
||||||
|
Paid = 1,
|
||||||
|
Cancelled = 2,
|
||||||
|
Requested = 3,
|
||||||
|
Failed = 4,
|
||||||
|
}
|
||||||
|
|
||||||
public enum ShippingProviderTypes : int
|
public enum ShippingProviderTypes : int
|
||||||
{
|
{
|
||||||
Dsv = 0,
|
Dsv = 0,
|
||||||
@@ -115,3 +145,64 @@ public enum Priorities : int
|
|||||||
Medium = 1,
|
Medium = 1,
|
||||||
High = 2,
|
High = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum PublisherTypes : int
|
||||||
|
{
|
||||||
|
Individual = 0,
|
||||||
|
Company = 1,
|
||||||
|
Organization = 2,
|
||||||
|
SelfPublished = 3,
|
||||||
|
UniversityPress = 4,
|
||||||
|
GovernmentAgency = 5,
|
||||||
|
NonProfit = 6,
|
||||||
|
Independent = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BookTypes : int
|
||||||
|
{
|
||||||
|
Fiction = 0,
|
||||||
|
NonFiction = 1,
|
||||||
|
Academic = 2,
|
||||||
|
SelfHelp = 3,
|
||||||
|
Biography = 4,
|
||||||
|
Poetry = 5,
|
||||||
|
Children = 6,
|
||||||
|
YoungAdult = 7,
|
||||||
|
ScienceFiction = 8,
|
||||||
|
Fantasy = 9
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BookContentTypes : int
|
||||||
|
{
|
||||||
|
Text = 0,
|
||||||
|
Image = 1,
|
||||||
|
Video = 2,
|
||||||
|
Audio = 3,
|
||||||
|
Interactive = 4,
|
||||||
|
Markdown = 5,
|
||||||
|
Html = 6,
|
||||||
|
Json = 7,
|
||||||
|
Yaml = 8
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BookPageTypes : int
|
||||||
|
{
|
||||||
|
Cover = 0,
|
||||||
|
Preface = 1,
|
||||||
|
Introduction = 2,
|
||||||
|
Content = 3,
|
||||||
|
Closing = 4,
|
||||||
|
Referencer = 5,
|
||||||
|
Credits = 6,
|
||||||
|
BackCover = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ProductTypes : int
|
||||||
|
{
|
||||||
|
Book = 1,
|
||||||
|
Journal = 2,
|
||||||
|
Magazine = 3,
|
||||||
|
EBook = 4,
|
||||||
|
Audiobook = 5,
|
||||||
|
Accessory = 6
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user