Browse Source

fix(server): Add missing properties to Order and OrderItem

Michael Bromley 7 years ago
parent
commit
95598aaf9b

+ 4 - 0
server/src/entity/order-item/order-item.entity.ts

@@ -2,6 +2,7 @@ import { DeepPartial } from 'shared/shared-types';
 import { Column, Entity, ManyToOne } from 'typeorm';
 
 import { Adjustment } from '../adjustment-source/adjustment-source.entity';
+import { Asset } from '../asset/asset.entity';
 import { VendureEntity } from '../base/base.entity';
 import { Order } from '../order/order.entity';
 import { ProductVariant } from '../product-variant/product-variant.entity';
@@ -15,6 +16,9 @@ export class OrderItem extends VendureEntity {
     @ManyToOne(type => ProductVariant)
     productVariant: ProductVariant;
 
+    @ManyToOne(type => Asset)
+    featuredAsset: Asset;
+
     @Column() unitPrice: number;
 
     @Column() quantity: number;

+ 3 - 1
server/src/entity/order-item/order-item.graphql

@@ -3,8 +3,10 @@ type OrderItem implements Node {
     createdAt: DateTime!
     updatedAt: DateTime!
     productVariant: ProductVariant!
+    adjustments: [Adjustment!]!
+    featuredAsset: Asset
     unitPrice: Int!
     quantity: Int!
-    adjustments: [Adjustment!]!
+    totalPrice: Int!
     order: Order!
 }

+ 1 - 0
server/src/entity/order/order.graphql

@@ -6,4 +6,5 @@ type Order implements Node {
     customer: Customer
     items: [OrderItem!]!
     adjustments: [Adjustment!]!
+    totalPrice: Int!
 }

+ 12 - 3
server/src/service/providers/order.service.ts

@@ -11,6 +11,7 @@ import { Order } from '../../entity/order/order.entity';
 import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
 import { I18nError } from '../../i18n/i18n-error';
 import { buildListQuery } from '../helpers/build-list-query';
+import { translateDeep } from '../helpers/translate-entity';
 
 import { AdjustmentApplicatorService } from './adjustment-applicator.service';
 import { ProductVariantService } from './product-variant.service';
@@ -33,10 +34,16 @@ export class OrderService {
             });
     }
 
-    findOne(ctx: RequestContext, orderId: ID): Promise<Order | undefined> {
-        return this.connection.getRepository(Order).findOne(orderId, {
-            relations: ['items', 'items.productVariant'],
+    async findOne(ctx: RequestContext, orderId: ID): Promise<Order | undefined> {
+        const order = await this.connection.getRepository(Order).findOne(orderId, {
+            relations: ['items', 'items.productVariant', 'items.featuredAsset'],
         });
+        if (order) {
+            order.items.forEach(item => {
+                item.productVariant = translateDeep(item.productVariant, ctx.languageCode);
+            });
+            return order;
+        }
     }
 
     create(): Promise<Order> {
@@ -67,6 +74,7 @@ export class OrderService {
         const orderItem = new OrderItem({
             quantity,
             productVariant,
+            featuredAsset: productVariant.product.featuredAsset,
             unitPrice: productVariant.price,
             totalPriceBeforeAdjustment: productVariant.price * quantity,
             totalPrice: productVariant.price * quantity,
@@ -88,6 +96,7 @@ export class OrderService {
         const order = await this.getOrderOrThrow(ctx, orderId);
         const orderItem = this.getOrderItemOrThrow(order, orderItemId);
         orderItem.quantity = quantity;
+        orderItem.totalPriceBeforeAdjustment = orderItem.unitPrice * orderItem.quantity;
         await this.connection.getRepository(OrderItem).save(orderItem);
         await this.adjustmentApplicatorService.applyAdjustments(order);
         return assertFound(this.findOne(ctx, order.id));

+ 1 - 1
server/src/service/providers/product-variant.service.ts

@@ -30,7 +30,7 @@ export class ProductVariantService {
     ) {}
 
     findOne(ctx: RequestContext, productVariantId: ID): Promise<Translated<ProductVariant> | undefined> {
-        const relations = [];
+        const relations = ['product', 'product.featuredAsset'];
         return this.connection
             .getRepository(ProductVariant)
             .findOne(productVariantId, { relations })