mock-data-client.service.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import * as faker from 'faker/locale/en_GB';
  2. import { request } from 'graphql-request';
  3. import { CreateProductVariantDto } from '../core/entity/product-variant/create-product-variant.dto';
  4. import { CreateProductDto } from '../core/entity/product/product.dto';
  5. import { Product } from '../core/entity/product/product.entity';
  6. import { LanguageCode } from '../core/locale/language-code';
  7. import { TranslationInput } from '../core/locale/locale-types';
  8. // tslint:disable:no-console
  9. /**
  10. * A service for creating mock data via the GraphQL API.
  11. */
  12. export class MockDataClientService {
  13. async populateProducts(): Promise<any> {
  14. for (let i = 0; i < 5; i++) {
  15. const query = `mutation CreateProduct($input: CreateProductInput) {
  16. createProduct(input: $input) { id, name }
  17. }`;
  18. const name = faker.commerce.productName();
  19. const slug = name.toLowerCase().replace(/\s+/g, '-');
  20. const description = faker.lorem.sentence();
  21. const languageCodes = [LanguageCode.EN, LanguageCode.DE, LanguageCode.ES];
  22. const variables = {
  23. input: {
  24. image: faker.image.imageUrl(),
  25. translations: languageCodes.map(code => this.makeProductTranslation(code, name, slug, description)),
  26. variants: [
  27. this.makeProductVariant(`${name} Variant 1`, languageCodes),
  28. this.makeProductVariant(`${name} Variant 2`, languageCodes),
  29. ],
  30. } as CreateProductDto,
  31. };
  32. await request('http://localhost:3000/graphql', query, variables).then(
  33. data => console.log('Created Product:', data),
  34. err => console.log(err),
  35. );
  36. }
  37. }
  38. private makeProductTranslation(
  39. languageCode: LanguageCode,
  40. name: string,
  41. slug: string,
  42. description: string,
  43. ): TranslationInput<Product> {
  44. return {
  45. languageCode,
  46. name: `${languageCode} ${name}`,
  47. slug: `${languageCode} ${slug}`,
  48. description: `${languageCode} ${description}`,
  49. };
  50. }
  51. private makeProductVariant(variantName: string, languageCodes: LanguageCode[]): CreateProductVariantDto {
  52. return {
  53. price: faker.random.number({ min: 100, max: 5000 }),
  54. sku: faker.random.alphaNumeric(8).toUpperCase(),
  55. translations: languageCodes.map(code => ({
  56. languageCode: code,
  57. name: `${variantName} ${code}`,
  58. })),
  59. };
  60. }
  61. }