app.module.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
  2. import { GraphQLFactory, GraphQLModule } from '@nestjs/graphql';
  3. import { TypeOrmModule } from '@nestjs/typeorm';
  4. import { graphiqlExpress, graphqlExpress } from 'apollo-server-express';
  5. import { AdministratorResolver } from './api/administrator/administrator.resolver';
  6. import { AuthController } from './api/auth/auth.controller';
  7. import { CustomerController } from './api/customer/customer.controller';
  8. import { CustomerResolver } from './api/customer/customer.resolver';
  9. import { ProductOptionResolver } from './api/product-option/product-option.resolver';
  10. import { ProductResolver } from './api/product/product.resolver';
  11. import { AuthService } from './auth/auth.service';
  12. import { JwtStrategy } from './auth/jwt.strategy';
  13. import { PasswordService } from './auth/password.service';
  14. import { getConfig } from './config/vendure-config';
  15. import { I18nRequest, I18nService } from './i18n/i18n.service';
  16. import { TranslationUpdaterService } from './locale/translation-updater.service';
  17. import { AdministratorService } from './service/administrator.service';
  18. import { ConfigService } from './service/config.service';
  19. import { CustomerService } from './service/customer.service';
  20. import { IdCodecService } from './service/id-codec.service';
  21. import { ProductOptionGroupService } from './service/product-option-group.service';
  22. import { ProductOptionService } from './service/product-option.service';
  23. import { ProductVariantService } from './service/product-variant.service';
  24. import { ProductService } from './service/product.service';
  25. const connectionOptions = getConfig().dbConnectionOptions;
  26. @Module({
  27. imports: [GraphQLModule, TypeOrmModule.forRoot(connectionOptions)],
  28. controllers: [AuthController, CustomerController],
  29. providers: [
  30. AdministratorResolver,
  31. AdministratorService,
  32. AuthService,
  33. ConfigService,
  34. JwtStrategy,
  35. I18nService,
  36. IdCodecService,
  37. PasswordService,
  38. CustomerService,
  39. CustomerResolver,
  40. ProductService,
  41. ProductOptionResolver,
  42. ProductOptionService,
  43. ProductOptionGroupService,
  44. ProductVariantService,
  45. ProductResolver,
  46. PasswordService,
  47. TranslationUpdaterService,
  48. ],
  49. })
  50. export class AppModule implements NestModule {
  51. constructor(
  52. private readonly graphQLFactory: GraphQLFactory,
  53. private configService: ConfigService,
  54. private i18nService: I18nService,
  55. ) {}
  56. configure(consumer: MiddlewareConsumer) {
  57. const schema = this.createSchema();
  58. consumer
  59. .apply(
  60. graphiqlExpress({
  61. endpointURL: this.configService.apiPath,
  62. subscriptionsEndpoint: `ws://localhost:3001/subscriptions`,
  63. }),
  64. )
  65. .forRoutes('/graphiql')
  66. .apply([
  67. this.i18nService.handle(),
  68. graphqlExpress(req => ({
  69. schema,
  70. context: req,
  71. formatError: this.i18nService.translateError(req),
  72. })),
  73. ])
  74. .forRoutes(this.configService.apiPath);
  75. }
  76. createSchema() {
  77. const typeDefs = this.graphQLFactory.mergeTypesByPaths(__dirname + '/**/*.graphql');
  78. return this.graphQLFactory.createSchema({
  79. typeDefs,
  80. resolverValidationOptions: {
  81. requireResolversForResolveType: false,
  82. },
  83. });
  84. }
  85. }