Quellcode durchsuchen

feat(core): Add custom field support for Payment, Refund, ShippingLine, StockLevel, StockMovement, Session, HistoryEntry

Relates to #3044
Michael Bromley vor 1 Jahr
Ursprung
Commit
1167102783
23 geänderte Dateien mit 3314 neuen und 3077 gelöschten Zeilen
  1. 18 0
      packages/admin-ui/src/lib/core/src/common/generated-types.ts
  2. 458 435
      packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts
  3. 674 653
      packages/common/src/generated-shop-types.ts
  4. 18 0
      packages/common/src/generated-types.ts
  5. 458 435
      packages/core/e2e/graphql/generated-e2e-admin-types.ts
  6. 4 0
      packages/core/e2e/graphql/generated-e2e-shop-types.ts
  7. 16 11
      packages/core/src/api/config/get-custom-fields-config-without-interfaces.ts
  8. 7 0
      packages/core/src/config/custom-field/custom-field-types.ts
  9. 7 0
      packages/core/src/config/default-config.ts
  10. 7 0
      packages/core/src/entity/custom-entity-fields.ts
  11. 6 1
      packages/core/src/entity/history-entry/history-entry.entity.ts
  12. 6 1
      packages/core/src/entity/payment/payment.entity.ts
  13. 6 1
      packages/core/src/entity/refund/refund.entity.ts
  14. 7 4
      packages/core/src/entity/session/session.entity.ts
  15. 8 3
      packages/core/src/entity/shipping-line/shipping-line.entity.ts
  16. 6 1
      packages/core/src/entity/stock-level/stock-level.entity.ts
  17. 6 1
      packages/core/src/entity/stock-movement/stock-movement.entity.ts
  18. 458 435
      packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts
  19. 462 439
      packages/payments-plugin/e2e/graphql/generated-admin-types.ts
  20. 4 0
      packages/payments-plugin/e2e/graphql/generated-shop-types.ts
  21. 678 657
      packages/payments-plugin/src/mollie/graphql/generated-shop-types.ts
  22. 0 0
      schema-admin.json
  23. 0 0
      schema-shop.json

+ 18 - 0
packages/admin-ui/src/lib/core/src/common/generated-types.ts

