| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* tslint:disable:no-non-null-assertion */
- import { OnModuleInit } from '@nestjs/common';
- import { Args, Mutation, Resolver } from '@nestjs/graphql';
- import {
- Asset,
- AssetEvent,
- AssetService,
- Ctx,
- EventBus,
- ID,
- Logger,
- PluginCommonModule,
- RequestContext,
- Transaction,
- TransactionalConnection,
- VendurePlugin,
- } from '@vendure/core';
- import gql from 'graphql-tag';
- @Resolver()
- class TestResolver {
- constructor(private assetService: AssetService) {}
- @Transaction()
- @Mutation()
- async setAssetName(@Ctx() ctx: RequestContext, @Args() args: { id: ID; name: string }) {
- await this.assetService.update(ctx, {
- id: args.id,
- name: args.name,
- });
- await new Promise(resolve => setTimeout(resolve, 500));
- Logger.info(`setAssetName returning`);
- return true;
- }
- }
- // A plugin to explore solutions to https://github.com/vendure-ecommerce/vendure/issues/1107
- @VendurePlugin({
- imports: [PluginCommonModule],
- adminApiExtensions: {
- schema: gql`
- extend type Mutation {
- setAssetName(id: ID!, name: String!): Boolean
- }
- `,
- resolvers: [TestResolver],
- },
- })
- export class EventBusTransactionsPlugin implements OnModuleInit {
- constructor(private eventBus: EventBus, private connection: TransactionalConnection) {}
- onModuleInit(): any {
- this.eventBus.ofType(AssetEvent).subscribe(async event => {
- Logger.info(`Event handler started`);
- const repository = this.connection.getRepository(event.ctx, Asset);
- await new Promise(resolve => setTimeout(resolve, 1000));
- const asset = await repository.findOne(event.asset.id);
- Logger.info(`The asset name is ${asset?.name}`);
- asset!.name = asset!.name + ' modified';
- await repository.save(asset!);
- });
- }
- }
|