Jelajahi Sumber

feat(server): Implement orderByCode query

Michael Bromley 7 tahun lalu
induk
melakukan
ee6a84c75f

File diff ditekan karena terlalu besar
+ 0 - 0
schema.json


+ 15 - 0
server/src/api/resolvers/order.resolver.ts

@@ -3,6 +3,7 @@ import {
     AddItemToOrderMutationArgs,
     AddPaymentToOrderMutationArgs,
     AdjustItemQuantityMutationArgs,
+    OrderByCodeQueryArgs,
     OrderQueryArgs,
     OrdersQueryArgs,
     Permission,
@@ -66,6 +67,20 @@ export class OrderResolver {
         }
     }
 
+    @Query()
+    @Allow(Permission.Owner)
+    async orderByCode(
+        @Ctx() ctx: RequestContext,
+        @Args() args: OrderByCodeQueryArgs,
+    ): Promise<Order | undefined> {
+        if (ctx.authorizedAsOwnerOnly) {
+            const order = await this.orderService.findOneByCode(ctx, args.code);
+            if (order && order.customer.user && order.customer.user.id === ctx.activeUserId) {
+                return this.orderService.findOne(ctx, order.id);
+            }
+        }
+    }
+
     @Mutation()
     @Allow(Permission.Owner)
     async setOrderShippingAddress(

+ 1 - 0
server/src/api/types/order.api.graphql

@@ -1,6 +1,7 @@
 type Query {
     order(id: ID!): Order
     activeOrder: Order
+    orderByCode(code: String!): Order
     nextOrderStates: [String!]!
     orders(options: OrderListOptions): OrderList!
     eligibleShippingMethods: [ShippingMethodQuote!]!

+ 10 - 0
server/src/service/services/order.service.ts

@@ -75,6 +75,16 @@ export class OrderService {
         }
     }
 
+    async findOneByCode(ctx: RequestContext, orderCode: string): Promise<Order | undefined> {
+        const order = await this.connection.getRepository(Order).findOne({
+            relations: ['customer'],
+            where: {
+                code: orderCode,
+            },
+        });
+        return order;
+    }
+
     getOrderPayments(orderId: ID): Promise<Payment[]> {
         return this.connection.getRepository(Payment).find({
             where: {

+ 15 - 0
shared/generated-types.ts

@@ -60,6 +60,7 @@ export interface Query {
     facet?: Facet | null;
     order?: Order | null;
     activeOrder?: Order | null;
+    orderByCode?: Order | null;
     nextOrderStates: string[];
     orders: OrderList;
     eligibleShippingMethods: ShippingMethodQuote[];
@@ -1391,6 +1392,9 @@ export interface FacetQueryArgs {
 export interface OrderQueryArgs {
     id: string;
 }
+export interface OrderByCodeQueryArgs {
+    code: string;
+}
 export interface OrdersQueryArgs {
     options?: OrderListOptions | null;
 }
@@ -1885,6 +1889,7 @@ export namespace QueryResolvers {
         facet?: FacetResolver<Facet | null, any, Context>;
         order?: OrderResolver<Order | null, any, Context>;
         activeOrder?: ActiveOrderResolver<Order | null, any, Context>;
+        orderByCode?: OrderByCodeResolver<Order | null, any, Context>;
         nextOrderStates?: NextOrderStatesResolver<string[], any, Context>;
         orders?: OrdersResolver<OrderList, any, Context>;
         eligibleShippingMethods?: EligibleShippingMethodsResolver<ShippingMethodQuote[], any, Context>;
@@ -2082,6 +2087,16 @@ export namespace QueryResolvers {
         Parent,
         Context
     >;
+    export type OrderByCodeResolver<R = Order | null, Parent = any, Context = any> = Resolver<
+        R,
+        Parent,
+        Context,
+        OrderByCodeArgs
+    >;
+    export interface OrderByCodeArgs {
+        code: string;
+    }
+
     export type NextOrderStatesResolver<R = string[], Parent = any, Context = any> = Resolver<
         R,
         Parent,

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini