asset.resolver.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
  2. import {
  3. CreateAssetResult,
  4. MutationCreateAssetsArgs,
  5. MutationDeleteAssetArgs,
  6. MutationDeleteAssetsArgs,
  7. MutationUpdateAssetArgs,
  8. Permission,
  9. QueryAssetArgs,
  10. QueryAssetsArgs,
  11. } from '@vendure/common/lib/generated-types';
  12. import { PaginatedList } from '@vendure/common/lib/shared-types';
  13. import { Asset } from '../../../entity/asset/asset.entity';
  14. import { AssetService } from '../../../service/services/asset.service';
  15. import { RequestContext } from '../../common/request-context';
  16. import { Allow } from '../../decorators/allow.decorator';
  17. import { Ctx } from '../../decorators/request-context.decorator';
  18. import { Transaction } from '../../decorators/transaction.decorator';
  19. @Resolver('Asset')
  20. export class AssetResolver {
  21. constructor(private assetService: AssetService) {}
  22. @Query()
  23. @Allow(Permission.ReadCatalog)
  24. async asset(@Ctx() ctx: RequestContext, @Args() args: QueryAssetArgs): Promise<Asset | undefined> {
  25. return this.assetService.findOne(ctx, args.id);
  26. }
  27. @Query()
  28. @Allow(Permission.ReadCatalog)
  29. async assets(@Ctx() ctx: RequestContext, @Args() args: QueryAssetsArgs): Promise<PaginatedList<Asset>> {
  30. return this.assetService.findAll(ctx, args.options || undefined);
  31. }
  32. @Transaction()
  33. @Mutation()
  34. @Allow(Permission.CreateCatalog)
  35. async createAssets(
  36. @Ctx() ctx: RequestContext,
  37. @Args() args: MutationCreateAssetsArgs,
  38. ): Promise<CreateAssetResult[]> {
  39. // TODO: Is there some way to parellelize this while still preserving
  40. // the order of files in the upload? Non-deterministic IDs mess up the e2e test snapshots.
  41. const assets: CreateAssetResult[] = [];
  42. for (const input of args.input) {
  43. const asset = await this.assetService.create(ctx, input);
  44. assets.push(asset);
  45. }
  46. return assets;
  47. }
  48. @Transaction()
  49. @Mutation()
  50. @Allow(Permission.UpdateCatalog)
  51. async updateAsset(@Ctx() ctx: RequestContext, @Args() { input }: MutationUpdateAssetArgs) {
  52. return this.assetService.update(ctx, input);
  53. }
  54. @Transaction()
  55. @Mutation()
  56. @Allow(Permission.DeleteCatalog)
  57. async deleteAsset(@Ctx() ctx: RequestContext, @Args() { id, force }: MutationDeleteAssetArgs) {
  58. return this.assetService.delete(ctx, [id], force || undefined);
  59. }
  60. @Transaction()
  61. @Mutation()
  62. @Allow(Permission.DeleteCatalog)
  63. async deleteAssets(@Ctx() ctx: RequestContext, @Args() { ids, force }: MutationDeleteAssetsArgs) {
  64. return this.assetService.delete(ctx, ids, force || undefined);
  65. }
  66. }