@@ -159,6 +159,7 @@ export type AdministratorSortParameter = {
 export type Allocation = Node & StockMovement & {
   __typename?: 'Allocation';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   orderLine: OrderLine;
   productVariant: ProductVariant;
@@ -380,6 +381,7 @@ export type CancelPaymentResult = CancelPaymentError | Payment | PaymentStateTra
 export type Cancellation = Node & StockMovement & {
   __typename?: 'Cancellation';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   orderLine: OrderLine;
   productVariant: ProductVariant;
@@ -1365,8 +1367,10 @@ export type CustomFields = {
   FacetValue: Array<CustomFieldConfig>;
   Fulfillment: Array<CustomFieldConfig>;
   GlobalSettings: Array<CustomFieldConfig>;
+  HistoryEntry: Array<CustomFieldConfig>;
   Order: Array<CustomFieldConfig>;
   OrderLine: Array<CustomFieldConfig>;
+  Payment: Array<CustomFieldConfig>;
   PaymentMethod: Array<CustomFieldConfig>;
   Product: Array<CustomFieldConfig>;
   ProductOption: Array<CustomFieldConfig>;
@@ -1374,10 +1378,15 @@ export type CustomFields = {
   ProductVariant: Array<CustomFieldConfig>;
   ProductVariantPrice: Array<CustomFieldConfig>;
   Promotion: Array<CustomFieldConfig>;
+  Refund: Array<CustomFieldConfig>;
   Region: Array<CustomFieldConfig>;
   Seller: Array<CustomFieldConfig>;
+  Session: Array<CustomFieldConfig>;
+  ShippingLine: Array<CustomFieldConfig>;
   ShippingMethod: Array<CustomFieldConfig>;
+  StockLevel: Array<CustomFieldConfig>;
   StockLocation: Array<CustomFieldConfig>;
+  StockMovement: Array<CustomFieldConfig>;
   TaxCategory: Array<CustomFieldConfig>;
   TaxRate: Array<CustomFieldConfig>;
   User: Array<CustomFieldConfig>;
@@ -1982,6 +1991,7 @@ export type HistoryEntry = Node & {
   __typename?: 'HistoryEntry';
   administrator?: Maybe<Administrator>;
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   data: Scalars['JSON']['output'];
   id: Scalars['ID']['output'];
   isPublic: Scalars['Boolean']['output'];
@@ -4328,6 +4338,7 @@ export type Payment = Node & {
   __typename?: 'Payment';
   amount: Scalars['Money']['output'];
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   errorMessage?: Maybe<Scalars['String']['output']>;
   id: Scalars['ID']['output'];
   metadata?: Maybe<Scalars['JSON']['output']>;
@@ -5523,6 +5534,7 @@ export type Refund = Node & {
   __typename?: 'Refund';
   adjustment: Scalars['Money']['output'];
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   items: Scalars['Money']['output'];
   lines: Array<RefundLine>;
@@ -5642,6 +5654,7 @@ export type RelationCustomFieldConfig = CustomField & {
 export type Release = Node & StockMovement & {
   __typename?: 'Release';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5699,6 +5712,7 @@ export type RemoveStockLocationsFromChannelInput = {
 export type Return = Node & StockMovement & {
   __typename?: 'Return';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5757,6 +5771,7 @@ export type RoleSortParameter = {
 export type Sale = Node & StockMovement & {
   __typename?: 'Sale';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5919,6 +5934,7 @@ export type SettleRefundResult = Refund | RefundStateTransitionError;
 
 export type ShippingLine = {
   __typename?: 'ShippingLine';
+  customFields?: Maybe<Scalars['JSON']['output']>;
   discountedPrice: Scalars['Money']['output'];
   discountedPriceWithTax: Scalars['Money']['output'];
   discounts: Array<Discount>;
@@ -6031,6 +6047,7 @@ export enum SortOrder {
 export type StockAdjustment = Node & StockMovement & {
   __typename?: 'StockAdjustment';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -6041,6 +6058,7 @@ export type StockAdjustment = Node & StockMovement & {
 export type StockLevel = Node & {
   __typename?: 'StockLevel';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   stockAllocated: Scalars['Int']['output'];
   stockLocation: StockLocation;

Datei-Diff unterdrückt, da er zu groß ist
+ 458 - 435
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts


Datei-Diff unterdrückt, da er zu groß ist
+ 674 - 653
packages/common/src/generated-shop-types.ts


+ 18 - 0
packages/common/src/generated-types.ts

@@ -154,6 +154,7 @@ export type AdministratorSortParameter = {
 export type Allocation = Node & StockMovement & {
   __typename?: 'Allocation';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   orderLine: OrderLine;
   productVariant: ProductVariant;
@@ -375,6 +376,7 @@ export type CancelPaymentResult = CancelPaymentError | Payment | PaymentStateTra
 export type Cancellation = Node & StockMovement & {
   __typename?: 'Cancellation';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   orderLine: OrderLine;
   productVariant: ProductVariant;
@@ -1353,8 +1355,10 @@ export type CustomFields = {
   FacetValue: Array<CustomFieldConfig>;
   Fulfillment: Array<CustomFieldConfig>;
   GlobalSettings: Array<CustomFieldConfig>;
+  HistoryEntry: Array<CustomFieldConfig>;
   Order: Array<CustomFieldConfig>;
   OrderLine: Array<CustomFieldConfig>;
+  Payment: Array<CustomFieldConfig>;
   PaymentMethod: Array<CustomFieldConfig>;
   Product: Array<CustomFieldConfig>;
   ProductOption: Array<CustomFieldConfig>;
@@ -1362,10 +1366,15 @@ export type CustomFields = {
   ProductVariant: Array<CustomFieldConfig>;
   ProductVariantPrice: Array<CustomFieldConfig>;
   Promotion: Array<CustomFieldConfig>;
+  Refund: Array<CustomFieldConfig>;
   Region: Array<CustomFieldConfig>;
   Seller: Array<CustomFieldConfig>;
+  Session: Array<CustomFieldConfig>;
+  ShippingLine: Array<CustomFieldConfig>;
   ShippingMethod: Array<CustomFieldConfig>;
+  StockLevel: Array<CustomFieldConfig>;
   StockLocation: Array<CustomFieldConfig>;
+  StockMovement: Array<CustomFieldConfig>;
   TaxCategory: Array<CustomFieldConfig>;
   TaxRate: Array<CustomFieldConfig>;
   User: Array<CustomFieldConfig>;
@@ -1970,6 +1979,7 @@ export type HistoryEntry = Node & {
   __typename?: 'HistoryEntry';
   administrator?: Maybe<Administrator>;
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   data: Scalars['JSON']['output'];
   id: Scalars['ID']['output'];
   isPublic: Scalars['Boolean']['output'];
@@ -4254,6 +4264,7 @@ export type Payment = Node & {
   __typename?: 'Payment';
   amount: Scalars['Money']['output'];
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   errorMessage?: Maybe<Scalars['String']['output']>;
   id: Scalars['ID']['output'];
   metadata?: Maybe<Scalars['JSON']['output']>;
@@ -5445,6 +5456,7 @@ export type Refund = Node & {
   __typename?: 'Refund';
   adjustment: Scalars['Money']['output'];
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   items: Scalars['Money']['output'];
   lines: Array<RefundLine>;
@@ -5564,6 +5576,7 @@ export type RelationCustomFieldConfig = CustomField & {
 export type Release = Node & StockMovement & {
   __typename?: 'Release';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5621,6 +5634,7 @@ export type RemoveStockLocationsFromChannelInput = {
 export type Return = Node & StockMovement & {
   __typename?: 'Return';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5679,6 +5693,7 @@ export type RoleSortParameter = {
 export type Sale = Node & StockMovement & {
   __typename?: 'Sale';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5841,6 +5856,7 @@ export type SettleRefundResult = Refund | RefundStateTransitionError;
 
 export type ShippingLine = {
   __typename?: 'ShippingLine';
+  customFields?: Maybe<Scalars['JSON']['output']>;
   discountedPrice: Scalars['Money']['output'];
   discountedPriceWithTax: Scalars['Money']['output'];
   discounts: Array<Discount>;
@@ -5953,6 +5969,7 @@ export enum SortOrder {
 export type StockAdjustment = Node & StockMovement & {
   __typename?: 'StockAdjustment';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   productVariant: ProductVariant;
   quantity: Scalars['Int']['output'];
@@ -5963,6 +5980,7 @@ export type StockAdjustment = Node & StockMovement & {
 export type StockLevel = Node & {
   __typename?: 'StockLevel';
   createdAt: Scalars['DateTime']['output'];
+  customFields?: Maybe<Scalars['JSON']['output']>;
   id: Scalars['ID']['output'];
   stockAllocated: Scalars['Int']['output'];
   stockLocation: StockLocation;

Datei-Diff unterdrückt, da er zu groß ist
+ 458 - 435
packages/core/e2e/graphql/generated-e2e-admin-types.ts


+ 4 - 0
packages/core/e2e/graphql/generated-e2e-shop-types.ts

@@ -1155,6 +1155,7 @@ export type GuestCheckoutError = ErrorResult & {
 
 export type HistoryEntry = Node & {
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     data: Scalars['JSON']['output'];
     id: Scalars['ID']['output'];
     type: HistoryEntryType;
@@ -2248,6 +2249,7 @@ export type PasswordValidationError = ErrorResult & {
 export type Payment = Node & {
     amount: Scalars['Money']['output'];
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     errorMessage?: Maybe<Scalars['String']['output']>;
     id: Scalars['ID']['output'];
     metadata?: Maybe<Scalars['JSON']['output']>;
@@ -2883,6 +2885,7 @@ export type RefreshCustomerVerificationResult = NativeAuthStrategyError | Succes
 export type Refund = Node & {
     adjustment: Scalars['Money']['output'];
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     id: Scalars['ID']['output'];
     items: Scalars['Money']['output'];
     lines: Array<RefundLine>;
@@ -3073,6 +3076,7 @@ export type SetOrderShippingMethodResult =
     | OrderModificationError;
 
 export type ShippingLine = {
+    customFields?: Maybe<Scalars['JSON']['output']>;
     discountedPrice: Scalars['Money']['output'];
     discountedPriceWithTax: Scalars['Money']['output'];
     discounts: Array<Discount>;

+ 16 - 11
packages/core/src/api/config/get-custom-fields-config-without-interfaces.ts

@@ -6,24 +6,29 @@ import { CustomFieldConfig, CustomFields } from '../../config/custom-field/custo
  * @description
  * Because the "Region" entity is an interface, it cannot be extended directly, so we need to
  * replace it if found in the custom field config with its concrete implementations.
+ *
+ * Same goes for the "StockMovement" entity.
  */
 export function getCustomFieldsConfigWithoutInterfaces(
     customFieldConfig: CustomFields,
     schema: GraphQLSchema,
 ): Array<[entityName: string, config: CustomFieldConfig[]]> {
     const entries = Object.entries(customFieldConfig);
-    const regionIndex = entries.findIndex(([name]) => name === 'Region');
-    if (regionIndex !== -1) {
-        // Region is an interface and cannot directly be extended. Instead, we will use the
-        // concrete types that implement it.
-        const regionType = schema.getType('Region');
-        if (isInterfaceType(regionType)) {
-            const implementations = schema.getImplementations(regionType);
-            // Remove "Region" from the list of entities to which custom fields can be added
-            entries.splice(regionIndex, 1);
+    const interfaceEntities = ['Region', 'StockMovement'];
+    for (const entityName of interfaceEntities) {
+        const index = entries.findIndex(([name]) => name === entityName);
+        if (index !== -1) {
+            // An interface type such as Region or StockMovement cannot directly be extended.
+            // Instead, we will use the concrete types that implement it.
+            const interfaceType = schema.getType(entityName);
+            if (isInterfaceType(interfaceType)) {
+                const implementations = schema.getImplementations(interfaceType);
+                // Remove the interface from the list of entities to which custom fields can be added
+                entries.splice(index, 1);
 
-            for (const implementation of implementations.objects) {
-                entries.push([implementation.name, customFieldConfig.Region ?? []]);
+                for (const implementation of implementations.objects) {
+                    entries.push([implementation.name, customFieldConfig[entityName] ?? []]);
+                }
             }
         }
     }

+ 7 - 0
packages/core/src/config/custom-field/custom-field-types.ts

@@ -273,8 +273,10 @@ export type CustomFields = {
     FacetValue?: CustomFieldConfig[];
     Fulfillment?: CustomFieldConfig[];
     GlobalSettings?: CustomFieldConfig[];
+    HistoryEntry?: CustomFieldConfig[];
     Order?: CustomFieldConfig[];
     OrderLine?: CustomFieldConfig[];
+    Payment?: CustomFieldConfig[];
     PaymentMethod?: CustomFieldConfig[];
     Product?: CustomFieldConfig[];
     ProductOption?: CustomFieldConfig[];
@@ -282,10 +284,15 @@ export type CustomFields = {
     ProductVariant?: CustomFieldConfig[];
     ProductVariantPrice?: CustomFieldConfig[];
     Promotion?: CustomFieldConfig[];
+    Refund?: CustomFieldConfig[];
     Region?: CustomFieldConfig[];
     Seller?: CustomFieldConfig[];
+    Session?: CustomFieldConfig[];
+    ShippingLine?: CustomFieldConfig[];
     ShippingMethod?: CustomFieldConfig[];
+    StockLevel?: CustomFieldConfig[];
     StockLocation?: CustomFieldConfig[];
+    StockMovement?: CustomFieldConfig[];
     TaxCategory?: CustomFieldConfig[];
     TaxRate?: CustomFieldConfig[];
     User?: CustomFieldConfig[];

+ 7 - 0
packages/core/src/config/default-config.ts

@@ -203,8 +203,10 @@ export const defaultConfig: RuntimeVendureConfig = {
         FacetValue: [],
         Fulfillment: [],
         GlobalSettings: [],
+        HistoryEntry: [],
         Order: [],
         OrderLine: [],
+        Payment: [],
         PaymentMethod: [],
         Product: [],
         ProductOption: [],
@@ -212,10 +214,15 @@ export const defaultConfig: RuntimeVendureConfig = {
         ProductVariant: [],
         ProductVariantPrice: [],
         Promotion: [],
+        Refund: [],
         Region: [],
         Seller: [],
+        Session: [],
+        ShippingLine: [],
         ShippingMethod: [],
+        StockLevel: [],
         StockLocation: [],
+        StockMovement: [],
         TaxCategory: [],
         TaxRate: [],
         User: [],

+ 7 - 0
packages/core/src/entity/custom-entity-fields.ts

@@ -12,8 +12,10 @@ export class CustomFacetValueFields {}
 export class CustomFacetValueFieldsTranslation {}
 export class CustomFulfillmentFields {}
 export class CustomGlobalSettingsFields {}
+export class CustomHistoryEntryFields {}
 export class CustomOrderFields {}
 export class CustomOrderLineFields {}
+export class CustomPaymentFields {}
 export class CustomPaymentMethodFields {}
 export class CustomPaymentMethodFieldsTranslation {}
 export class CustomProductFields {}
@@ -27,12 +29,17 @@ export class CustomProductVariantFieldsTranslation {}
 export class CustomProductVariantPriceFields {}
 export class CustomPromotionFields {}
 export class CustomPromotionFieldsTranslation {}
+export class CustomRefundFields {}
 export class CustomRegionFields {}
 export class CustomRegionFieldsTranslation {}
 export class CustomSellerFields {}
+export class CustomSessionFields {}
+export class CustomShippingLineFields {}
 export class CustomShippingMethodFields {}
 export class CustomShippingMethodFieldsTranslation {}
+export class CustomStockLevelFields {}
 export class CustomStockLocationFields {}
+export class CustomStockMovementFields {}
 export class CustomTaxCategoryFields {}
 export class CustomTaxRateFields {}
 export class CustomUserFields {}

+ 6 - 1
packages/core/src/entity/history-entry/history-entry.entity.ts

@@ -1,8 +1,10 @@
 import { HistoryEntryType } from '@vendure/common/lib/generated-types';
 import { Column, Entity, Index, ManyToOne, TableInheritance } from 'typeorm';
 
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { Administrator } from '../administrator/administrator.entity';
 import { VendureEntity } from '../base/base.entity';
+import { CustomHistoryEntryFields } from '../custom-entity-fields';
 
 /**
  * @description
@@ -13,7 +15,7 @@ import { VendureEntity } from '../base/base.entity';
  */
 @Entity()
 @TableInheritance({ column: { type: 'varchar', name: 'discriminator' } })
-export abstract class HistoryEntry extends VendureEntity {
+export abstract class HistoryEntry extends VendureEntity implements HasCustomFields {
     @Index()
     @ManyToOne(type => Administrator)
     administrator?: Administrator;
@@ -26,4 +28,7 @@ export abstract class HistoryEntry extends VendureEntity {
 
     @Column('simple-json')
     data: any;
+
+    @Column(type => CustomHistoryEntryFields)
+    customFields: CustomHistoryEntryFields;
 }

+ 6 - 1
packages/core/src/entity/payment/payment.entity.ts

@@ -2,8 +2,10 @@ import { DeepPartial } from '@vendure/common/lib/shared-types';
 import { Column, Entity, Index, ManyToOne, OneToMany } from 'typeorm';
 
 import { PaymentMetadata } from '../../common/types/common-types';
+import { HasCustomFields } from '../../config/index';
 import { PaymentState } from '../../service/helpers/payment-state-machine/payment-state';
 import { VendureEntity } from '../base/base.entity';
+import { CustomPaymentFields } from '../custom-entity-fields';
 import { Money } from '../money.decorator';
 import { Order } from '../order/order.entity';
 import { Refund } from '../refund/refund.entity';
@@ -16,7 +18,7 @@ import { Refund } from '../refund/refund.entity';
  * @docsCategory entities
  */
 @Entity()
-export class Payment extends VendureEntity {
+export class Payment extends VendureEntity implements HasCustomFields {
     constructor(input?: DeepPartial<Payment>) {
         super(input);
     }
@@ -41,4 +43,7 @@ export class Payment extends VendureEntity {
 
     @OneToMany(type => Refund, refund => refund.payment)
     refunds: Refund[];
+
+    @Column(type => CustomPaymentFields)
+    customFields: CustomPaymentFields;
 }

+ 6 - 1
packages/core/src/entity/refund/refund.entity.ts

@@ -2,8 +2,10 @@ import { DeepPartial, ID } from '@vendure/common/lib/shared-types';
 import { Column, Entity, Index, JoinColumn, JoinTable, ManyToOne, OneToMany } from 'typeorm';
 
 import { PaymentMetadata } from '../../common/types/common-types';
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { RefundState } from '../../service/helpers/refund-state-machine/refund-state';
 import { VendureEntity } from '../base/base.entity';
+import { CustomRefundFields } from '../custom-entity-fields';
 import { EntityId } from '../entity-id.decorator';
 import { Money } from '../money.decorator';
 import { RefundLine } from '../order-line-reference/refund-line.entity';
@@ -15,7 +17,7 @@ import { Payment } from '../payment/payment.entity';
  * @docsCategory entities
  */
 @Entity()
-export class Refund extends VendureEntity {
+export class Refund extends VendureEntity implements HasCustomFields {
     constructor(input?: DeepPartial<Refund>) {
         super(input);
     }
@@ -61,4 +63,7 @@ export class Refund extends VendureEntity {
     paymentId: ID;
 
     @Column('simple-json') metadata: PaymentMetadata;
+
+    @Column(type => CustomRefundFields)
+    customFields: CustomRefundFields;
 }

+ 7 - 4
packages/core/src/entity/session/session.entity.ts

@@ -1,12 +1,12 @@
-import { DeepPartial, ID } from '@vendure/common/lib/shared-types';
+import { ID } from '@vendure/common/lib/shared-types';
 import { Column, Entity, Index, ManyToOne, TableInheritance } from 'typeorm';
 
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
 import { Channel } from '../channel/channel.entity';
-import { Customer } from '../customer/customer.entity';
+import { CustomSessionFields } from '../custom-entity-fields';
 import { EntityId } from '../entity-id.decorator';
 import { Order } from '../order/order.entity';
-import { User } from '../user/user.entity';
 
 /**
  * @description
@@ -17,7 +17,7 @@ import { User } from '../user/user.entity';
  */
 @Entity()
 @TableInheritance({ column: { type: 'varchar', name: 'type' } })
-export abstract class Session extends VendureEntity {
+export abstract class Session extends VendureEntity implements HasCustomFields {
     @Index({ unique: true })
     @Column()
     token: string;
@@ -39,4 +39,7 @@ export abstract class Session extends VendureEntity {
     @Index()
     @ManyToOne(type => Channel)
     activeChannel: Channel | null;
+
+    @Column(type => CustomSessionFields)
+    customFields: CustomSessionFields;
 }

+ 8 - 3
packages/core/src/entity/shipping-line/shipping-line.entity.ts

@@ -1,16 +1,18 @@
-import { Adjustment, AdjustmentType, Discount, TaxLine } from '@vendure/common/lib/generated-types';
+import { Adjustment, Discount, TaxLine } from '@vendure/common/lib/generated-types';
 import { DeepPartial, ID } from '@vendure/common/lib/shared-types';
 import { summate } from '@vendure/common/lib/shared-utils';
 import { Column, Entity, Index, ManyToOne, OneToMany } from 'typeorm';
 
-import { OrderLine } from '..';
 import { Calculated } from '../../common/calculated-decorator';
 import { roundMoney } from '../../common/round-money';
 import { grossPriceOf, netPriceOf } from '../../common/tax-utils';
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
+import { CustomShippingLineFields } from '../custom-entity-fields';
 import { EntityId } from '../entity-id.decorator';
 import { Money } from '../money.decorator';
 import { Order } from '../order/order.entity';
+import { OrderLine } from '../order-line/order-line.entity';
 import { ShippingMethod } from '../shipping-method/shipping-method.entity';
 
 /**
@@ -22,7 +24,7 @@ import { ShippingMethod } from '../shipping-method/shipping-method.entity';
  * @docsCategory entities
  */
 @Entity()
-export class ShippingLine extends VendureEntity {
+export class ShippingLine extends VendureEntity implements HasCustomFields {
     constructor(input?: DeepPartial<ShippingLine>) {
         super(input);
     }
@@ -53,6 +55,9 @@ export class ShippingLine extends VendureEntity {
     @OneToMany(type => OrderLine, orderLine => orderLine.shippingLine)
     orderLines: OrderLine[];
 
+    @Column(type => CustomShippingLineFields)
+    customFields: CustomShippingLineFields;
+
     @Calculated()
     get price(): number {
         return this.listPriceIncludesTax ? netPriceOf(this.listPrice, this.taxRate) : this.listPrice;

+ 6 - 1
packages/core/src/entity/stock-level/stock-level.entity.ts

@@ -1,7 +1,9 @@
 import { DeepPartial, ID } from '@vendure/common/lib/shared-types';
 import { Column, Entity, Index, ManyToOne } from 'typeorm';
 
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
+import { CustomStockLevelFields } from '../custom-entity-fields';
 import { EntityId } from '../entity-id.decorator';
 import { ProductVariant } from '../product-variant/product-variant.entity';
 import { StockLocation } from '../stock-location/stock-location.entity';
@@ -15,7 +17,7 @@ import { StockLocation } from '../stock-location/stock-location.entity';
  */
 @Entity()
 @Index(['productVariantId', 'stockLocationId'], { unique: true })
-export class StockLevel extends VendureEntity {
+export class StockLevel extends VendureEntity implements HasCustomFields {
     constructor(input: DeepPartial<StockLevel>) {
         super(input);
     }
@@ -39,4 +41,7 @@ export class StockLevel extends VendureEntity {
 
     @Column()
     stockAllocated: number;
+
+    @Column(type => CustomStockLevelFields)
+    customFields: CustomStockLevelFields;
 }

+ 6 - 1
packages/core/src/entity/stock-movement/stock-movement.entity.ts

@@ -2,7 +2,9 @@ import { StockMovementType } from '@vendure/common/lib/generated-types';
 import { ID } from '@vendure/common/lib/shared-types';
 import { Column, Entity, Index, ManyToOne, TableInheritance } from 'typeorm';
 
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { VendureEntity } from '../base/base.entity';
+import { CustomStockMovementFields } from '../custom-entity-fields';
 import { EntityId } from '../entity-id.decorator';
 import { ProductVariant } from '../product-variant/product-variant.entity';
 import { StockLocation } from '../stock-location/stock-location.entity';
@@ -18,7 +20,7 @@ import { StockLocation } from '../stock-location/stock-location.entity';
  */
 @Entity()
 @TableInheritance({ column: { type: 'varchar', name: 'discriminator' } })
-export abstract class StockMovement extends VendureEntity {
+export abstract class StockMovement extends VendureEntity implements HasCustomFields {
     @Column({ nullable: false, type: 'varchar' })
     readonly type: StockMovementType;
 
@@ -35,4 +37,7 @@ export abstract class StockMovement extends VendureEntity {
 
     @Column()
     quantity: number;
+
+    @Column(type => CustomStockMovementFields)
+    customFields: CustomStockMovementFields;
 }

Datei-Diff unterdrückt, da er zu groß ist
+ 458 - 435
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts


Datei-Diff unterdrückt, da er zu groß ist
+ 462 - 439
packages/payments-plugin/e2e/graphql/generated-admin-types.ts


+ 4 - 0
packages/payments-plugin/e2e/graphql/generated-shop-types.ts

@@ -1159,6 +1159,7 @@ export type GuestCheckoutError = ErrorResult & {
 
 export type HistoryEntry = Node & {
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     data: Scalars['JSON']['output'];
     id: Scalars['ID']['output'];
     type: HistoryEntryType;
@@ -2317,6 +2318,7 @@ export type PasswordValidationError = ErrorResult & {
 export type Payment = Node & {
     amount: Scalars['Money']['output'];
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     errorMessage?: Maybe<Scalars['String']['output']>;
     id: Scalars['ID']['output'];
     metadata?: Maybe<Scalars['JSON']['output']>;
@@ -2957,6 +2959,7 @@ export type RefreshCustomerVerificationResult = NativeAuthStrategyError | Succes
 export type Refund = Node & {
     adjustment: Scalars['Money']['output'];
     createdAt: Scalars['DateTime']['output'];
+    customFields?: Maybe<Scalars['JSON']['output']>;
     id: Scalars['ID']['output'];
     items: Scalars['Money']['output'];
     lines: Array<RefundLine>;
@@ -3147,6 +3150,7 @@ export type SetOrderShippingMethodResult =
     | OrderModificationError;
 
 export type ShippingLine = {
+    customFields?: Maybe<Scalars['JSON']['output']>;
     discountedPrice: Scalars['Money']['output'];
     discountedPriceWithTax: Scalars['Money']['output'];
     discounts: Array<Discount>;

Datei-Diff unterdrückt, da er zu groß ist
+ 678 - 657
packages/payments-plugin/src/mollie/graphql/generated-shop-types.ts


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
schema-admin.json


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
schema-shop.json


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.