Kaynağa Gözat

feat(core): Enable custom fields on Order entity

Michael Bromley 6 yıl önce
ebeveyn
işleme
4ef0f1547c

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

@@ -139,6 +139,7 @@ export interface CustomFields {
     Facet?: CustomFieldConfig[];
     FacetValue?: CustomFieldConfig[];
     GlobalSettings?: CustomFieldConfig[];
+    Order?: CustomFieldConfig[];
     OrderLine?: CustomFieldConfig[];
     Product?: CustomFieldConfig[];
     ProductOption?: CustomFieldConfig[];

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

@@ -96,6 +96,7 @@ export const defaultConfig: RuntimeVendureConfig = {
         Facet: [],
         FacetValue: [],
         GlobalSettings: [],
+        Order: [],
         OrderLine: [],
         Product: [],
         ProductOption: [],

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

@@ -17,3 +17,4 @@ export class CustomProductVariantFields {}
 export class CustomProductVariantFieldsTranslation {}
 export class CustomUserFields {}
 export class CustomGlobalSettingsFields {}
+export class CustomOrderFields {}

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

@@ -4,8 +4,10 @@ import { Column, Entity, JoinTable, ManyToMany, ManyToOne, OneToMany, RelationId
 
 import { Calculated } from '../../common/calculated-decorator';
 import { idType } from '../../config/config-helpers';
+import { HasCustomFields } from '../../config/custom-field/custom-field-types';
 import { OrderState } from '../../service/helpers/order-state-machine/order-state';
 import { VendureEntity } from '../base/base.entity';
+import { CustomOrderFields } from '../custom-entity-fields';
 import { Customer } from '../customer/customer.entity';
 import { OrderItem } from '../order-item/order-item.entity';
 import { OrderLine } from '../order-line/order-line.entity';
@@ -25,7 +27,7 @@ import { ShippingMethod } from '../shipping-method/shipping-method.entity';
  * @docsCategory entities
  */
 @Entity()
-export class Order extends VendureEntity {
+export class Order extends VendureEntity implements HasCustomFields {
     constructor(input?: DeepPartial<Order>) {
         super(input);
     }
@@ -74,6 +76,9 @@ export class Order extends VendureEntity {
     @Column({ default: 0 })
     shippingWithTax: number;
 
+    @Column(type => CustomOrderFields)
+    customFields: CustomOrderFields;
+
     @Calculated()
     get totalBeforeTax(): number {
         return this.subTotalBeforeTax + this.promotionAdjustmentsTotal + (this.shipping || 0);

+ 4 - 1
packages/core/src/entity/register-custom-entity-fields.ts

@@ -16,6 +16,7 @@ import {
     CustomFacetValueFields,
     CustomFacetValueFieldsTranslation,
     CustomGlobalSettingsFields,
+    CustomOrderFields,
     CustomOrderLineFields,
     CustomProductFields,
     CustomProductFieldsTranslation,
@@ -46,7 +47,8 @@ function registerCustomFieldsForEntity(
             const registerColumn = () =>
                 Column({
                     type: getColumnType(dbEngine, type),
-                    default: type === 'datetime' ? formatDefaultDatetime(dbEngine, defaultValue) : defaultValue,
+                    default:
+                        type === 'datetime' ? formatDefaultDatetime(dbEngine, defaultValue) : defaultValue,
                     name,
                     nullable: nullable === false ? false : true,
                 })(new ctor(), name);
@@ -128,6 +130,7 @@ export function registerCustomEntityFields(config: VendureConfig) {
     registerCustomFieldsForEntity(config, 'Facet', CustomFacetFieldsTranslation, true);
     registerCustomFieldsForEntity(config, 'FacetValue', CustomFacetValueFields);
     registerCustomFieldsForEntity(config, 'FacetValue', CustomFacetValueFieldsTranslation, true);
+    registerCustomFieldsForEntity(config, 'Order', CustomOrderFields);
     registerCustomFieldsForEntity(config, 'OrderLine', CustomOrderLineFields);
     registerCustomFieldsForEntity(config, 'Product', CustomProductFields);
     registerCustomFieldsForEntity(config, 'Product', CustomProductFieldsTranslation, true);