diff --git a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.Designer.cs b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..0c3942825 --- /dev/null +++ b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.Designer.cs @@ -0,0 +1,860 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.CartModule.Data.Repositories; + +namespace VirtoCommerce.CartModule.Data.Migrations +{ + [DbContext(typeof(CartDbContext))] + [Migration("20190909080032_AddCartSupportSoftDeletion")] + partial class AddCartSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.AddressEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AddressType") + .HasMaxLength(32); + + b.Property("City") + .IsRequired() + .HasMaxLength(128); + + b.Property("CountryCode") + .HasMaxLength(3); + + b.Property("CountryName") + .IsRequired() + .HasMaxLength(64); + + b.Property("Email") + .HasMaxLength(254); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(64); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(64); + + b.Property("Line1") + .HasMaxLength(2048); + + b.Property("Line2") + .HasMaxLength(2048); + + b.Property("Name") + .HasMaxLength(2048); + + b.Property("Organization") + .HasMaxLength(64); + + b.Property("PaymentId"); + + b.Property("Phone") + .HasMaxLength(64); + + b.Property("PostalCode") + .HasMaxLength(64); + + b.Property("RegionId") + .HasMaxLength(128); + + b.Property("RegionName") + .HasMaxLength(128); + + b.Property("ShipmentId"); + + b.Property("ShoppingCartId"); + + b.HasKey("Id"); + + b.HasIndex("PaymentId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartAddress"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.CartDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("LineItemId"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PaymentId"); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShipmentId"); + + b.Property("ShoppingCartId"); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ShoppingCartId"); + + b.HasIndex("ObjectType", "LineItemId") + .HasName("IX_ObjectType_LineItemId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.HasIndex("ObjectType", "PaymentId") + .HasName("IX_ObjectType_PaymentId"); + + b.HasIndex("ObjectType", "ShipmentId") + .HasName("IX_ObjectType_ShipmentId"); + + b.HasIndex("ObjectType", "ShoppingCartId") + .HasName("IX_ObjectType_ShoppingCartId"); + + b.ToTable("CartDynamicPropertyObjectValue"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.CouponEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Code") + .HasMaxLength(64); + + b.Property("ShoppingCartId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartCoupon"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.DiscountEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CouponCode") + .HasMaxLength(64); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("LineItemId"); + + b.Property("PaymentId"); + + b.Property("PromotionDescription") + .HasMaxLength(1024); + + b.Property("PromotionId") + .HasMaxLength(64); + + b.Property("ShipmentId"); + + b.Property("ShoppingCartId"); + + b.HasKey("Id"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartDiscount"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.LineItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CategoryId") + .HasMaxLength(64); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("Fee") + .HasColumnType("Money"); + + b.Property("FeeWithTax") + .HasColumnType("Money"); + + b.Property("FulfillmentLocationCode") + .HasMaxLength(64); + + b.Property("Height"); + + b.Property("ImageUrl") + .HasMaxLength(1028); + + b.Property("IsGift"); + + b.Property("IsReadOnly"); + + b.Property("IsReccuring"); + + b.Property("LanguageCode") + .HasMaxLength(16); + + b.Property("Length"); + + b.Property("ListPrice") + .HasColumnType("Money"); + + b.Property("ListPriceWithTax") + .HasColumnType("Money"); + + b.Property("MeasureUnit") + .HasMaxLength(32); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256); + + b.Property("PriceId") + .HasMaxLength(128); + + b.Property("ProductId") + .IsRequired() + .HasMaxLength(64); + + b.Property("ProductType") + .HasMaxLength(64); + + b.Property("Quantity"); + + b.Property("RequiredShipping"); + + b.Property("SalePrice") + .HasColumnType("Money"); + + b.Property("SalePriceWithTax") + .HasColumnType("Money"); + + b.Property("ShipmentMethodCode") + .HasMaxLength(64); + + b.Property("ShoppingCartId") + .IsRequired(); + + b.Property("Sku") + .IsRequired() + .HasMaxLength(64); + + b.Property("TaxIncluded"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("ValidationType") + .HasMaxLength(64); + + b.Property("VolumetricWeight"); + + b.Property("Weight"); + + b.Property("WeightUnit") + .HasMaxLength(32); + + b.Property("Width"); + + b.HasKey("Id"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartLineItem"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.PaymentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Amount") + .HasColumnType("Money"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(64); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("PaymentGatewayCode") + .HasMaxLength(64); + + b.Property("Price") + .HasColumnType("Money"); + + b.Property("PriceWithTax") + .HasColumnType("Money"); + + b.Property("Purpose") + .HasMaxLength(1024); + + b.Property("ShoppingCartId") + .IsRequired(); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("Total") + .HasColumnType("Money"); + + b.Property("TotalWithTax") + .HasColumnType("Money"); + + b.HasKey("Id"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartPayment"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("DimensionHeight"); + + b.Property("DimensionLength"); + + b.Property("DimensionUnit") + .HasMaxLength(16); + + b.Property("DimensionWidth"); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("Fee") + .HasColumnType("Money"); + + b.Property("FeeWithTax") + .HasColumnType("Money"); + + b.Property("FulfillmentCenterId") + .HasMaxLength(64); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Price") + .HasColumnType("Money"); + + b.Property("PriceWithTax") + .HasColumnType("Money"); + + b.Property("ShipmentMethodCode") + .HasMaxLength(64); + + b.Property("ShipmentMethodOption") + .HasMaxLength(64); + + b.Property("ShoppingCartId") + .IsRequired(); + + b.Property("TaxIncluded"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("Total") + .HasColumnType("Money"); + + b.Property("TotalWithTax") + .HasColumnType("Money"); + + b.Property("VolumetricWeight"); + + b.Property("WeightUnit") + .HasMaxLength(16); + + b.Property("WeightValue"); + + b.HasKey("Id"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartShipment"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.ShipmentItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BarCode") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("LineItemId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Quantity"); + + b.Property("ShipmentId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("LineItemId"); + + b.HasIndex("ShipmentId"); + + b.ToTable("CartShipmentItem"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("ChannelId") + .HasMaxLength(64); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CustomerName") + .HasMaxLength(128); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountTotal") + .HasColumnType("Money"); + + b.Property("DiscountTotalWithTax") + .HasColumnType("Money"); + + b.Property("Fee") + .HasColumnType("Money"); + + b.Property("FeeWithTax") + .HasColumnType("Money"); + + b.Property("HandlingTotal") + .HasColumnType("Money"); + + b.Property("HandlingTotalWithTax") + .HasColumnType("Money"); + + b.Property("IsAnonymous"); + + b.Property("IsDeleted"); + + b.Property("IsRecuring"); + + b.Property("LanguageCode") + .HasMaxLength(16); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(64); + + b.Property("OrganizationId") + .HasMaxLength(64); + + b.Property("PaymentTotal") + .HasColumnType("Money"); + + b.Property("PaymentTotalWithTax") + .HasColumnType("Money"); + + b.Property("ShippingTotal") + .HasColumnType("Money"); + + b.Property("ShippingTotalWithTax") + .HasColumnType("Money"); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("StoreId") + .IsRequired() + .HasMaxLength(64); + + b.Property("SubTotal") + .HasColumnType("Money"); + + b.Property("SubTotalWithTax") + .HasColumnType("Money"); + + b.Property("TaxIncluded"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("Total") + .HasColumnType("Money"); + + b.Property("Type") + .HasMaxLength(64); + + b.Property("ValidationType") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.ToTable("Cart"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.TaxDetailEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Amount") + .HasColumnType("Money"); + + b.Property("LineItemId"); + + b.Property("Name") + .HasMaxLength(1024); + + b.Property("PaymentId"); + + b.Property("Rate"); + + b.Property("ShipmentId"); + + b.Property("ShoppingCartId"); + + b.HasKey("Id"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ShoppingCartId"); + + b.ToTable("CartTaxDetail"); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.AddressEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.PaymentEntity", "Payment") + .WithMany("Addresses") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Addresses") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Addresses") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.CartDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.PaymentEntity", "Payment") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.CouponEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Coupons") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.DiscountEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("Discounts") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.PaymentEntity", "Payment") + .WithMany("Discounts") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Discounts") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Discounts") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.LineItemEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Items") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.PaymentEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Payments") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("Shipments") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.ShipmentItemEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.LineItemEntity", "LineItem") + .WithMany() + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Items") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CartModule.Data.Model.TaxDetailEntity", b => + { + b.HasOne("VirtoCommerce.CartModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("TaxDetails") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.PaymentEntity", "Payment") + .WithMany("TaxDetails") + .HasForeignKey("PaymentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("TaxDetails") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CartModule.Data.Model.ShoppingCartEntity", "ShoppingCart") + .WithMany("TaxDetails") + .HasForeignKey("ShoppingCartId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.cs b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.cs new file mode 100644 index 000000000..d360755e5 --- /dev/null +++ b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/20190909080032_AddCartSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.CartModule.Data.Migrations +{ + public partial class AddCartSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Cart", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Cart"); + } + } +} diff --git a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/CartDbContextModelSnapshot.cs b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/CartDbContextModelSnapshot.cs index 9d3c69e5f..5723b3520 100644 --- a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/CartDbContextModelSnapshot.cs +++ b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Migrations/CartDbContextModelSnapshot.cs @@ -1,4 +1,4 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -621,6 +621,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsAnonymous"); + b.Property("IsDeleted"); + b.Property("IsRecuring"); b.Property("LanguageCode") diff --git a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Model/ShoppingCartEntity.cs b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Model/ShoppingCartEntity.cs index 8cc300cc8..67f29d8ad 100644 --- a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Model/ShoppingCartEntity.cs +++ b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Model/ShoppingCartEntity.cs @@ -12,7 +12,7 @@ namespace VirtoCommerce.CartModule.Data.Model { - public class ShoppingCartEntity : AuditableEntity + public class ShoppingCartEntity : AuditableEntity, ISupportSoftDeletion { [StringLength(64)] public string Name { get; set; } @@ -106,6 +106,8 @@ public class ShoppingCartEntity : AuditableEntity [StringLength(64)] public string Type { get; set; } + public bool IsDeleted { get; set; } + #region NavigationProperties public virtual ObservableCollection Discounts { get; set; } = new NullCollection(); diff --git a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Repositories/CartDbContext.cs b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Repositories/CartDbContext.cs index 36529ba86..9478bbc57 100644 --- a/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Repositories/CartDbContext.cs +++ b/Modules/vc-module-cart/VirtoCommerce.CartModule.Data/Repositories/CartDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.CartModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.CartModule.Data.Repositories { - public class CartDbContext : DbContextWithTriggers + public class CartDbContext : DbContextWithTriggersAndQueryFiltersBase { public CartDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.Designer.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..1dc9f904b --- /dev/null +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.Designer.cs @@ -0,0 +1,1002 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.CatalogModule.Data.Repositories; + +namespace VirtoCommerce.CatalogModule.Data.Migrations +{ + [DbContext(typeof(CatalogDbContext))] + [Migration("20190909081932_AddCatalogSupportSoftDeletion")] + partial class AddCatalogSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssetEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ItemId") + .IsRequired(); + + b.Property("LanguageCode") + .HasMaxLength(5); + + b.Property("MimeType") + .HasMaxLength(128); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(1024); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Size"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2083); + + b.HasKey("Id"); + + b.HasIndex("ItemId"); + + b.ToTable("CatalogAsset"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssociationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AssociatedCategoryId"); + + b.Property("AssociatedItemId"); + + b.Property("AssociationType") + .IsRequired() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ItemId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Priority"); + + b.Property("Quantity"); + + b.Property("Tags") + .HasMaxLength(1024); + + b.HasKey("Id"); + + b.HasIndex("AssociatedCategoryId"); + + b.HasIndex("AssociatedItemId"); + + b.HasIndex("ItemId"); + + b.ToTable("Association"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DefaultLanguage") + .IsRequired() + .HasMaxLength(64); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("OwnerId") + .HasMaxLength(128); + + b.Property("Virtual"); + + b.HasKey("Id"); + + b.ToTable("Catalog"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogLanguageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .IsRequired(); + + b.Property("Language") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("CatalogId"); + + b.ToTable("CatalogLanguage"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .IsRequired() + .HasMaxLength(128); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("EndDate"); + + b.Property("IsActive"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("ParentCategoryId") + .HasMaxLength(128); + + b.Property("Priority"); + + b.Property("StartDate"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("CatalogId"); + + b.HasIndex("ParentCategoryId"); + + b.ToTable("Category"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryItemRelationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .IsRequired(); + + b.Property("CategoryId"); + + b.Property("ItemId") + .IsRequired(); + + b.Property("Priority"); + + b.HasKey("Id"); + + b.HasIndex("CatalogId"); + + b.HasIndex("CategoryId"); + + b.HasIndex("ItemId"); + + b.ToTable("CategoryItemRelation"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryRelationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("SourceCategoryId") + .IsRequired(); + + b.Property("TargetCatalogId"); + + b.Property("TargetCategoryId"); + + b.HasKey("Id"); + + b.HasIndex("SourceCategoryId"); + + b.HasIndex("TargetCatalogId"); + + b.HasIndex("TargetCategoryId"); + + b.ToTable("CategoryRelation"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.EditorialReviewEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Comments"); + + b.Property("Content"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ItemId") + .IsRequired(); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Priority"); + + b.Property("ReviewState"); + + b.Property("Source") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("ItemId"); + + b.ToTable("EditorialReview"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ImageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CategoryId"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Group") + .HasMaxLength(64); + + b.Property("ItemId"); + + b.Property("LanguageCode") + .HasMaxLength(5); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(1024); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("SortOrder"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2083); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("ItemId"); + + b.ToTable("CatalogImage"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AvailabilityRule"); + + b.Property("CatalogId") + .IsRequired(); + + b.Property("CategoryId"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DownloadExpiration"); + + b.Property("DownloadType") + .HasMaxLength(64); + + b.Property("EnableReview"); + + b.Property("EndDate"); + + b.Property("Gtin") + .HasMaxLength(64); + + b.Property("HasUserAgreement"); + + b.Property("Height"); + + b.Property("IsActive"); + + b.Property("IsBuyable"); + + b.Property("IsDeleted"); + + b.Property("Length"); + + b.Property("ManufacturerPartNumber") + .HasMaxLength(128); + + b.Property("MaxNumberOfDownload"); + + b.Property("MaxQuantity"); + + b.Property("MeasureUnit") + .HasMaxLength(32); + + b.Property("MinQuantity"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1024); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PackageType") + .HasMaxLength(128); + + b.Property("ParentId"); + + b.Property("Priority"); + + b.Property("ProductType") + .HasMaxLength(64); + + b.Property("ShippingType") + .HasMaxLength(64); + + b.Property("StartDate"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("TrackInventory"); + + b.Property("Vendor") + .HasMaxLength(128); + + b.Property("Weight"); + + b.Property("WeightUnit") + .HasMaxLength(32); + + b.Property("Width"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("Code") + .IsUnique(); + + b.HasIndex("ParentId"); + + b.HasIndex("CatalogId", "ParentId") + .HasName("IX_CatalogId_ParentId"); + + b.ToTable("Item"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyAttributeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Priority"); + + b.Property("PropertyAttributeName") + .IsRequired() + .HasMaxLength(128); + + b.Property("PropertyAttributeValue") + .IsRequired() + .HasMaxLength(128); + + b.Property("PropertyId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("PropertyId"); + + b.ToTable("PropertyAttribute"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Alias") + .IsRequired() + .HasMaxLength(512); + + b.Property("PropertyId") + .IsRequired(); + + b.Property("SortOrder"); + + b.HasKey("Id"); + + b.HasIndex("PropertyId"); + + b.HasIndex("Alias", "PropertyId") + .IsUnique() + .HasName("IX_AliasAndPropertyId"); + + b.ToTable("PropertyDictionaryItem"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("DictionaryItemId") + .IsRequired(); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("Value") + .HasMaxLength(512); + + b.HasKey("Id"); + + b.HasIndex("DictionaryItemId"); + + b.ToTable("PropertyDictionaryValue"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDisplayNameEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("Name") + .HasMaxLength(512); + + b.Property("PropertyId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("PropertyId"); + + b.ToTable("PropertyDisplayName"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AllowAlias"); + + b.Property("CatalogId"); + + b.Property("CategoryId"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("IsDeleted"); + + b.Property("IsEnum"); + + b.Property("IsHidden"); + + b.Property("IsInput"); + + b.Property("IsKey"); + + b.Property("IsLocaleDependant"); + + b.Property("IsMultiValue"); + + b.Property("IsRequired"); + + b.Property("IsSale"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PropertyValueType"); + + b.Property("TargetType") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("CatalogId"); + + b.HasIndex("CategoryId"); + + b.ToTable("Property"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValidationRuleEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CharCountMax"); + + b.Property("CharCountMin"); + + b.Property("IsUnique"); + + b.Property("PropertyId") + .IsRequired(); + + b.Property("RegExp") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("PropertyId"); + + b.ToTable("PropertyValidationRule"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CatalogId"); + + b.Property("CategoryId"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue"); + + b.Property("DictionaryItemId"); + + b.Property("IntegerValue"); + + b.Property("ItemId"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(64); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType"); + + b.HasKey("Id"); + + b.HasIndex("CatalogId"); + + b.HasIndex("CategoryId"); + + b.HasIndex("DictionaryItemId"); + + b.HasIndex("ItemId"); + + b.ToTable("PropertyValue"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.SeoInfoEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CategoryId"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ImageAltDescription") + .HasMaxLength(255); + + b.Property("IsActive"); + + b.Property("ItemId"); + + b.Property("Keyword") + .IsRequired() + .HasMaxLength(255); + + b.Property("Language") + .HasMaxLength(5); + + b.Property("MetaDescription") + .HasMaxLength(1024); + + b.Property("MetaKeywords") + .HasMaxLength(255); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("Title") + .HasMaxLength(255); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("ItemId"); + + b.ToTable("CatalogSeoInfo"); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssetEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem") + .WithMany("Assets") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.AssociationEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "AssociatedCategory") + .WithMany() + .HasForeignKey("AssociatedCategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "AssociatedItem") + .WithMany("ReferencedAssociations") + .HasForeignKey("AssociatedItemId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Item") + .WithMany("Associations") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CatalogLanguageEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany("CatalogLanguages") + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany() + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "ParentCategory") + .WithMany() + .HasForeignKey("ParentCategoryId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryItemRelationEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany() + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem") + .WithMany("CategoryLinks") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.CategoryRelationEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "SourceCategory") + .WithMany("OutgoingLinks") + .HasForeignKey("SourceCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "TargetCatalog") + .WithMany("IncomingLinks") + .HasForeignKey("TargetCatalogId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "TargetCategory") + .WithMany("IncomingLinks") + .HasForeignKey("TargetCategoryId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.EditorialReviewEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem") + .WithMany("EditorialReviews") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ImageEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany("Images") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem") + .WithMany("Images") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany() + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Parent") + .WithMany("Childrens") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyAttributeEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property") + .WithMany("PropertyAttributes") + .HasForeignKey("PropertyId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property") + .WithMany("DictionaryItems") + .HasForeignKey("PropertyId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryValueEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", "DictionaryItem") + .WithMany("DictionaryItemValues") + .HasForeignKey("DictionaryItemId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyDisplayNameEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property") + .WithMany("DisplayNames") + .HasForeignKey("PropertyId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany("Properties") + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany("Properties") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValidationRuleEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyEntity", "Property") + .WithMany("ValidationRules") + .HasForeignKey("PropertyId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.PropertyValueEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "Catalog") + .WithMany("CatalogPropertyValues") + .HasForeignKey("CatalogId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany("CategoryPropertyValues") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.PropertyDictionaryItemEntity", "DictionaryItem") + .WithMany() + .HasForeignKey("DictionaryItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "CatalogItem") + .WithMany("ItemPropertyValues") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CatalogModule.Data.Model.SeoInfoEntity", b => + { + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "Category") + .WithMany("SeoInfos") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("VirtoCommerce.CatalogModule.Data.Model.ItemEntity", "Item") + .WithMany("SeoInfos") + .HasForeignKey("ItemId") + .OnDelete(DeleteBehavior.Restrict); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.cs new file mode 100644 index 000000000..ca69729fe --- /dev/null +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/20190909081932_AddCatalogSupportSoftDeletion.cs @@ -0,0 +1,53 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.CatalogModule.Data.Migrations +{ + public partial class AddCatalogSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Property", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Item", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Category", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Catalog", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Property"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Item"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Category"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Catalog"); + } + } +} diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs index f8c6a6a2e..268b22754 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Migrations/CatalogDbContextModelSnapshot.cs @@ -1,8 +1,9 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using VirtoCommerce.CatalogModule.Data.Repositories; namespace VirtoCommerce.CatalogModule.Data.Migrations @@ -125,6 +126,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasMaxLength(64); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -189,6 +192,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsActive"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -400,6 +405,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsBuyable"); + b.Property("IsDeleted"); + b.Property("Length"); b.Property("ManufacturerPartNumber") @@ -594,6 +601,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); + b.Property("IsDeleted"); + b.Property("IsEnum"); b.Property("IsHidden"); @@ -848,12 +857,12 @@ protected override void BuildModel(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior.Cascade); b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CatalogEntity", "TargetCatalog") - .WithMany("IncommingLinks") + .WithMany("IncomingLinks") .HasForeignKey("TargetCatalogId") .OnDelete(DeleteBehavior.Restrict); b.HasOne("VirtoCommerce.CatalogModule.Data.Model.CategoryEntity", "TargetCategory") - .WithMany("IncommingLinks") + .WithMany("IncomingLinks") .HasForeignKey("TargetCategoryId") .OnDelete(DeleteBehavior.Restrict); }); diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CatalogEntity.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CatalogEntity.cs index fc9adf17c..aa8fbca17 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CatalogEntity.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CatalogEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.CatalogModule.Data.Model { - public class CatalogEntity : AuditableEntity, IHasOuterId + public class CatalogEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { public bool Virtual { get; set; } [Required] @@ -25,6 +25,8 @@ public class CatalogEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection IncomingLinks { get; set; } diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CategoryEntity.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CategoryEntity.cs index 19ff5d62b..6f6fef71a 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CategoryEntity.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/CategoryEntity.cs @@ -10,7 +10,7 @@ namespace VirtoCommerce.CatalogModule.Data.Model { - public class CategoryEntity : AuditableEntity, IHasOuterId + public class CategoryEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(64)] @@ -34,6 +34,8 @@ public class CategoryEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + [NotMapped] public CategoryEntity[] AllParents { diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/ItemEntity.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/ItemEntity.cs index 9234190c9..90bd6411c 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/ItemEntity.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/ItemEntity.cs @@ -9,7 +9,7 @@ namespace VirtoCommerce.CatalogModule.Data.Model { - public class ItemEntity : AuditableEntity, IHasOuterId + public class ItemEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [StringLength(1024)] [Required] @@ -74,6 +74,8 @@ public class ItemEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string CatalogId { get; set; } diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/PropertyEntity.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/PropertyEntity.cs index 87a95493e..231dc8c27 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/PropertyEntity.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Model/PropertyEntity.cs @@ -7,7 +7,7 @@ namespace VirtoCommerce.CatalogModule.Data.Model { - public class PropertyEntity : AuditableEntity, IHasOuterId + public class PropertyEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -46,6 +46,8 @@ public class PropertyEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string CatalogId { get; set; } diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogDbContext.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogDbContext.cs index 7ca18ef3a..a81f51594 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogDbContext.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.CatalogModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.CatalogModule.Data.Repositories { - public class CatalogDbContext : DbContextWithTriggers + public class CatalogDbContext : DbContextWithTriggersAndQueryFiltersBase { public CatalogDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogRepositoryImpl.cs b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogRepositoryImpl.cs index d1d4fcb52..5c15e7e0b 100644 --- a/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogRepositoryImpl.cs +++ b/Modules/vc-module-catalog/VirtoCommerce.CatalogModule.Data/Repositories/CatalogRepositoryImpl.cs @@ -325,11 +325,22 @@ public async Task RemoveItemsAsync(string[] itemIds) { if (!itemIds.IsNullOrEmpty()) { - const int batchSize = 500; - var skip = 0; - do + var items = await GetItemByIdsAsync(itemIds, ItemResponseGroup.None.ToString()); + + var itemsForSoftDeletion = items.OfType(); + foreach (var item in itemsForSoftDeletion) { - const string commandTemplate = @" + item.IsDeleted = true; + } + + var itemIdsForRemove = items.Where(x => !x.IsDeleted).Select(x => x.Id).ToArray(); + if (itemIdsForRemove.Any()) + { + const int batchSize = 500; + var skip = 0; + do + { + const string commandTemplate = @" DELETE SEO FROM CatalogSeoInfo SEO INNER JOIN Item I ON I.Id = SEO.ItemId WHERE I.Id IN ({0}) OR I.ParentId IN ({0}) @@ -359,11 +370,12 @@ DELETE FROM Item WHERE ParentId IN ({0}) DELETE FROM Item WHERE Id IN ({0}) "; - await ExecuteStoreQueryAsync(commandTemplate, itemIds); + await ExecuteStoreQueryAsync(commandTemplate, itemIdsForRemove); - skip += batchSize; + skip += batchSize; + } + while (skip < itemIdsForRemove.Length); } - while (skip < itemIds.Length); //TODO: Notify about removed entities by event or trigger } @@ -378,18 +390,29 @@ public async Task RemoveCategoriesAsync(string[] ids) var itemIds = await Items.Where(i => categoryIds.Contains(i.CategoryId)).Select(i => i.Id).ToArrayAsync(); await RemoveItemsAsync(itemIds); - const string commandTemplate = @" - DELETE SEO FROM CatalogSeoInfo SEO INNER JOIN Category C ON C.Id = SEO.CategoryId WHERE C.Id IN ({0}) - DELETE CI FROM CatalogImage CI INNER JOIN Category C ON C.Id = CI.CategoryId WHERE C.Id IN ({0}) - DELETE PV FROM PropertyValue PV INNER JOIN Category C ON C.Id = PV.CategoryId WHERE C.Id IN ({0}) - DELETE CR FROM CategoryRelation CR INNER JOIN Category C ON C.Id = CR.SourceCategoryId OR C.Id = CR.TargetCategoryId WHERE C.Id IN ({0}) - DELETE CIR FROM CategoryItemRelation CIR INNER JOIN Category C ON C.Id = CIR.CategoryId WHERE C.Id IN ({0}) - DELETE A FROM Association A INNER JOIN Category C ON C.Id = A.AssociatedCategoryId WHERE C.Id IN ({0}) - DELETE P FROM Property P INNER JOIN Category C ON C.Id = P.CategoryId WHERE C.Id IN ({0}) - DELETE FROM Category WHERE Id IN ({0}) - "; + var categories = await GetCategoriesByIdsAsync(categoryIds, CategoryResponseGroup.None.ToString()); + var categoriesForSoftDeletion = categories.OfType(); + foreach (var item in categoriesForSoftDeletion) + { + item.IsDeleted = true; + } - await ExecuteStoreQueryAsync(commandTemplate, categoryIds); + var categoryIdsForRemove = categories.Where(x => !x.IsDeleted).Select(x => x.Id).ToArray(); + if (categoryIdsForRemove.Any()) + { + const string commandTemplate = @" + DELETE SEO FROM CatalogSeoInfo SEO INNER JOIN Category C ON C.Id = SEO.CategoryId WHERE C.Id IN ({0}) + DELETE CI FROM CatalogImage CI INNER JOIN Category C ON C.Id = CI.CategoryId WHERE C.Id IN ({0}) + DELETE PV FROM PropertyValue PV INNER JOIN Category C ON C.Id = PV.CategoryId WHERE C.Id IN ({0}) + DELETE CR FROM CategoryRelation CR INNER JOIN Category C ON C.Id = CR.SourceCategoryId OR C.Id = CR.TargetCategoryId WHERE C.Id IN ({0}) + DELETE CIR FROM CategoryItemRelation CIR INNER JOIN Category C ON C.Id = CIR.CategoryId WHERE C.Id IN ({0}) + DELETE A FROM Association A INNER JOIN Category C ON C.Id = A.AssociatedCategoryId WHERE C.Id IN ({0}) + DELETE P FROM Property P INNER JOIN Category C ON C.Id = P.CategoryId WHERE C.Id IN ({0}) + DELETE FROM Category WHERE Id IN ({0}) + "; + + await ExecuteStoreQueryAsync(commandTemplate, categoryIdsForRemove); + } //TODO: Notify about removed entities by event or trigger } @@ -405,15 +428,26 @@ public async Task RemoveCatalogsAsync(string[] ids) var categoryIds = await Categories.Where(c => ids.Contains(c.CatalogId)).Select(c => c.Id).ToArrayAsync(); await RemoveCategoriesAsync(categoryIds); - const string commandTemplate = @" - DELETE CL FROM CatalogLanguage CL INNER JOIN Catalog C ON C.Id = CL.CatalogId WHERE C.Id IN ({0}) - DELETE CR FROM CategoryRelation CR INNER JOIN Catalog C ON C.Id = CR.TargetCatalogId WHERE C.Id IN ({0}) - DELETE PV FROM PropertyValue PV INNER JOIN Catalog C ON C.Id = PV.CatalogId WHERE C.Id IN ({0}) - DELETE P FROM Property P INNER JOIN Catalog C ON C.Id = P.CatalogId WHERE C.Id IN ({0}) - DELETE FROM Catalog WHERE Id IN ({0}) - "; + var catalogs = await GetCatalogsByIdsAsync(ids); + var catalogsForSoftDeletion = catalogs.OfType(); + foreach (var item in catalogsForSoftDeletion) + { + item.IsDeleted = true; + } + + var catalogIdsForRemove = catalogs.Where(x => !x.IsDeleted).Select(x => x.Id).ToArray(); + if (catalogIdsForRemove.Any()) + { + const string commandTemplate = @" + DELETE CL FROM CatalogLanguage CL INNER JOIN Catalog C ON C.Id = CL.CatalogId WHERE C.Id IN ({0}) + DELETE CR FROM CategoryRelation CR INNER JOIN Catalog C ON C.Id = CR.TargetCatalogId WHERE C.Id IN ({0}) + DELETE PV FROM PropertyValue PV INNER JOIN Catalog C ON C.Id = PV.CatalogId WHERE C.Id IN ({0}) + DELETE P FROM Property P INNER JOIN Catalog C ON C.Id = P.CatalogId WHERE C.Id IN ({0}) + DELETE FROM Catalog WHERE Id IN ({0}) + "; - await ExecuteStoreQueryAsync(commandTemplate, ids); + await ExecuteStoreQueryAsync(commandTemplate, catalogIdsForRemove); + } //TODO: Notify about removed entities by event or trigger } diff --git a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.Designer.cs b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..c6dd67705 --- /dev/null +++ b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.Designer.cs @@ -0,0 +1,115 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.ContentModule.Data.Repositories; + +namespace VirtoCommerce.ContentModule.Data.Migrations +{ + [DbContext(typeof(MenuDbContext))] + [Migration("20190909082232_AddContentSupportSoftDeletion")] + partial class AddContentSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.ContentModule.Data.Model.MenuLinkEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AssociatedObjectId") + .HasMaxLength(128); + + b.Property("AssociatedObjectName") + .HasMaxLength(254); + + b.Property("AssociatedObjectType") + .HasMaxLength(254); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("IsDeleted"); + + b.Property("MenuLinkListId"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Priority"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(1024); + + b.Property("Url") + .IsRequired() + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("MenuLinkListId"); + + b.ToTable("ContentMenuLink"); + }); + + modelBuilder.Entity("VirtoCommerce.ContentModule.Data.Model.MenuLinkListEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Language"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired(); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("StoreId") + .IsRequired(); + + b.HasKey("Id"); + + b.ToTable("ContentMenuLinkList"); + }); + + modelBuilder.Entity("VirtoCommerce.ContentModule.Data.Model.MenuLinkEntity", b => + { + b.HasOne("VirtoCommerce.ContentModule.Data.Model.MenuLinkListEntity", "MenuLinkList") + .WithMany("MenuLinks") + .HasForeignKey("MenuLinkListId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.cs b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.cs new file mode 100644 index 000000000..60959c5c7 --- /dev/null +++ b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/20190909082232_AddContentSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.ContentModule.Data.Migrations +{ + public partial class AddContentSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "ContentMenuLink", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "ContentMenuLink"); + } + } +} diff --git a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/MenuDbContextModelSnapshot.cs b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/MenuDbContextModelSnapshot.cs index 8d3a432af..46b710cf3 100644 --- a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/MenuDbContextModelSnapshot.cs +++ b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Migrations/MenuDbContextModelSnapshot.cs @@ -39,6 +39,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); + b.Property("IsDeleted"); + b.Property("MenuLinkListId"); b.Property("ModifiedBy") diff --git a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Model/MenuLinkEntity.cs b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Model/MenuLinkEntity.cs index f87257916..ed5adcd58 100644 --- a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Model/MenuLinkEntity.cs +++ b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Model/MenuLinkEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.ContentModule.Data.Model { - public class MenuLinkEntity : AuditableEntity, IHasOuterId + public class MenuLinkEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(1024)] @@ -22,16 +22,18 @@ public class MenuLinkEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string AssociatedObjectId { get; set; } + [StringLength(128)] + public string OuterId { get; set; } + + public bool IsDeleted { get; set; } + #region Navigation Properties public string MenuLinkListId { get; set; } public virtual MenuLinkListEntity MenuLinkList { get; set; } #endregion - - [StringLength(128)] - public string OuterId { get; set; } - + public void Patch(MenuLinkEntity target) { target.Title = Title; diff --git a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Repositories/MenuDbContext.cs b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Repositories/MenuDbContext.cs index c05c03205..c5fbfeeb6 100644 --- a/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Repositories/MenuDbContext.cs +++ b/Modules/vc-module-content/VirtoCommerce.ContentModule.Data/Repositories/MenuDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.ContentModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.ContentModule.Data.Repositories { - public class MenuDbContext : DbContextWithTriggers + public class MenuDbContext : DbContextWithTriggersAndQueryFiltersBase { public MenuDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.Designer.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..79428d9a3 --- /dev/null +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.Designer.cs @@ -0,0 +1,605 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.CustomerModule.Data.Repositories; + +namespace VirtoCommerce.CustomerModule.Data.Migrations +{ + [DbContext(typeof(CustomerDbContext))] + [Migration("20190905140244_AddCustomerSupportSoftDeletion")] + partial class AddCustomerSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.AddressEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("City") + .IsRequired() + .HasMaxLength(128); + + b.Property("CountryCode") + .IsRequired() + .HasMaxLength(64); + + b.Property("CountryName") + .IsRequired() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DaytimePhoneNumber") + .HasMaxLength(64); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("EveningPhoneNumber") + .HasMaxLength(64); + + b.Property("FaxNumber") + .HasMaxLength(64); + + b.Property("FirstName") + .HasMaxLength(128); + + b.Property("LastName") + .HasMaxLength(128); + + b.Property("Line1") + .IsRequired() + .HasMaxLength(128); + + b.Property("Line2") + .HasMaxLength(128); + + b.Property("MemberId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(2048); + + b.Property("Organization") + .HasMaxLength(128); + + b.Property("PostalCode") + .IsRequired() + .HasMaxLength(32); + + b.Property("RegionId") + .HasMaxLength(128); + + b.Property("RegionName") + .HasMaxLength(128); + + b.Property("StateProvince") + .HasMaxLength(128); + + b.Property("Type") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("MemberId"); + + b.ToTable("Address"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.EmailEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Address") + .HasMaxLength(254); + + b.Property("IsValidated"); + + b.Property("MemberId") + .IsRequired(); + + b.Property("Type") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Address") + .HasName("IX_Email_Address"); + + b.HasIndex("MemberId"); + + b.ToTable("Email"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("ObjectId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.ToTable("MemberDynamicPropertyObjectValue"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); + + b.Property("IsDeleted"); + + b.Property("MemberType") + .HasMaxLength(64); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("MemberType") + .HasName("IX_MemberType"); + + b.HasIndex("Name") + .HasName("IX_Member_Name"); + + b.ToTable("Member"); + + b.HasDiscriminator("Discriminator").HasValue("MemberEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberGroupEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Group") + .HasMaxLength(64); + + b.Property("MemberId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("Group") + .HasName("IX_MemberGroup_Group"); + + b.HasIndex("MemberId"); + + b.ToTable("MemberGroup"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberRelationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AncestorId") + .IsRequired() + .HasMaxLength(128); + + b.Property("AncestorSequence"); + + b.Property("DescendantId") + .IsRequired() + .HasMaxLength(128); + + b.Property("RelationType") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("AncestorId"); + + b.HasIndex("DescendantId"); + + b.ToTable("MemberRelation"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.NoteEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AuthorName") + .HasMaxLength(128); + + b.Property("Body"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("IsSticky"); + + b.Property("MemberId"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ModifierName") + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Title") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("MemberId"); + + b.ToTable("Note"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.PhoneEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("MemberId") + .IsRequired(); + + b.Property("Number") + .HasMaxLength(64); + + b.Property("Type") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("MemberId"); + + b.ToTable("Phone"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.SeoInfoEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ImageAltDescription") + .HasMaxLength(255); + + b.Property("IsActive"); + + b.Property("Keyword") + .IsRequired() + .HasMaxLength(255); + + b.Property("Language") + .HasMaxLength(5); + + b.Property("MemberId"); + + b.Property("MetaDescription") + .HasMaxLength(1024); + + b.Property("MetaKeywords") + .HasMaxLength(255); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("Title") + .HasMaxLength(255); + + b.HasKey("Id"); + + b.HasIndex("MemberId"); + + b.ToTable("MemberSeoInfo"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.ContactEntity", b => + { + b.HasBaseType("VirtoCommerce.CustomerModule.Data.Model.MemberEntity"); + + b.Property("BirthDate") + .HasColumnName("BirthDate"); + + b.Property("DefaultLanguage") + .HasColumnName("DefaultLanguage") + .HasMaxLength(32); + + b.Property("FirstName") + .HasColumnName("FirstName") + .HasMaxLength(128); + + b.Property("FullName") + .IsRequired() + .HasColumnName("FullName") + .HasMaxLength(254); + + b.Property("LastName") + .HasColumnName("LastName") + .HasMaxLength(128); + + b.Property("MiddleName") + .HasColumnName("MiddleName") + .HasMaxLength(128); + + b.Property("PhotoUrl") + .HasColumnName("PhotoUrl") + .HasMaxLength(2083); + + b.Property("PreferredCommunication") + .HasMaxLength(64); + + b.Property("PreferredDelivery") + .HasMaxLength(64); + + b.Property("Salutation") + .HasMaxLength(256); + + b.Property("TaxpayerId") + .HasMaxLength(64); + + b.Property("TimeZone") + .HasColumnName("TimeZone") + .HasMaxLength(32); + + b.HasDiscriminator().HasValue("ContactEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.EmployeeEntity", b => + { + b.HasBaseType("VirtoCommerce.CustomerModule.Data.Model.MemberEntity"); + + b.Property("BirthDate") + .HasColumnName("BirthDate"); + + b.Property("DefaultLanguage") + .HasColumnName("DefaultLanguage") + .HasMaxLength(32); + + b.Property("FirstName") + .HasColumnName("FirstName") + .HasMaxLength(128); + + b.Property("FullName") + .IsRequired() + .HasColumnName("FullName") + .HasMaxLength(254); + + b.Property("IsActive"); + + b.Property("LastName") + .HasColumnName("LastName") + .HasMaxLength(128); + + b.Property("MiddleName") + .HasColumnName("MiddleName") + .HasMaxLength(128); + + b.Property("PhotoUrl") + .HasColumnName("PhotoUrl") + .HasMaxLength(2083); + + b.Property("TimeZone") + .HasColumnName("TimeZone") + .HasMaxLength(32); + + b.Property("Type") + .HasMaxLength(64); + + b.HasDiscriminator().HasValue("EmployeeEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.OrganizationEntity", b => + { + b.HasBaseType("VirtoCommerce.CustomerModule.Data.Model.MemberEntity"); + + b.Property("BusinessCategory") + .HasMaxLength(64); + + b.Property("Description") + .HasColumnName("Description"); + + b.Property("OwnerId") + .HasMaxLength(128); + + b.HasDiscriminator().HasValue("OrganizationEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.VendorEntity", b => + { + b.HasBaseType("VirtoCommerce.CustomerModule.Data.Model.MemberEntity"); + + b.Property("Description") + .HasColumnName("Description"); + + b.Property("GroupName") + .HasMaxLength(64); + + b.Property("LogoUrl") + .HasMaxLength(2048); + + b.Property("SiteUrl") + .HasMaxLength(2048); + + b.HasDiscriminator().HasValue("VendorEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.AddressEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("Addresses") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.EmailEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("Emails") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ObjectId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberGroupEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("Groups") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.MemberRelationEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Ancestor") + .WithMany() + .HasForeignKey("AncestorId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Descendant") + .WithMany("MemberRelations") + .HasForeignKey("DescendantId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.NoteEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("Notes") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.PhoneEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("Phones") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.CustomerModule.Data.Model.SeoInfoEntity", b => + { + b.HasOne("VirtoCommerce.CustomerModule.Data.Model.MemberEntity", "Member") + .WithMany("SeoInfos") + .HasForeignKey("MemberId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.cs new file mode 100644 index 000000000..faba4eef3 --- /dev/null +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/20190905140244_AddCustomerSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.CustomerModule.Data.Migrations +{ + public partial class AddCustomerSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Member", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Member"); + } + } +} diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/CustomerDbContextModelSnapshot.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/CustomerDbContextModelSnapshot.cs index 91ad02711..4e917c894 100644 --- a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/CustomerDbContextModelSnapshot.cs +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Migrations/CustomerDbContextModelSnapshot.cs @@ -208,6 +208,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasMaxLength(128); + b.Property("IsDeleted"); + b.Property("MemberType") .HasMaxLength(64); diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Model/MemberEntity.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Model/MemberEntity.cs index 08417121c..db2016ca5 100644 --- a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Model/MemberEntity.cs +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Model/MemberEntity.cs @@ -9,7 +9,7 @@ namespace VirtoCommerce.CustomerModule.Data.Model { - public abstract class MemberEntity : AuditableEntity, IHasOuterId + public abstract class MemberEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [StringLength(64)] public string MemberType { get; set; } @@ -20,6 +20,8 @@ public abstract class MemberEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region NavigationProperties public virtual ObservableCollection Notes { get; set; } = new NullCollection(); @@ -38,7 +40,7 @@ public abstract class MemberEntity : AuditableEntity, IHasOuterId public virtual ObservableCollection DynamicPropertyObjectValues { get; set; } = new NullCollection(); - + #endregion public virtual Member ToModel(Member member) diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/CustomerDbContext.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/CustomerDbContext.cs index 788254df6..3ceceeca2 100644 --- a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/CustomerDbContext.cs +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/CustomerDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.CustomerModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.CustomerModule.Data.Repositories { - public class CustomerDbContext : DbContextWithTriggers + public class CustomerDbContext : DbContextWithTriggersAndQueryFiltersBase { public CustomerDbContext(DbContextOptions options) : base(options) @@ -27,6 +27,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity().HasIndex(i => i.Name).IsUnique(false).HasName("IX_Member_Name"); modelBuilder.Entity().HasDiscriminator("Discriminator"); modelBuilder.Entity().Property("Discriminator").HasMaxLength(128); + //modelBuilder.Entity().HasQueryFilter(p => !p.IsDeleted); #endregion diff --git a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/MemberRepositoryBase.cs b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/MemberRepositoryBase.cs index 627955921..15517e87a 100644 --- a/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/MemberRepositoryBase.cs +++ b/Modules/vc-module-customer/VirtoCommerce.CustomerModule.Data/Repositories/MemberRepositoryBase.cs @@ -72,6 +72,7 @@ public virtual async Task RemoveMembersByIdsAsync(string[] ids, string[] memberT { Remove(relation); } + Remove(dbMember); } } diff --git a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.Designer.cs b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..ba7e50552 --- /dev/null +++ b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.Designer.cs @@ -0,0 +1,138 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.ImageToolsModule.Data.Repositories; + +namespace VirtoCommerce.ImageToolsModule.Data.Migrations +{ + [DbContext(typeof(ThumbnailDbContext))] + [Migration("20190909082555_AddImageToolsSupportSoftDeletion")] + partial class AddImageToolsSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailOptionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AnchorPosition") + .HasMaxLength(64); + + b.Property("BackgroundColor"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("FileSuffix") + .IsRequired() + .HasMaxLength(128); + + b.Property("Height"); + + b.Property("JpegQuality") + .HasMaxLength(64); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1024); + + b.Property("ResizeMethod") + .IsRequired() + .HasMaxLength(64); + + b.Property("Width"); + + b.HasKey("Id"); + + b.ToTable("ThumbnailOption"); + }); + + modelBuilder.Entity("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailTaskEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("IsDeleted"); + + b.Property("LastRun"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1024); + + b.Property("WorkPath") + .IsRequired() + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.ToTable("ThumbnailTask"); + }); + + modelBuilder.Entity("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailTaskOptionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("ThumbnailOptionId") + .IsRequired(); + + b.Property("ThumbnailTaskId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("ThumbnailOptionId"); + + b.HasIndex("ThumbnailTaskId"); + + b.ToTable("ThumbnailTaskOption"); + }); + + modelBuilder.Entity("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailTaskOptionEntity", b => + { + b.HasOne("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailOptionEntity", "ThumbnailOption") + .WithMany() + .HasForeignKey("ThumbnailOptionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.ImageToolsModule.Data.Models.ThumbnailTaskEntity", "ThumbnailTask") + .WithMany("ThumbnailTaskOptions") + .HasForeignKey("ThumbnailTaskId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.cs b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.cs new file mode 100644 index 000000000..0be0704d9 --- /dev/null +++ b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/20190909082555_AddImageToolsSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.ImageToolsModule.Data.Migrations +{ + public partial class AddImageToolsSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "ThumbnailTask", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "ThumbnailTask"); + } + } +} diff --git a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/ThumbnailDbContextModelSnapshot.cs b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/ThumbnailDbContextModelSnapshot.cs index d9192869e..a81649f56 100644 --- a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/ThumbnailDbContextModelSnapshot.cs +++ b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Migrations/ThumbnailDbContextModelSnapshot.cs @@ -1,8 +1,9 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using VirtoCommerce.ImageToolsModule.Data.Repositories; namespace VirtoCommerce.ImageToolsModule.Data.Migrations @@ -74,6 +75,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); + b.Property("IsDeleted"); + b.Property("LastRun"); b.Property("ModifiedBy") diff --git a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Models/ThumbnailTaskEntity.cs b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Models/ThumbnailTaskEntity.cs index bcfe19084..0fc727198 100644 --- a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Models/ThumbnailTaskEntity.cs +++ b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Models/ThumbnailTaskEntity.cs @@ -7,7 +7,7 @@ namespace VirtoCommerce.ImageToolsModule.Data.Models { - public class ThumbnailTaskEntity : AuditableEntity + public class ThumbnailTaskEntity : AuditableEntity, ISupportSoftDeletion { public ThumbnailTaskEntity() { @@ -24,6 +24,8 @@ public ThumbnailTaskEntity() public DateTime? LastRun { get; set; } + public bool IsDeleted { get; set; } + public ObservableCollection ThumbnailTaskOptions { get; set; } public virtual ThumbnailTaskEntity FromModel(ThumbnailTask task, PrimaryKeyResolvingMap pkMap) diff --git a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Repositories/ThumbnailDbContext.cs b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Repositories/ThumbnailDbContext.cs index 6961bf29d..0c85cfd75 100644 --- a/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Repositories/ThumbnailDbContext.cs +++ b/Modules/vc-module-imageTools/VirtoCommerce.ImageToolsModule.Data/Repositories/ThumbnailDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.ImageToolsModule.Data.Models; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.ImageToolsModule.Data.Repositories { - public class ThumbnailDbContext : DbContextWithTriggers + public class ThumbnailDbContext : DbContextWithTriggersAndQueryFiltersBase { public ThumbnailDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.Designer.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..6c2af583d --- /dev/null +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.Designer.cs @@ -0,0 +1,162 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.InventoryModule.Data.Repositories; + +namespace VirtoCommerce.InventoryModule.Data.Migrations +{ + [DbContext(typeof(InventoryDbContext))] + [Migration("20190909082836_AddInventorySupportSoftDeletion")] + partial class AddInventorySupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.InventoryModule.Data.Model.FulfillmentCenterEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("City") + .HasMaxLength(128); + + b.Property("CountryCode") + .HasMaxLength(64); + + b.Property("CountryName") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DaytimePhoneNumber") + .HasMaxLength(64); + + b.Property("Description"); + + b.Property("Email") + .HasMaxLength(256); + + b.Property("GeoLocation") + .HasMaxLength(64); + + b.Property("IsDeleted"); + + b.Property("Line1") + .HasMaxLength(1024); + + b.Property("Line2") + .HasMaxLength(1024); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("Organization") + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PostalCode") + .HasMaxLength(32); + + b.Property("RegionId") + .HasMaxLength(128); + + b.Property("RegionName") + .HasMaxLength(128); + + b.Property("StateProvince") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.ToTable("FulfillmentCenter"); + }); + + modelBuilder.Entity("VirtoCommerce.InventoryModule.Data.Model.InventoryEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AllowBackorder"); + + b.Property("AllowPreorder"); + + b.Property("BackorderAvailabilityDate"); + + b.Property("BackorderQuantity"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("FulfillmentCenterId") + .IsRequired(); + + b.Property("InStockQuantity"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PreorderAvailabilityDate"); + + b.Property("PreorderQuantity"); + + b.Property("ReorderMinQuantity"); + + b.Property("ReservedQuantity"); + + b.Property("Sku") + .IsRequired() + .HasMaxLength(128); + + b.Property("Status"); + + b.HasKey("Id"); + + b.HasIndex("FulfillmentCenterId"); + + b.HasIndex("Sku"); + + b.ToTable("Inventory"); + }); + + modelBuilder.Entity("VirtoCommerce.InventoryModule.Data.Model.InventoryEntity", b => + { + b.HasOne("VirtoCommerce.InventoryModule.Data.Model.FulfillmentCenterEntity", "FulfillmentCenter") + .WithMany() + .HasForeignKey("FulfillmentCenterId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.cs new file mode 100644 index 000000000..d9c9bd5a2 --- /dev/null +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/20190909082836_AddInventorySupportSoftDeletion.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.InventoryModule.Data.Migrations +{ + public partial class AddInventorySupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Inventory", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "FulfillmentCenter", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Inventory"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "FulfillmentCenter"); + } + } +} diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/InventoryDbContextModelSnapshot.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/InventoryDbContextModelSnapshot.cs index ba07d01a5..d030234cb 100644 --- a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/InventoryDbContextModelSnapshot.cs +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Migrations/InventoryDbContextModelSnapshot.cs @@ -50,6 +50,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("GeoLocation") .HasMaxLength(64); + b.Property("IsDeleted"); + b.Property("Line1") .HasMaxLength(1024); @@ -112,6 +114,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("InStockQuantity"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/FulfillmentCenterEntity.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/FulfillmentCenterEntity.cs index b3652dd9c..d61a81520 100644 --- a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/FulfillmentCenterEntity.cs +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/FulfillmentCenterEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.InventoryModule.Data.Model { - public class FulfillmentCenterEntity : AuditableEntity, IHasOuterId + public class FulfillmentCenterEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -55,6 +55,8 @@ public class FulfillmentCenterEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + public virtual FulfillmentCenter ToModel(FulfillmentCenter center) { center.Id = Id; diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/InventoryEntity.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/InventoryEntity.cs index 879fbf9fc..470145a5b 100644 --- a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/InventoryEntity.cs +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Model/InventoryEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.InventoryModule.Data.Model { - public class InventoryEntity : AuditableEntity, IHasOuterId + public class InventoryEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] public decimal InStockQuantity { get; set; } @@ -46,6 +46,8 @@ public class InventoryEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation properties public string FulfillmentCenterId { get; set; } diff --git a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Repositories/InventoryDbContext.cs b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Repositories/InventoryDbContext.cs index 1fddd1f0d..913f24837 100644 --- a/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Repositories/InventoryDbContext.cs +++ b/Modules/vc-module-inventory/VirtoCommerce.InventoryModule.Data/Repositories/InventoryDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.InventoryModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.InventoryModule.Data.Repositories { - public class InventoryDbContext : DbContextWithTriggers + public class InventoryDbContext : DbContextWithTriggersAndQueryFiltersBase { public InventoryDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.Designer.cs b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..f05334e5e --- /dev/null +++ b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.Designer.cs @@ -0,0 +1,71 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.LicensingModule.Data.Repositories; + +namespace VirtoCommerce.LicensingModule.Data.Migrations +{ + [DbContext(typeof(LicenseDbContext))] + [Migration("20190909083221_AddLicensingSupportSoftDeletion")] + partial class AddLicensingSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.LicensingModule.Data.Model.LicenseEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("ActivationCode") + .IsRequired() + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("CustomerEmail") + .IsRequired() + .HasMaxLength(256); + + b.Property("CustomerName") + .IsRequired() + .HasMaxLength(256); + + b.Property("ExpirationDate"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("ActivationCode") + .IsUnique() + .HasName("IX_ActivationCode"); + + b.ToTable("License"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.cs b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.cs new file mode 100644 index 000000000..4d75870d7 --- /dev/null +++ b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/20190909083221_AddLicensingSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.LicensingModule.Data.Migrations +{ + public partial class AddLicensingSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "License", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "License"); + } + } +} diff --git a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/LicenseDbContextModelSnapshot.cs b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/LicenseDbContextModelSnapshot.cs index f6cb58905..84012f0b2 100644 --- a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/LicenseDbContextModelSnapshot.cs +++ b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Migrations/LicenseDbContextModelSnapshot.cs @@ -44,6 +44,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ExpirationDate"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); diff --git a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Model/LicenseEntity.cs b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Model/LicenseEntity.cs index 0b3aa1075..3f7ac7492 100644 --- a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Model/LicenseEntity.cs +++ b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Model/LicenseEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.LicensingModule.Data.Model { - public class LicenseEntity : AuditableEntity + public class LicenseEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(64)] @@ -26,6 +26,8 @@ public class LicenseEntity : AuditableEntity [StringLength(64)] public string ActivationCode { get; set; } + public bool IsDeleted { get; set; } + public virtual License ToModel(License license) { if (license == null) diff --git a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Repositories/LicenseDbContext.cs b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Repositories/LicenseDbContext.cs index bfe999f3d..1066055b9 100644 --- a/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Repositories/LicenseDbContext.cs +++ b/Modules/vc-module-licensing/VirtoCommerce.LicensingModule.Data/Repositories/LicenseDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.LicensingModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.LicensingModule.Data.Repositories { - public class LicenseDbContext : DbContextWithTriggers + public class LicenseDbContext : DbContextWithTriggersAndQueryFiltersBase { public LicenseDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.Designer.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..be24c1af0 --- /dev/null +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.Designer.cs @@ -0,0 +1,559 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.MarketingModule.Data.Repositories; + +namespace VirtoCommerce.MarketingModule.Data.Migrations +{ + [DbContext(typeof(MarketingDbContext))] + [Migration("20190909085038_AddMarketingSupportSoftDeletion")] + partial class AddMarketingSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.CouponEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Code") + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ExpirationDate"); + + b.Property("MaxUsesNumber"); + + b.Property("MaxUsesPerUser"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PromotionId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("PromotionId"); + + b.HasIndex("Code", "PromotionId") + .IsUnique() + .HasName("IX_CodeAndPromotionId") + .HasFilter("[Code] IS NOT NULL"); + + b.ToTable("Coupon"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentFolderEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("ImageUrl") + .HasMaxLength(2048); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("ParentFolderId"); + + b.HasKey("Id"); + + b.HasIndex("ParentFolderId"); + + b.ToTable("DynamicContentFolder"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("ObjectId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.ToTable("DynamicContentItemDynamicPropertyObjectValue"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("ContentTypeId") + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("FolderId"); + + b.Property("ImageUrl") + .HasMaxLength(2048); + + b.Property("IsDeleted"); + + b.Property("IsMultilingual"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("FolderId"); + + b.ToTable("DynamicContentItem"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPlaceEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("FolderId"); + + b.Property("ImageUrl") + .HasMaxLength(2048); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("FolderId"); + + b.ToTable("DynamicContentPlace"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPublishingGroupEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("ConditionExpression"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("EndDate"); + + b.Property("IsActive"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PredicateVisualTreeSerialized"); + + b.Property("Priority"); + + b.Property("StartDate"); + + b.Property("StoreId") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.ToTable("DynamicContentPublishingGroup"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PromotionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(1024); + + b.Property("EndDate"); + + b.Property("IsActive"); + + b.Property("IsAllowCombiningWithSelf"); + + b.Property("IsDeleted"); + + b.Property("IsExclusive"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PerCustomerLimit"); + + b.Property("PredicateSerialized"); + + b.Property("PredicateVisualTreeSerialized"); + + b.Property("Priority"); + + b.Property("RewardsSerialized"); + + b.Property("StartDate"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("TotalLimit"); + + b.HasKey("Id"); + + b.ToTable("Promotion"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PromotionStoreEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("PromotionId") + .IsRequired(); + + b.Property("StoreId") + .IsRequired() + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("PromotionId"); + + b.HasIndex("StoreId"); + + b.ToTable("PromotionStore"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PromotionUsageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CouponCode") + .HasMaxLength(64); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(128); + + b.Property("PromotionId") + .IsRequired(); + + b.Property("UserId") + .HasMaxLength(128); + + b.Property("UserName") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("PromotionId"); + + b.ToTable("PromotionUsage"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PublishingGroupContentItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DynamicContentItemId"); + + b.Property("DynamicContentPublishingGroupId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.HasKey("Id"); + + b.HasIndex("DynamicContentItemId"); + + b.HasIndex("DynamicContentPublishingGroupId"); + + b.ToTable("PublishingGroupContentItem"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PublishingGroupContentPlaceEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DynamicContentPlaceId") + .IsRequired(); + + b.Property("DynamicContentPublishingGroupId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.HasKey("Id"); + + b.HasIndex("DynamicContentPlaceId"); + + b.HasIndex("DynamicContentPublishingGroupId"); + + b.ToTable("PublishingGroupContentPlace"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.CouponEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.PromotionEntity", "Promotion") + .WithMany() + .HasForeignKey("PromotionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentFolderEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentFolderEntity", "ParentFolder") + .WithMany() + .HasForeignKey("ParentFolderId"); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemEntity", "DynamicContentItem") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ObjectId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentFolderEntity", "Folder") + .WithMany("ContentItems") + .HasForeignKey("FolderId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPlaceEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentFolderEntity", "Folder") + .WithMany("ContentPlaces") + .HasForeignKey("FolderId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PromotionStoreEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.PromotionEntity", "Promotion") + .WithMany("Stores") + .HasForeignKey("PromotionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PromotionUsageEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.PromotionEntity", "Promotion") + .WithMany() + .HasForeignKey("PromotionId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PublishingGroupContentItemEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentItemEntity", "ContentItem") + .WithMany() + .HasForeignKey("DynamicContentItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPublishingGroupEntity", "PublishingGroup") + .WithMany("ContentItems") + .HasForeignKey("DynamicContentPublishingGroupId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.MarketingModule.Data.Model.PublishingGroupContentPlaceEntity", b => + { + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPlaceEntity", "ContentPlace") + .WithMany() + .HasForeignKey("DynamicContentPlaceId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.MarketingModule.Data.Model.DynamicContentPublishingGroupEntity", "PublishingGroup") + .WithMany("ContentPlaces") + .HasForeignKey("DynamicContentPublishingGroupId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.cs new file mode 100644 index 000000000..9f17fbec5 --- /dev/null +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/20190909085038_AddMarketingSupportSoftDeletion.cs @@ -0,0 +1,53 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.MarketingModule.Data.Migrations +{ + public partial class AddMarketingSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Promotion", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "DynamicContentPublishingGroup", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "DynamicContentPlace", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "DynamicContentItem", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Promotion"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "DynamicContentPublishingGroup"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "DynamicContentPlace"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "DynamicContentItem"); + } + } +} diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/MarketingDbContextModelSnapshot.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/MarketingDbContextModelSnapshot.cs index 335bb87bd..788f1b246 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/MarketingDbContextModelSnapshot.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Migrations/MarketingDbContextModelSnapshot.cs @@ -181,6 +181,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ImageUrl") .HasMaxLength(2048); + b.Property("IsDeleted"); + b.Property("IsMultilingual"); b.Property("ModifiedBy") @@ -218,6 +220,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ImageUrl") .HasMaxLength(2048); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -254,6 +258,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsActive"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -303,6 +309,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsAllowCombiningWithSelf"); + b.Property("IsDeleted"); + b.Property("IsExclusive"); b.Property("ModifiedBy") diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentItemEntity.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentItemEntity.cs index cae783aae..22db6cf6d 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentItemEntity.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentItemEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.MarketingModule.Data.Model { - public class DynamicContentItemEntity : AuditableEntity + public class DynamicContentItemEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -28,6 +28,8 @@ public class DynamicContentItemEntity : AuditableEntity [StringLength(2048)] public string ImageUrl { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string FolderId { get; set; } diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPlaceEntity.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPlaceEntity.cs index 5addba352..c2a7c2cab 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPlaceEntity.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPlaceEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.MarketingModule.Data.Model { - public class DynamicContentPlaceEntity : AuditableEntity + public class DynamicContentPlaceEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -17,6 +17,8 @@ public class DynamicContentPlaceEntity : AuditableEntity [StringLength(2048)] public string ImageUrl { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string FolderId { get; set; } diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPublishingGroupEntity.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPublishingGroupEntity.cs index e8afed68a..a3e6bd93f 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPublishingGroupEntity.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/DynamicContentPublishingGroupEntity.cs @@ -10,7 +10,7 @@ namespace VirtoCommerce.MarketingModule.Data.Model { - public class DynamicContentPublishingGroupEntity : AuditableEntity, IHasOuterId + public class DynamicContentPublishingGroupEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -37,6 +37,8 @@ public class DynamicContentPublishingGroupEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection ContentItems { get; set; } diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/PromotionEntity.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/PromotionEntity.cs index 876ada654..982ab1749 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/PromotionEntity.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Model/PromotionEntity.cs @@ -12,7 +12,7 @@ namespace VirtoCommerce.MarketingModule.Data.Model { - public class PromotionEntity : AuditableEntity, IHasOuterId + public class PromotionEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [StringLength(128)] public string StoreId { get; set; } @@ -56,6 +56,8 @@ public class PromotionEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection Stores { get; set; } = new NullCollection(); diff --git a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Repositories/MarketingDbContext.cs b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Repositories/MarketingDbContext.cs index cc5760acd..fbcc3c3b2 100644 --- a/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Repositories/MarketingDbContext.cs +++ b/Modules/vc-module-marketing/VirtoCommerce.MarketingModule.Data/Repositories/MarketingDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.MarketingModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.MarketingModule.Data.Repositories { - public class MarketingDbContext : DbContextWithTriggers + public class MarketingDbContext : DbContextWithTriggersAndQueryFiltersBase { public MarketingDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.Designer.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..972cf2abf --- /dev/null +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.Designer.cs @@ -0,0 +1,331 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.NotificationsModule.Data.Repositories; + +namespace VirtoCommerce.NotificationsModule.Data.Migrations +{ + [DbContext(typeof(NotificationDbContext))] + [Migration("20190909090836_AddNotificationSupportSoftDeletion")] + partial class AddNotificationSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.EmailAttachmentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("FileName") + .HasMaxLength(512); + + b.Property("LanguageCode") + .HasMaxLength(10); + + b.Property("MimeType") + .HasMaxLength(50); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("NotificationId"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Size") + .HasMaxLength(128); + + b.Property("Url") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("NotificationId"); + + b.ToTable("NotificationEmailAttachment"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationEmailRecipientEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("EmailAddress") + .HasMaxLength(128); + + b.Property("NotificationId"); + + b.Property("RecipientType"); + + b.HasKey("Id"); + + b.HasIndex("NotificationId"); + + b.ToTable("NotificationEmailRecipient"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); + + b.Property("IsActive"); + + b.Property("IsDeleted"); + + b.Property("Kind") + .HasMaxLength(128); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("TenantId") + .HasMaxLength(128); + + b.Property("TenantType") + .HasMaxLength(128); + + b.Property("Type") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.ToTable("Notification"); + + b.HasDiscriminator("Discriminator").HasValue("NotificationEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationMessageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); + + b.Property("LanguageCode") + .HasMaxLength(10); + + b.Property("LastSendAttemptDate"); + + b.Property("LastSendError"); + + b.Property("MaxSendAttemptCount"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("NotificationId"); + + b.Property("NotificationType") + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("SendAttemptCount"); + + b.Property("SendDate"); + + b.Property("TenantId") + .HasMaxLength(128); + + b.Property("TenantType") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("NotificationId"); + + b.ToTable("NotificationMessage"); + + b.HasDiscriminator("Discriminator").HasValue("NotificationMessageEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationTemplateEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); + + b.Property("LanguageCode") + .HasMaxLength(10); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("NotificationId") + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("NotificationId"); + + b.ToTable("NotificationTemplate"); + + b.HasDiscriminator("Discriminator").HasValue("NotificationTemplateEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.EmailNotificationEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationEntity"); + + b.Property("From") + .HasMaxLength(128); + + b.Property("To") + .HasMaxLength(128); + + b.HasDiscriminator().HasValue("EmailNotificationEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.SmsNotificationEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationEntity"); + + b.Property("Number") + .HasMaxLength(128); + + b.HasDiscriminator().HasValue("SmsNotificationEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.EmailNotificationMessageEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationMessageEntity"); + + b.Property("Body"); + + b.Property("Subject") + .HasMaxLength(512); + + b.HasDiscriminator().HasValue("EmailNotificationMessageEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.SmsNotificationMessageEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationMessageEntity"); + + b.Property("Message") + .HasMaxLength(1600); + + b.Property("Number") + .HasMaxLength(128); + + b.HasDiscriminator().HasValue("SmsNotificationMessageEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.EmailNotificationTemplateEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationTemplateEntity"); + + b.Property("Body"); + + b.Property("Subject") + .HasMaxLength(512); + + b.HasDiscriminator().HasValue("EmailNotificationTemplateEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.SmsNotificationTemplateEntity", b => + { + b.HasBaseType("VirtoCommerce.NotificationsModule.Data.Model.NotificationTemplateEntity"); + + b.Property("Message") + .HasMaxLength(1600); + + b.HasDiscriminator().HasValue("SmsNotificationTemplateEntity"); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.EmailAttachmentEntity", b => + { + b.HasOne("VirtoCommerce.NotificationsModule.Data.Model.EmailNotificationEntity", "Notification") + .WithMany("Attachments") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationEmailRecipientEntity", b => + { + b.HasOne("VirtoCommerce.NotificationsModule.Data.Model.EmailNotificationEntity", "Notification") + .WithMany("Recipients") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationMessageEntity", b => + { + b.HasOne("VirtoCommerce.NotificationsModule.Data.Model.NotificationEntity", "Notification") + .WithMany() + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.NotificationsModule.Data.Model.NotificationTemplateEntity", b => + { + b.HasOne("VirtoCommerce.NotificationsModule.Data.Model.NotificationEntity", "Notification") + .WithMany("Templates") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.cs new file mode 100644 index 000000000..150234a06 --- /dev/null +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/20190909090836_AddNotificationSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.NotificationsModule.Data.Migrations +{ + public partial class AddNotificationSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Notification", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Notification"); + } + } +} diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/NotificationDbContextModelSnapshot.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/NotificationDbContextModelSnapshot.cs index c9f7ce457..0ba28fbcc 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/NotificationDbContextModelSnapshot.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Migrations/NotificationDbContextModelSnapshot.cs @@ -1,8 +1,9 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using VirtoCommerce.NotificationsModule.Data.Repositories; namespace VirtoCommerce.NotificationsModule.Data.Migrations @@ -92,11 +93,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); - b.Property("Discriminator").HasMaxLength(128) - .IsRequired(); + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); b.Property("IsActive"); + b.Property("IsDeleted"); + b.Property("Kind") .HasMaxLength(128); @@ -135,8 +139,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); - b.Property("Discriminator").HasMaxLength(128) - .IsRequired(); + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); b.Property("LanguageCode") .HasMaxLength(10); @@ -190,8 +195,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); - b.Property("Discriminator").HasMaxLength(128) - .IsRequired(); + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(128); b.Property("LanguageCode") .HasMaxLength(10); diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/EmailAttachmentEntity.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/EmailAttachmentEntity.cs index b66ef4d2b..3c521c4e2 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/EmailAttachmentEntity.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/EmailAttachmentEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.NotificationsModule.Data.Model /// /// Entity is attachment of email /// - public class EmailAttachmentEntity : AuditableEntity + public class EmailAttachmentEntity : AuditableEntity, IHasOuterId { /// /// Name of Attachment @@ -40,6 +40,9 @@ public class EmailAttachmentEntity : AuditableEntity [StringLength(10)] public string LanguageCode { get; set; } + [StringLength(128)] + public string OuterId { get; set; } + #region Navigation Properties /// diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationEntity.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationEntity.cs index 2d58df83a..d76d54bcb 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationEntity.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationEntity.cs @@ -10,7 +10,7 @@ namespace VirtoCommerce.NotificationsModule.Data.Model /// /// Entity is Notification /// - public abstract class NotificationEntity : AuditableEntity + public abstract class NotificationEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { /// /// Tenant id that initiate sending @@ -41,6 +41,11 @@ public abstract class NotificationEntity : AuditableEntity [StringLength(128)] public string Kind { get; set; } + [StringLength(128)] + public string OuterId { get; set; } + + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection Templates { get; set; } diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationMessageEntity.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationMessageEntity.cs index 82f18d01b..5d0fec79e 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationMessageEntity.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationMessageEntity.cs @@ -9,7 +9,7 @@ namespace VirtoCommerce.NotificationsModule.Data.Model /// /// Entity is message of notification /// - public abstract class NotificationMessageEntity : AuditableEntity + public abstract class NotificationMessageEntity : AuditableEntity, IHasOuterId { [NotMapped] public abstract string Kind { get; } @@ -63,6 +63,9 @@ public abstract class NotificationMessageEntity : AuditableEntity [StringLength(10)] public string LanguageCode { get; set; } + [StringLength(128)] + public string OuterId { get; set; } + #region Navigation Properties /// diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationTemplateEntity.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationTemplateEntity.cs index 72d465fea..6a96b7c86 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationTemplateEntity.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Model/NotificationTemplateEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.NotificationsModule.Data.Model /// /// Entity is template of Notification /// - public abstract class NotificationTemplateEntity : AuditableEntity + public abstract class NotificationTemplateEntity : AuditableEntity, IHasOuterId { public abstract string Kind { get; } /// @@ -17,6 +17,9 @@ public abstract class NotificationTemplateEntity : AuditableEntity [StringLength(10)] public string LanguageCode { get; set; } + [StringLength(128)] + public string OuterId { get; set; } + #region Navigation Properties /// diff --git a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Repositories/NotificationDbContext.cs b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Repositories/NotificationDbContext.cs index 8f031cd77..be9127cfd 100644 --- a/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Repositories/NotificationDbContext.cs +++ b/Modules/vc-module-notifications/VirtoCommerce.NotificationsModule.Data/Repositories/NotificationDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.NotificationsModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.NotificationsModule.Data.Repositories { - public class NotificationDbContext : DbContextWithTriggers + public class NotificationDbContext : DbContextWithTriggersAndQueryFiltersBase { //Add-Migration Initial -Context VirtoCommerce.NotificationsModule.Data.Repositories.NotificationDbContext -StartupProject VirtoCommerce.NotificationsModule.Data -Verbose -OutputDir Migrations public NotificationDbContext(DbContextOptions options) diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.Designer.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..01f4cf469 --- /dev/null +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.Designer.cs @@ -0,0 +1,1062 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.OrdersModule.Data.Repositories; + +namespace VirtoCommerce.OrdersModule.Data.Migrations +{ + [DbContext(typeof(OrderDbContext))] + [Migration("20190909091530_AddOrderSupportSoftDeletion")] + partial class AddOrderSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.AddressEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AddressType") + .HasMaxLength(32); + + b.Property("City") + .IsRequired() + .HasMaxLength(128); + + b.Property("CountryCode") + .HasMaxLength(3); + + b.Property("CountryName") + .IsRequired() + .HasMaxLength(64); + + b.Property("CustomerOrderId"); + + b.Property("Email") + .HasMaxLength(254); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(64); + + b.Property("LastName") + .IsRequired() + .HasMaxLength(64); + + b.Property("Line1") + .HasMaxLength(2048); + + b.Property("Line2") + .HasMaxLength(2048); + + b.Property("Organization") + .HasMaxLength(64); + + b.Property("PaymentInId"); + + b.Property("Phone") + .HasMaxLength(64); + + b.Property("PostalCode") + .HasMaxLength(64); + + b.Property("RegionId") + .HasMaxLength(128); + + b.Property("RegionName") + .HasMaxLength(128); + + b.Property("ShipmentId"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.HasIndex("PaymentInId"); + + b.HasIndex("ShipmentId"); + + b.ToTable("OrderAddress"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CancelReason") + .HasMaxLength(2048); + + b.Property("CancelledDate"); + + b.Property("ChannelId") + .HasMaxLength(64); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CustomerName") + .HasMaxLength(255); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountTotal") + .HasColumnType("Money"); + + b.Property("DiscountTotalWithTax") + .HasColumnType("Money"); + + b.Property("EmployeeId") + .HasMaxLength(64); + + b.Property("EmployeeName") + .HasMaxLength(255); + + b.Property("HandlingTotal") + .HasColumnType("Money"); + + b.Property("HandlingTotalWithTax") + .HasColumnType("Money"); + + b.Property("IsApproved"); + + b.Property("IsCancelled"); + + b.Property("IsDeleted"); + + b.Property("IsPrototype"); + + b.Property("LanguageCode") + .HasMaxLength(16); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Number") + .IsRequired() + .HasMaxLength(64); + + b.Property("OrganizationId") + .HasMaxLength(64); + + b.Property("OrganizationName") + .HasMaxLength(255); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PaymentTotal") + .HasColumnType("Money"); + + b.Property("PaymentTotalWithTax") + .HasColumnType("Money"); + + b.Property("ShippingTotal") + .HasColumnType("Money"); + + b.Property("ShippingTotalWithTax") + .HasColumnType("Money"); + + b.Property("ShoppingCartId") + .HasMaxLength(128); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("StoreId") + .IsRequired() + .HasMaxLength(64); + + b.Property("StoreName") + .HasMaxLength(255); + + b.Property("SubTotal") + .HasColumnType("Money"); + + b.Property("SubTotalWithTax") + .HasColumnType("Money"); + + b.Property("SubscriptionId") + .HasMaxLength(64); + + b.Property("SubscriptionNumber") + .HasMaxLength(64); + + b.Property("Sum") + .HasColumnType("Money"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("Total") + .HasColumnType("Money"); + + b.HasKey("Id"); + + b.ToTable("CustomerOrder"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.DiscountEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CouponCode") + .HasMaxLength(64); + + b.Property("CouponInvalidDescription") + .HasMaxLength(1024); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerOrderId"); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("LineItemId"); + + b.Property("PaymentInId"); + + b.Property("PromotionDescription") + .HasMaxLength(1024); + + b.Property("PromotionId") + .HasMaxLength(64); + + b.Property("ShipmentId"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentInId"); + + b.HasIndex("ShipmentId"); + + b.ToTable("OrderDiscount"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CancelReason") + .HasMaxLength(2048); + + b.Property("CancelledDate"); + + b.Property("CatalogId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CategoryId") + .HasMaxLength(64); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerOrderId"); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("FulfillmentLocationCode") + .HasMaxLength(64); + + b.Property("Height"); + + b.Property("ImageUrl") + .HasMaxLength(1028); + + b.Property("IsCancelled"); + + b.Property("IsDeleted"); + + b.Property("IsGift"); + + b.Property("IsReccuring"); + + b.Property("Length"); + + b.Property("MeasureUnit") + .HasMaxLength(32); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("Money"); + + b.Property("PriceId") + .HasMaxLength(128); + + b.Property("PriceWithTax") + .HasColumnType("Money"); + + b.Property("ProductId") + .IsRequired() + .HasMaxLength(64); + + b.Property("ProductType") + .HasMaxLength(64); + + b.Property("Quantity"); + + b.Property("ShippingMethodCode") + .HasMaxLength(64); + + b.Property("Sku") + .IsRequired() + .HasMaxLength(64); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("Weight"); + + b.Property("WeightUnit") + .HasMaxLength(32); + + b.Property("Width"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.ToTable("OrderLineItem"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.OrderDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("CustomerOrderId"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("LineItemId"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PaymentInId"); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShipmentId"); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentInId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ObjectType", "CustomerOrderId") + .HasName("IX_ObjectType_CustomerOrderId"); + + b.HasIndex("ObjectType", "LineItemId") + .HasName("IX_ObjectType_LineItemId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.HasIndex("ObjectType", "PaymentInId") + .HasName("IX_ObjectType_PaymentInId"); + + b.HasIndex("ObjectType", "ShipmentId") + .HasName("IX_ObjectType_ShipmentId"); + + b.ToTable("OrderDynamicPropertyObjectValue"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.PaymentGatewayTransactionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Amount") + .HasColumnType("Money"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .HasMaxLength(3); + + b.Property("GatewayIpAddress") + .HasMaxLength(128); + + b.Property("IsProcessed"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Note") + .HasMaxLength(2048); + + b.Property("PaymentInId") + .IsRequired(); + + b.Property("ProcessAttemptCount"); + + b.Property("ProcessError") + .HasMaxLength(2048); + + b.Property("ProcessedDate"); + + b.Property("RequestData"); + + b.Property("ResponseCode") + .HasMaxLength(64); + + b.Property("ResponseData"); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("Type") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("PaymentInId"); + + b.ToTable("OrderPaymentGatewayTransaction"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AuthorizedDate"); + + b.Property("CancelReason") + .HasMaxLength(2048); + + b.Property("CancelledDate"); + + b.Property("CapturedDate"); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CustomerName") + .HasMaxLength(255); + + b.Property("CustomerOrderId"); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("GatewayCode") + .HasMaxLength(64); + + b.Property("IncomingDate"); + + b.Property("IsApproved"); + + b.Property("IsCancelled"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Number") + .IsRequired() + .HasMaxLength(64); + + b.Property("OrganizationId") + .HasMaxLength(64); + + b.Property("OrganizationName") + .HasMaxLength(255); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("Money"); + + b.Property("PriceWithTax") + .HasColumnType("Money"); + + b.Property("Purpose") + .HasMaxLength(1024); + + b.Property("ShipmentId"); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("Sum") + .HasColumnType("Money"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("Total") + .HasColumnType("Money"); + + b.Property("TotalWithTax") + .HasColumnType("Money"); + + b.Property("VoidedDate"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.HasIndex("ShipmentId"); + + b.ToTable("OrderPaymentIn"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CancelReason") + .HasMaxLength(2048); + + b.Property("CancelledDate"); + + b.Property("Comment") + .HasMaxLength(2048); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(3); + + b.Property("CustomerOrderId") + .IsRequired(); + + b.Property("DiscountAmount") + .HasColumnType("Money"); + + b.Property("DiscountAmountWithTax") + .HasColumnType("Money"); + + b.Property("EmployeeId") + .HasMaxLength(64); + + b.Property("EmployeeName") + .HasMaxLength(255); + + b.Property("FulfillmentCenterId") + .HasMaxLength(64); + + b.Property("FulfillmentCenterName") + .HasMaxLength(255); + + b.Property("Height"); + + b.Property("IsApproved"); + + b.Property("IsCancelled"); + + b.Property("IsDeleted"); + + b.Property("Length"); + + b.Property("MeasureUnit") + .HasMaxLength(32); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Number") + .IsRequired() + .HasMaxLength(64); + + b.Property("OrganizationId") + .HasMaxLength(64); + + b.Property("OrganizationName") + .HasMaxLength(255); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Price") + .HasColumnType("Money"); + + b.Property("PriceWithTax") + .HasColumnType("Money"); + + b.Property("ShipmentMethodCode") + .HasMaxLength(64); + + b.Property("ShipmentMethodOption") + .HasMaxLength(64); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("Sum") + .HasColumnType("Money"); + + b.Property("TaxPercentRate") + .HasColumnType("decimal(18,4)"); + + b.Property("TaxTotal") + .HasColumnType("Money"); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("Total") + .HasColumnType("Money"); + + b.Property("TotalWithTax") + .HasColumnType("Money"); + + b.Property("VolumetricWeight"); + + b.Property("Weight"); + + b.Property("WeightUnit") + .HasMaxLength(32); + + b.Property("Width"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.ToTable("OrderShipment"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BarCode") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("IsDeleted"); + + b.Property("LineItemId") + .IsRequired(); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Quantity"); + + b.Property("ShipmentId") + .IsRequired(); + + b.Property("ShipmentPackageId"); + + b.HasKey("Id"); + + b.HasIndex("LineItemId"); + + b.HasIndex("ShipmentId"); + + b.HasIndex("ShipmentPackageId"); + + b.ToTable("OrderShipmentItem"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentPackageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BarCode") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Height"); + + b.Property("Length"); + + b.Property("MeasureUnit") + .HasMaxLength(32); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("PackageType") + .HasMaxLength(64); + + b.Property("ShipmentId") + .IsRequired(); + + b.Property("Weight"); + + b.Property("WeightUnit") + .HasMaxLength(32); + + b.Property("Width"); + + b.HasKey("Id"); + + b.HasIndex("ShipmentId"); + + b.ToTable("OrderShipmentPackage"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.TaxDetailEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Amount") + .HasColumnType("Money"); + + b.Property("CustomerOrderId"); + + b.Property("LineItemId"); + + b.Property("Name") + .HasMaxLength(1024); + + b.Property("PaymentInId"); + + b.Property("Rate"); + + b.Property("ShipmentId"); + + b.HasKey("Id"); + + b.HasIndex("CustomerOrderId"); + + b.HasIndex("LineItemId"); + + b.HasIndex("PaymentInId"); + + b.HasIndex("ShipmentId"); + + b.ToTable("OrderTaxDetail"); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.AddressEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("Addresses") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", "PaymentIn") + .WithMany("Addresses") + .HasForeignKey("PaymentInId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Addresses") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.DiscountEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("Discounts") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("Discounts") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", "PaymentIn") + .WithMany("Discounts") + .HasForeignKey("PaymentInId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Discounts") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("Items") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.OrderDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", "PaymentIn") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("PaymentInId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.PaymentGatewayTransactionEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", "PaymentIn") + .WithMany("Transactions") + .HasForeignKey("PaymentInId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("InPayments") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("InPayments") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Restrict); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("Shipments") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentItemEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("ShipmentItems") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Items") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentPackageEntity", "ShipmentPackage") + .WithMany("Items") + .HasForeignKey("ShipmentPackageId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentPackageEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("Packages") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.TaxDetailEntity", b => + { + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.CustomerOrderEntity", "CustomerOrder") + .WithMany("TaxDetails") + .HasForeignKey("CustomerOrderId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", "LineItem") + .WithMany("TaxDetails") + .HasForeignKey("LineItemId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.PaymentInEntity", "PaymentIn") + .WithMany("TaxDetails") + .HasForeignKey("PaymentInId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("VirtoCommerce.OrdersModule.Data.Model.ShipmentEntity", "Shipment") + .WithMany("TaxDetails") + .HasForeignKey("ShipmentId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.cs new file mode 100644 index 000000000..8c115e44f --- /dev/null +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/20190909091530_AddOrderSupportSoftDeletion.cs @@ -0,0 +1,63 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.OrdersModule.Data.Migrations +{ + public partial class AddOrderSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "OrderShipmentItem", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "OrderShipment", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "OrderPaymentIn", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "OrderLineItem", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "CustomerOrder", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "OrderShipmentItem"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "OrderShipment"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "OrderPaymentIn"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "OrderLineItem"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "CustomerOrder"); + } + } +} diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/OrderDbContextModelSnapshot.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/OrderDbContextModelSnapshot.cs index 8e31849f8..875d53ac1 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/OrderDbContextModelSnapshot.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Migrations/OrderDbContextModelSnapshot.cs @@ -1,4 +1,4 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -146,6 +146,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsCancelled"); + b.Property("IsDeleted"); + b.Property("IsPrototype"); b.Property("LanguageCode") @@ -320,6 +322,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsCancelled"); + b.Property("IsDeleted"); + b.Property("IsGift"); b.Property("IsReccuring"); @@ -588,6 +592,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsCancelled"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -699,6 +705,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsCancelled"); + b.Property("IsDeleted"); + b.Property("Length"); b.Property("MeasureUnit") @@ -785,6 +793,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedDate"); + b.Property("IsDeleted"); + b.Property("LineItemId") .IsRequired(); @@ -999,7 +1009,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("VirtoCommerce.OrdersModule.Data.Model.ShipmentItemEntity", b => { b.HasOne("VirtoCommerce.OrdersModule.Data.Model.LineItemEntity", "LineItem") - .WithMany() + .WithMany("ShipmentItems") .HasForeignKey("LineItemId") .OnDelete(DeleteBehavior.Cascade); diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/LineItemEntity.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/LineItemEntity.cs index f4810dc18..3c9c694d9 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/LineItemEntity.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/LineItemEntity.cs @@ -12,7 +12,7 @@ namespace VirtoCommerce.OrdersModule.Data.Model { - public class LineItemEntity : AuditableEntity, IHasOuterId + public class LineItemEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [StringLength(128)] public string PriceId { get; set; } @@ -86,6 +86,8 @@ public class LineItemEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region NavigationProperties public string CustomerOrderId { get; set; } diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/OperationEntity.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/OperationEntity.cs index f30683022..be63d2fbf 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/OperationEntity.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/OperationEntity.cs @@ -11,7 +11,7 @@ namespace VirtoCommerce.OrdersModule.Data.Model { - public abstract class OperationEntity : AuditableEntity, IHasOuterId + public abstract class OperationEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(64)] @@ -38,6 +38,8 @@ public abstract class OperationEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + public virtual OrderOperation ToModel(OrderOperation operation) { if (operation == null) diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/PaymentInEntity.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/PaymentInEntity.cs index a6b3794c9..5bf1b6d99 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/PaymentInEntity.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/PaymentInEntity.cs @@ -14,7 +14,7 @@ namespace VirtoCommerce.OrdersModule.Data.Model { - public class PaymentInEntity : OperationEntity, ISupportPartialPriceUpdate + public class PaymentInEntity : OperationEntity, ISupportPartialPriceUpdate, ISupportSoftDeletion { [StringLength(64)] public string OrganizationId { get; set; } @@ -59,6 +59,8 @@ public class PaymentInEntity : OperationEntity, ISupportPartialPriceUpdate public decimal TaxTotal { get; set; } public decimal TaxPercentRate { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string CustomerOrderId { get; set; } diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentEntity.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentEntity.cs index 061b09fab..58c073fc1 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentEntity.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentEntity.cs @@ -13,7 +13,7 @@ namespace VirtoCommerce.OrdersModule.Data.Model { - public class ShipmentEntity : OperationEntity, ISupportPartialPriceUpdate + public class ShipmentEntity : OperationEntity, ISupportPartialPriceUpdate, ISupportSoftDeletion { [StringLength(64)] public string OrganizationId { get; set; } diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentItemEntity.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentItemEntity.cs index a589f863a..d436a1d51 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentItemEntity.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Model/ShipmentItemEntity.cs @@ -6,13 +6,15 @@ namespace VirtoCommerce.OrdersModule.Data.Model { - public class ShipmentItemEntity : AuditableEntity + public class ShipmentItemEntity : AuditableEntity, ISupportSoftDeletion { [StringLength(128)] public string BarCode { get; set; } public int Quantity { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties [NotMapped] diff --git a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Repositories/OrderDbContext.cs b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Repositories/OrderDbContext.cs index c475d0499..0d37a7e26 100644 --- a/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Repositories/OrderDbContext.cs +++ b/Modules/vc-module-orders/VirtoCommerce.OrdersModule.Data/Repositories/OrderDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.OrdersModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.OrdersModule.Data.Repositories { - public class OrderDbContext : DbContextWithTriggers + public class OrderDbContext : DbContextWithTriggersAndQueryFiltersBase { public OrderDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.Designer.cs b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..9b5e66bbd --- /dev/null +++ b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.Designer.cs @@ -0,0 +1,62 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.PaymentModule.Data.Repositories; + +namespace VirtoCommerce.PaymentModule.Data.Migrations +{ + [DbContext(typeof(PaymentDbContext))] + [Migration("20190909121810_AddPaymentSupportSoftDeletion")] + partial class AddPaymentSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.PaymentModule.Data.Model.StorePaymentMethodEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Code") + .IsRequired() + .HasMaxLength(128); + + b.Property("IsActive"); + + b.Property("IsAvailableForPartial"); + + b.Property("IsDeleted"); + + b.Property("LogoUrl") + .HasMaxLength(2048); + + b.Property("Priority"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("TypeName") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("TypeName", "StoreId") + .IsUnique() + .HasName("IX_StorePaymentMethodEntity_TypeName_StoreId") + .HasFilter("[TypeName] IS NOT NULL AND [StoreId] IS NOT NULL"); + + b.ToTable("StorePaymentMethod"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.cs b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.cs new file mode 100644 index 000000000..ac5bae4fa --- /dev/null +++ b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/20190909121810_AddPaymentSupportSoftDeletion.cs @@ -0,0 +1,64 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.PaymentModule.Data.Migrations +{ + public partial class AddPaymentSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StorePaymentMethodEntity_TypeName_StoreId", + table: "StorePaymentMethod"); + + migrationBuilder.DropColumn( + name: "Description", + table: "StorePaymentMethod"); + + migrationBuilder.DropColumn( + name: "Name", + table: "StorePaymentMethod"); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "StorePaymentMethod", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateIndex( + name: "IX_StorePaymentMethodEntity_TypeName_StoreId", + table: "StorePaymentMethod", + columns: new[] { "TypeName", "StoreId" }, + unique: true, + filter: "[TypeName] IS NOT NULL AND [StoreId] IS NOT NULL"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_StorePaymentMethodEntity_TypeName_StoreId", + table: "StorePaymentMethod"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "StorePaymentMethod"); + + migrationBuilder.AddColumn( + name: "Description", + table: "StorePaymentMethod", + nullable: true); + + migrationBuilder.AddColumn( + name: "Name", + table: "StorePaymentMethod", + maxLength: 128, + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_StorePaymentMethodEntity_TypeName_StoreId", + table: "StorePaymentMethod", + columns: new[] { "TypeName", "StoreId" }, + unique: true, + filter: "[StoreId] IS NOT NULL"); + } + } +} diff --git a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/PaymentDbContextModelSnapshot.cs b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/PaymentDbContextModelSnapshot.cs index 8eb54bb77..660181022 100644 --- a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/PaymentDbContextModelSnapshot.cs +++ b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Migrations/PaymentDbContextModelSnapshot.cs @@ -1,7 +1,8 @@ -// +// using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using VirtoCommerce.PaymentModule.Data.Repositories; namespace VirtoCommerce.PaymentModule.Data.Migrations @@ -27,18 +28,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasMaxLength(128); - b.Property("Description"); - b.Property("IsActive"); b.Property("IsAvailableForPartial"); + b.Property("IsDeleted"); + b.Property("LogoUrl") .HasMaxLength(2048); - b.Property("Name") - .HasMaxLength(128); - b.Property("Priority"); b.Property("StoreId") @@ -52,7 +50,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TypeName", "StoreId") .IsUnique() .HasName("IX_StorePaymentMethodEntity_TypeName_StoreId") - .HasFilter("[StoreId] IS NOT NULL"); + .HasFilter("[TypeName] IS NOT NULL AND [StoreId] IS NOT NULL"); b.ToTable("StorePaymentMethod"); }); diff --git a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Model/StorePaymentMethodEntity.cs b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Model/StorePaymentMethodEntity.cs index ed8be8541..e493323c7 100644 --- a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Model/StorePaymentMethodEntity.cs +++ b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Model/StorePaymentMethodEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.PaymentModule.Data.Model { - public class StorePaymentMethodEntity : Entity + public class StorePaymentMethodEntity : Entity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -24,6 +24,8 @@ public class StorePaymentMethodEntity : Entity public string StoreId { get; set; } + public bool IsDeleted { get; set; } + public virtual PaymentMethod ToModel(PaymentMethod paymentMethod) { if (paymentMethod == null) diff --git a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Repositories/PaymentDbContext.cs b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Repositories/PaymentDbContext.cs index 650532382..d77026cbc 100644 --- a/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Repositories/PaymentDbContext.cs +++ b/Modules/vc-module-payment/VirtoCommerce.Payment.Data/Repositories/PaymentDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; using VirtoCommerce.PaymentModule.Data.Model; +using VirtoCommerce.Platform.Data.Infrastructure; namespace VirtoCommerce.PaymentModule.Data.Repositories { - public class PaymentDbContext : DbContextWithTriggers + public class PaymentDbContext : DbContextWithTriggersAndQueryFiltersBase { public PaymentDbContext(DbContextOptions options) : base(options) { diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.Designer.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..a6cfc90ff --- /dev/null +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.Designer.cs @@ -0,0 +1,179 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.PricingModule.Data.Repositories; + +namespace VirtoCommerce.PricingModule.Data.Migrations +{ + [DbContext(typeof(PricingDbContext))] + [Migration("20190909121524_AddPricingSupportSoftDeletion")] + partial class AddPricingSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.PricingModule.Data.Model.PriceEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("List") + .HasColumnType("Money"); + + b.Property("MinQuantity"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PricelistId") + .IsRequired(); + + b.Property("ProductId") + .HasMaxLength(128); + + b.Property("ProductName") + .HasMaxLength(1024); + + b.Property("Sale") + .HasColumnType("Money"); + + b.HasKey("Id"); + + b.HasIndex("PricelistId"); + + b.HasIndex("ProductId", "PricelistId") + .HasName("IX_PriceId"); + + b.ToTable("Price"); + }); + + modelBuilder.Entity("VirtoCommerce.PricingModule.Data.Model.PricelistAssignmentEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CatalogId") + .IsRequired() + .HasMaxLength(128); + + b.Property("ConditionExpression"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Description") + .HasMaxLength(512); + + b.Property("EndDate"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("PredicateVisualTreeSerialized"); + + b.Property("PricelistId") + .IsRequired(); + + b.Property("Priority"); + + b.Property("StartDate"); + + b.HasKey("Id"); + + b.HasIndex("PricelistId"); + + b.ToTable("PricelistAssignment"); + }); + + modelBuilder.Entity("VirtoCommerce.PricingModule.Data.Model.PricelistEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Currency") + .IsRequired() + .HasMaxLength(64); + + b.Property("Description") + .HasMaxLength(512); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("OuterId"); + + b.ToTable("Pricelist"); + }); + + modelBuilder.Entity("VirtoCommerce.PricingModule.Data.Model.PriceEntity", b => + { + b.HasOne("VirtoCommerce.PricingModule.Data.Model.PricelistEntity", "Pricelist") + .WithMany("Prices") + .HasForeignKey("PricelistId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.PricingModule.Data.Model.PricelistAssignmentEntity", b => + { + b.HasOne("VirtoCommerce.PricingModule.Data.Model.PricelistEntity", "Pricelist") + .WithMany("Assignments") + .HasForeignKey("PricelistId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.cs new file mode 100644 index 000000000..21ac9b617 --- /dev/null +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/20190909121524_AddPricingSupportSoftDeletion.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.PricingModule.Data.Migrations +{ + public partial class AddPricingSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "PricelistAssignment", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Pricelist", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "PricelistAssignment"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Pricelist"); + } + } +} diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/PricingDbContextModelSnapshot.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/PricingDbContextModelSnapshot.cs index 737e13110..b26a96802 100644 --- a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/PricingDbContextModelSnapshot.cs +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Migrations/PricingDbContextModelSnapshot.cs @@ -1,4 +1,4 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -87,6 +87,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("EndDate"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -133,6 +135,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Description") .HasMaxLength(512); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistAssignmentEntity.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistAssignmentEntity.cs index fd388e854..d228124ac 100644 --- a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistAssignmentEntity.cs +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistAssignmentEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.PricingModule.Data.Model { - public class PricelistAssignmentEntity : AuditableEntity, IHasOuterId + public class PricelistAssignmentEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [StringLength(128)] [Required] @@ -34,6 +34,8 @@ public class PricelistAssignmentEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string PricelistId { get; set; } diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistEntity.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistEntity.cs index 039bdd8d9..5bca93ad5 100644 --- a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistEntity.cs +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Model/PricelistEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.PricingModule.Data.Model { - public class PricelistEntity : AuditableEntity + public class PricelistEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -24,6 +24,8 @@ public class PricelistEntity : AuditableEntity [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection Prices { get; set; } diff --git a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Repositories/PricingDbContext.cs b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Repositories/PricingDbContext.cs index 46400a74d..ab8a50064 100644 --- a/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Repositories/PricingDbContext.cs +++ b/Modules/vc-module-pricing/VirtoCommerce.PricingModule.Data/Repositories/PricingDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.PricingModule.Data.Model; namespace VirtoCommerce.PricingModule.Data.Repositories { - public class PricingDbContext : DbContextWithTriggers + public class PricingDbContext : DbContextWithTriggersAndQueryFiltersBase { public PricingDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.Designer.cs b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..4fe953567 --- /dev/null +++ b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.Designer.cs @@ -0,0 +1,63 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.ShippingModule.Data.Repositories; + +namespace VirtoCommerce.ShippingModule.Data.Migrations +{ + [DbContext(typeof(ShippingDbContext))] + [Migration("20190909123110_AddShippingSupportSoftDeletion")] + partial class AddShippingSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.ShippingModule.Data.Model.StoreShippingMethodEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Code") + .IsRequired() + .HasMaxLength(128); + + b.Property("IsActive"); + + b.Property("IsDeleted"); + + b.Property("LogoUrl") + .HasMaxLength(2048); + + b.Property("Priority"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("TaxType") + .HasMaxLength(64); + + b.Property("TypeName") + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("TypeName", "StoreId") + .IsUnique() + .HasName("IX_StoreShippingMethodEntity_TypeName_StoreId") + .HasFilter("[TypeName] IS NOT NULL AND [StoreId] IS NOT NULL"); + + b.ToTable("StoreShippingMethod"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.cs b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.cs new file mode 100644 index 000000000..21d804033 --- /dev/null +++ b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/20190909123110_AddShippingSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.ShippingModule.Data.Migrations +{ + public partial class AddShippingSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "StoreShippingMethod", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "StoreShippingMethod"); + } + } +} diff --git a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/ShippingDbContextModelSnapshot.cs b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/ShippingDbContextModelSnapshot.cs index 1ba09c867..685faf987 100644 --- a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/ShippingDbContextModelSnapshot.cs +++ b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Migrations/ShippingDbContextModelSnapshot.cs @@ -30,6 +30,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsActive"); + b.Property("IsDeleted"); + b.Property("LogoUrl") .HasMaxLength(2048); diff --git a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Model/StoreShippingMethodEntity.cs b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Model/StoreShippingMethodEntity.cs index 805f59cbd..78ab600dd 100644 --- a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Model/StoreShippingMethodEntity.cs +++ b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Model/StoreShippingMethodEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.ShippingModule.Data.Model { - public class StoreShippingMethodEntity : Entity + public class StoreShippingMethodEntity : Entity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -25,6 +25,8 @@ public class StoreShippingMethodEntity : Entity public string StoreId { get; set; } + public bool IsDeleted { get; set; } + public virtual ShippingMethod ToModel(ShippingMethod shippingMethod) { if (shippingMethod == null) diff --git a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Repositories/ShippingDbContext.cs b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Repositories/ShippingDbContext.cs index c4f5bd18d..26163c48c 100644 --- a/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Repositories/ShippingDbContext.cs +++ b/Modules/vc-module-shipping/VirtoCommerce.ShippingModule.Data/Repositories/ShippingDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.ShippingModule.Data.Model; namespace VirtoCommerce.ShippingModule.Data.Repositories { - public class ShippingDbContext : DbContextWithTriggers + public class ShippingDbContext : DbContextWithTriggersAndQueryFiltersBase { public ShippingDbContext(DbContextOptions options) : base(options) { diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.Designer.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..881865b78 --- /dev/null +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.Designer.cs @@ -0,0 +1,115 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.SitemapsModule.Data.Repositories; + +namespace VirtoCommerce.SitemapsModule.Data.Migrations +{ + [DbContext(typeof(SitemapDbContext))] + [Migration("20190909123559_AddSitemapsSupportSoftDeletion")] + partial class AddSitemapsSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.SitemapsModule.Data.Models.SitemapEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Filename") + .IsRequired() + .HasMaxLength(256); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("StoreId") + .IsRequired() + .HasMaxLength(64); + + b.Property("UrlTemplate") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Filename"); + + b.ToTable("Sitemap"); + }); + + modelBuilder.Entity("VirtoCommerce.SitemapsModule.Data.Models.SitemapItemEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ImageUrl") + .HasMaxLength(512); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .IsRequired() + .HasMaxLength(128); + + b.Property("SitemapId") + .IsRequired(); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256); + + b.Property("UrlTemplate") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("SitemapId"); + + b.ToTable("SitemapItem"); + }); + + modelBuilder.Entity("VirtoCommerce.SitemapsModule.Data.Models.SitemapItemEntity", b => + { + b.HasOne("VirtoCommerce.SitemapsModule.Data.Models.SitemapEntity", "Sitemap") + .WithMany("Items") + .HasForeignKey("SitemapId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.cs new file mode 100644 index 000000000..ef803898d --- /dev/null +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/20190909123559_AddSitemapsSupportSoftDeletion.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.SitemapsModule.Data.Migrations +{ + public partial class AddSitemapsSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "SitemapItem", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Sitemap", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "SitemapItem"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Sitemap"); + } + } +} diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/SitemapDbContextModelSnapshot.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/SitemapDbContextModelSnapshot.cs index 96835db36..29b98cc71 100644 --- a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/SitemapDbContextModelSnapshot.cs +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Migrations/SitemapDbContextModelSnapshot.cs @@ -1,4 +1,4 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -34,6 +34,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasMaxLength(256); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -67,6 +69,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ImageUrl") .HasMaxLength(512); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapEntity.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapEntity.cs index 053f3c43d..a839fde6e 100644 --- a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapEntity.cs +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapEntity.cs @@ -8,7 +8,7 @@ namespace VirtoCommerce.SitemapsModule.Data.Models { - public class SitemapEntity : AuditableEntity + public class SitemapEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(256)] @@ -24,6 +24,8 @@ public class SitemapEntity : AuditableEntity [NotMapped] public int TotalItemsCount { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection Items { get; set; } diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapItemEntity.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapItemEntity.cs index b3dd25fbd..0d467e32a 100644 --- a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapItemEntity.cs +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Models/SitemapItemEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.SitemapsModule.Data.Models { - public class SitemapItemEntity : AuditableEntity + public class SitemapItemEntity : AuditableEntity, ISupportSoftDeletion { [Required] [StringLength(256)] @@ -24,6 +24,8 @@ public class SitemapItemEntity : AuditableEntity [StringLength(256)] public string UrlTemplate { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string SitemapId { get; set; } diff --git a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Repositories/SitemapDbContext.cs b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Repositories/SitemapDbContext.cs index d16356490..70b6beb07 100644 --- a/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Repositories/SitemapDbContext.cs +++ b/Modules/vc-module-sitemaps/VirtoCommerce.SitemapsModule.Data/Repositories/SitemapDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.SitemapsModule.Data.Models; namespace VirtoCommerce.SitemapsModule.Data.Repositories { - public class SitemapDbContext : DbContextWithTriggers + public class SitemapDbContext : DbContextWithTriggersAndQueryFiltersBase { public SitemapDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.Designer.cs b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..ab13c3571 --- /dev/null +++ b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.Designer.cs @@ -0,0 +1,347 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.StoreModule.Data.Repositories; + +namespace VirtoCommerce.StoreModule.Data.Migrations +{ + [DbContext(typeof(StoreDbContext))] + [Migration("20190909123819_AddStoreSupportSoftDeletion")] + partial class AddStoreSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.SeoInfoEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("ImageAltDescription") + .HasMaxLength(255); + + b.Property("IsActive"); + + b.Property("Keyword") + .IsRequired() + .HasMaxLength(255); + + b.Property("Language") + .HasMaxLength(5); + + b.Property("MetaDescription") + .HasMaxLength(1024); + + b.Property("MetaKeywords") + .HasMaxLength(255); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("Title") + .HasMaxLength(255); + + b.HasKey("Id"); + + b.HasIndex("StoreId"); + + b.ToTable("StoreSeoInfo"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreCurrencyEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CurrencyCode") + .IsRequired() + .HasMaxLength(32); + + b.Property("StoreId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("StoreId"); + + b.ToTable("StoreCurrency"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("ObjectId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.ToTable("StoreDynamicPropertyObjectValue"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("AdminEmail") + .HasMaxLength(128); + + b.Property("Catalog") + .IsRequired() + .HasMaxLength(128); + + b.Property("Country") + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("CreditCardSavePolicy"); + + b.Property("DefaultCurrency") + .HasMaxLength(64); + + b.Property("DefaultLanguage") + .HasMaxLength(128); + + b.Property("Description") + .HasMaxLength(256); + + b.Property("DisplayOutOfStock"); + + b.Property("Email") + .HasMaxLength(128); + + b.Property("FulfillmentCenterId") + .HasMaxLength(128); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("Region") + .HasMaxLength(128); + + b.Property("ReturnsFulfillmentCenterId") + .HasMaxLength(128); + + b.Property("SecureUrl") + .HasMaxLength(128); + + b.Property("StoreState"); + + b.Property("TimeZone") + .HasMaxLength(128); + + b.Property("Url") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.ToTable("Store"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreFulfillmentCenterEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("FulfillmentCenterId") + .IsRequired() + .HasMaxLength(128); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128); + + b.Property("StoreId") + .IsRequired(); + + b.Property("Type") + .IsRequired() + .HasMaxLength(32); + + b.HasKey("Id"); + + b.HasIndex("StoreId"); + + b.ToTable("StoreFulfillmentCenter"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreLanguageEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("LanguageCode") + .IsRequired() + .HasMaxLength(32); + + b.Property("StoreId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("StoreId"); + + b.ToTable("StoreLanguage"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreTrustedGroupEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128); + + b.Property("StoreId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasIndex("StoreId"); + + b.ToTable("StoreTrustedGroup"); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.SeoInfoEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("SeoInfos") + .HasForeignKey("StoreId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreCurrencyEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("Currencies") + .HasForeignKey("StoreId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ObjectId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreFulfillmentCenterEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("FulfillmentCenters") + .HasForeignKey("StoreId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreLanguageEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("Languages") + .HasForeignKey("StoreId") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreTrustedGroupEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("TrustedGroups") + .HasForeignKey("StoreId") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.cs b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.cs new file mode 100644 index 000000000..5c9df9ec5 --- /dev/null +++ b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/20190909123819_AddStoreSupportSoftDeletion.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.StoreModule.Data.Migrations +{ + public partial class AddStoreSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Store", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Store"); + } + } +} diff --git a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/StoreDbContextModelSnapshot.cs b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/StoreDbContextModelSnapshot.cs index a3024a4d4..64d50ff82 100644 --- a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/StoreDbContextModelSnapshot.cs +++ b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Migrations/StoreDbContextModelSnapshot.cs @@ -1,8 +1,9 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using VirtoCommerce.StoreModule.Data.Repositories; namespace VirtoCommerce.StoreModule.Data.Migrations @@ -85,6 +86,68 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("StoreCurrency"); }); + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreDynamicPropertyObjectValueEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("BooleanValue"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("DateTimeValue"); + + b.Property("DecimalValue") + .HasColumnType("decimal(18,5)"); + + b.Property("DictionaryItemId") + .HasMaxLength(128); + + b.Property("IntegerValue"); + + b.Property("Locale") + .HasMaxLength(64); + + b.Property("LongTextValue"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ObjectId") + .HasMaxLength(128); + + b.Property("ObjectType") + .HasMaxLength(256); + + b.Property("PropertyId") + .HasMaxLength(128); + + b.Property("PropertyName") + .HasMaxLength(256); + + b.Property("ShortTextValue") + .HasMaxLength(512); + + b.Property("ValueType") + .IsRequired() + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("ObjectId"); + + b.HasIndex("ObjectType", "ObjectId") + .HasName("IX_ObjectType_ObjectId"); + + b.ToTable("StoreDynamicPropertyObjectValue"); + }); + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreEntity", b => { b.Property("Id") @@ -125,6 +188,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("FulfillmentCenterId") .HasMaxLength(128); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); @@ -243,6 +308,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) .OnDelete(DeleteBehavior.Cascade); }); + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreDynamicPropertyObjectValueEntity", b => + { + b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") + .WithMany("DynamicPropertyObjectValues") + .HasForeignKey("ObjectId") + .OnDelete(DeleteBehavior.Restrict); + }); + modelBuilder.Entity("VirtoCommerce.StoreModule.Data.Model.StoreFulfillmentCenterEntity", b => { b.HasOne("VirtoCommerce.StoreModule.Data.Model.StoreEntity", "Store") diff --git a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Model/StoreEntity.cs b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Model/StoreEntity.cs index a1f3c51fc..31bc437de 100644 --- a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Model/StoreEntity.cs +++ b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Model/StoreEntity.cs @@ -9,7 +9,7 @@ namespace VirtoCommerce.StoreModule.Data.Model { - public class StoreEntity : AuditableEntity, IHasOuterId + public class StoreEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -63,6 +63,8 @@ public class StoreEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public virtual ObservableCollection Languages { get; set; } diff --git a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Repositories/StoreDbContext.cs b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Repositories/StoreDbContext.cs index daa9afe8d..ff76b852c 100644 --- a/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Repositories/StoreDbContext.cs +++ b/Modules/vc-module-store/VirtoCommerce.StoreModule.Data/Repositories/StoreDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.StoreModule.Data.Model; namespace VirtoCommerce.StoreModule.Data.Repositories { - public class StoreDbContext : DbContextWithTriggers + public class StoreDbContext : DbContextWithTriggersAndQueryFiltersBase { public StoreDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190613203808_AddSubscriptionOuterId.Designer.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190613203808_AddSubscriptionOuterId.Designer.cs index 782e59316..8bc4b5df9 100644 --- a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190613203808_AddSubscriptionOuterId.Designer.cs +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190613203808_AddSubscriptionOuterId.Designer.cs @@ -1,4 +1,4 @@ -// +// using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -42,9 +42,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("ModifiedDate"); - b.Property("OuterId") - .HasMaxLength(128); - b.Property("ProductId") .HasMaxLength(128); diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.Designer.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..75dd7227b --- /dev/null +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.Designer.cs @@ -0,0 +1,134 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.SubscriptionModule.Data.Repositories; + +namespace VirtoCommerce.SubscriptionModule.Data.Migrations +{ + [DbContext(typeof(SubscriptionDbContext))] + [Migration("20190909125800_AddSubscriptionSupportSoftDeletion")] + partial class AddSubscriptionSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.SubscriptionModule.Data.Model.PaymentPlanEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("Interval") + .HasMaxLength(64); + + b.Property("IntervalCount"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("ProductId") + .HasMaxLength(128); + + b.Property("TrialPeriodDays"); + + b.HasKey("Id"); + + b.ToTable("PaymentPlan"); + }); + + modelBuilder.Entity("VirtoCommerce.SubscriptionModule.Data.Model.SubscriptionEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Balance") + .HasColumnType("Money"); + + b.Property("CancelReason") + .HasMaxLength(2048); + + b.Property("CancelledDate"); + + b.Property("Comment"); + + b.Property("CreatedBy") + .HasMaxLength(64); + + b.Property("CreatedDate"); + + b.Property("CurrentPeriodEnd"); + + b.Property("CurrentPeriodStart"); + + b.Property("CustomerId") + .IsRequired() + .HasMaxLength(64); + + b.Property("CustomerName") + .HasMaxLength(255); + + b.Property("CustomerOrderPrototypeId"); + + b.Property("EndDate"); + + b.Property("Interval") + .HasMaxLength(64); + + b.Property("IntervalCount"); + + b.Property("IsCancelled"); + + b.Property("IsDeleted"); + + b.Property("ModifiedBy") + .HasMaxLength(64); + + b.Property("ModifiedDate"); + + b.Property("Number") + .IsRequired() + .HasMaxLength(64); + + b.Property("OuterId") + .HasMaxLength(128); + + b.Property("StartDate"); + + b.Property("Status") + .HasMaxLength(64); + + b.Property("StoreId") + .IsRequired() + .HasMaxLength(64); + + b.Property("TrialEnd"); + + b.Property("TrialPeriodDays"); + + b.Property("TrialSart"); + + b.HasKey("Id"); + + b.ToTable("Subscription"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.cs new file mode 100644 index 000000000..706c1c32b --- /dev/null +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/20190909125800_AddSubscriptionSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.SubscriptionModule.Data.Migrations +{ + public partial class AddSubscriptionSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Subscription", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Subscription"); + } + } +} diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/SubscriptionDbContextModelSnapshot.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/SubscriptionDbContextModelSnapshot.cs index 760f23e58..f6d267923 100644 --- a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/SubscriptionDbContextModelSnapshot.cs +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Migrations/SubscriptionDbContextModelSnapshot.cs @@ -40,9 +40,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ModifiedDate"); - b.Property("OuterId") - .HasMaxLength(128); - b.Property("ProductId") .HasMaxLength(128); @@ -96,6 +93,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsCancelled"); + b.Property("IsDeleted"); + b.Property("ModifiedBy") .HasMaxLength(64); diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Model/SubscriptionEntity.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Model/SubscriptionEntity.cs index a19466097..e6aabc189 100644 --- a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Model/SubscriptionEntity.cs +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Model/SubscriptionEntity.cs @@ -6,7 +6,7 @@ namespace VirtoCommerce.SubscriptionModule.Data.Model { - public class SubscriptionEntity : AuditableEntity, IHasOuterId + public class SubscriptionEntity : AuditableEntity, IHasOuterId, ISupportSoftDeletion { [Required] @@ -58,6 +58,8 @@ public class SubscriptionEntity : AuditableEntity, IHasOuterId [StringLength(128)] public string OuterId { get; set; } + public bool IsDeleted { get; set; } + public virtual Subscription ToModel(Subscription subscription) { if (subscription == null) diff --git a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Repositories/SubscriptionDbContext.cs b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Repositories/SubscriptionDbContext.cs index d83c6a90a..3c67d1b61 100644 --- a/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Repositories/SubscriptionDbContext.cs +++ b/Modules/vc-module-subscriptions/VirtoCommerce.SubscriptionModule.Data/Repositories/SubscriptionDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.SubscriptionModule.Data.Model; namespace VirtoCommerce.SubscriptionModule.Data.Repositories { - public class SubscriptionDbContext : DbContextWithTriggers + public class SubscriptionDbContext : DbContextWithTriggersAndQueryFiltersBase { public SubscriptionDbContext(DbContextOptions options) : base(options) diff --git a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.Designer.cs b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.Designer.cs new file mode 100644 index 000000000..d2bf98256 --- /dev/null +++ b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.Designer.cs @@ -0,0 +1,61 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using VirtoCommerce.TaxModule.Data.Repositories; + +namespace VirtoCommerce.TaxModule.Data.Migrations +{ + [DbContext(typeof(TaxDbContext))] + [Migration("20190909130019_AddTaxSupportSoftDeletion")] + partial class AddTaxSupportSoftDeletion + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.3-servicing-35854") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("VirtoCommerce.TaxModule.Data.Model.StoreTaxProviderEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasMaxLength(128); + + b.Property("Code") + .IsRequired() + .HasMaxLength(128); + + b.Property("IsActive"); + + b.Property("IsDeleted"); + + b.Property("LogoUrl") + .HasMaxLength(2048); + + b.Property("Priority"); + + b.Property("StoreId") + .HasMaxLength(128); + + b.Property("TypeName") + .IsRequired() + .HasMaxLength(128); + + b.HasKey("Id"); + + b.HasIndex("TypeName", "StoreId") + .IsUnique() + .HasName("IX_StoreTaxProviderEntity_TypeName_StoreId") + .HasFilter("[StoreId] IS NOT NULL"); + + b.ToTable("StoreTaxProvider"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.cs b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.cs new file mode 100644 index 000000000..5076f6f37 --- /dev/null +++ b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/20190909130019_AddTaxSupportSoftDeletion.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace VirtoCommerce.TaxModule.Data.Migrations +{ + public partial class AddTaxSupportSoftDeletion : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "StoreTaxProvider", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "StoreTaxProvider"); + } + } +} diff --git a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/TaxDbContextModelSnapshot.cs b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/TaxDbContextModelSnapshot.cs index c16e5faba..23d0381aa 100644 --- a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/TaxDbContextModelSnapshot.cs +++ b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Migrations/TaxDbContextModelSnapshot.cs @@ -30,6 +30,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IsActive"); + b.Property("IsDeleted"); + b.Property("LogoUrl") .HasMaxLength(2048); diff --git a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Model/StoreTaxProviderEntity.cs b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Model/StoreTaxProviderEntity.cs index ae7bf708e..d9be96cb0 100644 --- a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Model/StoreTaxProviderEntity.cs +++ b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Model/StoreTaxProviderEntity.cs @@ -5,7 +5,7 @@ namespace VirtoCommerce.TaxModule.Data.Model { - public class StoreTaxProviderEntity : Entity + public class StoreTaxProviderEntity : Entity, ISupportSoftDeletion { [Required] [StringLength(128)] @@ -22,6 +22,8 @@ public class StoreTaxProviderEntity : Entity public bool IsActive { get; set; } + public bool IsDeleted { get; set; } + #region Navigation Properties public string StoreId { get; set; } diff --git a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Repositories/TaxDbContext.cs b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Repositories/TaxDbContext.cs index 47fc59193..2d694ffa6 100644 --- a/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Repositories/TaxDbContext.cs +++ b/Modules/vc-module-tax/VirtoCommerce.TaxModule.Data/Repositories/TaxDbContext.cs @@ -1,10 +1,10 @@ -using EntityFrameworkCore.Triggers; using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Data.Infrastructure; using VirtoCommerce.TaxModule.Data.Model; namespace VirtoCommerce.TaxModule.Data.Repositories { - public class TaxDbContext : DbContextWithTriggers + public class TaxDbContext : DbContextWithTriggersAndQueryFiltersBase { public TaxDbContext(DbContextOptions options) : base(options) { diff --git a/VirtoCommerce.Platform.Core/Common/ISupportSoftDeletion.cs b/VirtoCommerce.Platform.Core/Common/ISupportSoftDeletion.cs new file mode 100644 index 000000000..1df971dca --- /dev/null +++ b/VirtoCommerce.Platform.Core/Common/ISupportSoftDeletion.cs @@ -0,0 +1,7 @@ +namespace VirtoCommerce.Platform.Core.Common +{ + public interface ISupportSoftDeletion + { + bool IsDeleted { get; set; } + } +} diff --git a/VirtoCommerce.Platform.Data/Extensions/EFFilterExtensions.cs b/VirtoCommerce.Platform.Data/Extensions/EFFilterExtensions.cs new file mode 100644 index 000000000..02d296e9e --- /dev/null +++ b/VirtoCommerce.Platform.Data/Extensions/EFFilterExtensions.cs @@ -0,0 +1,30 @@ +using System; +using System.Linq; +using System.Reflection; +using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Core.Common; + +namespace VirtoCommerce.Platform.Data.Extensions +{ + /// + /// https://stackoverflow.com/questions/45096799/filter-all-queries-trying-to-achieve-soft-delete/45097532#45097532 + /// + public static class EFFilterExtensions + { + public static void SetSoftDeleteFilter(this ModelBuilder modelBuilder, Type entityType) + { + SetSoftDeleteFilterMethod.MakeGenericMethod(entityType) + .Invoke(null, new object[] { modelBuilder }); + } + + static readonly MethodInfo SetSoftDeleteFilterMethod = typeof(EFFilterExtensions) + .GetMethods(BindingFlags.Public | BindingFlags.Static) + .Single(t => t.IsGenericMethod && t.Name == "SetSoftDeleteFilter"); + + public static void SetSoftDeleteFilter(this ModelBuilder modelBuilder) + where TEntity : class, ISupportSoftDeletion + { + modelBuilder.Entity().HasQueryFilter(x => !x.IsDeleted); + } + } +} diff --git a/VirtoCommerce.Platform.Data/Infrastructure/DbContextRepositoryBase.cs b/VirtoCommerce.Platform.Data/Infrastructure/DbContextRepositoryBase.cs index be3661fe3..64993d4f9 100644 --- a/VirtoCommerce.Platform.Data/Infrastructure/DbContextRepositoryBase.cs +++ b/VirtoCommerce.Platform.Data/Infrastructure/DbContextRepositoryBase.cs @@ -68,7 +68,14 @@ public void Update(T item) where T : class /// The item. public void Remove(T item) where T : class { - DbContext.Remove(item); + if (item is ISupportSoftDeletion itemSoftDeleteon) + { + itemSoftDeleteon.IsDeleted = true; + } + else + { + DbContext.Remove(item); + } } public void Dispose() diff --git a/VirtoCommerce.Platform.Data/Infrastructure/DbContextWithTriggersAndQueryFiltersBase.cs b/VirtoCommerce.Platform.Data/Infrastructure/DbContextWithTriggersAndQueryFiltersBase.cs new file mode 100644 index 000000000..abbce03be --- /dev/null +++ b/VirtoCommerce.Platform.Data/Infrastructure/DbContextWithTriggersAndQueryFiltersBase.cs @@ -0,0 +1,33 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using EntityFrameworkCore.Triggers; +using Microsoft.EntityFrameworkCore; +using VirtoCommerce.Platform.Core.Common; +using VirtoCommerce.Platform.Data.Extensions; + +namespace VirtoCommerce.Platform.Data.Infrastructure +{ + public abstract class DbContextWithTriggersAndQueryFiltersBase : DbContextWithTriggers + { + protected DbContextWithTriggersAndQueryFiltersBase(DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + foreach (var type in modelBuilder.Model.GetEntityTypes()) + { + if (typeof(ISupportSoftDeletion).IsAssignableFrom(type.ClrType) && (type.BaseType == null + || !typeof(ISupportSoftDeletion).IsAssignableFrom(type.BaseType.ClrType))) + { + modelBuilder.SetSoftDeleteFilter(type.ClrType); + } + + } + + base.OnModelCreating(modelBuilder); + } + } +}