Browse Source

refactor(server): Rework the configuration of the graphql api module

Abstracted into a factory function to simplify the creation of additional graphql endpoints exposing different operations & resolvers. Relates to #65
Michael Bromley 7 years ago
parent
commit
4aae6f60b7
27 changed files with 316 additions and 290 deletions
  1. 18 18
      server/dev-config.ts
  2. 40 32
      server/src/api/api.module.ts
  3. 72 45
      server/src/api/config/graphql-config.service.ts
  4. 6 6
      server/src/api/resolvers/admin/administrator.resolver.ts
  5. 6 15
      server/src/api/resolvers/admin/asset.resolver.ts
  6. 13 13
      server/src/api/resolvers/admin/auth.resolver.ts
  7. 7 7
      server/src/api/resolvers/admin/channel.resolver.ts
  8. 8 8
      server/src/api/resolvers/admin/country.resolver.ts
  9. 7 7
      server/src/api/resolvers/admin/customer-group.resolver.ts
  10. 14 14
      server/src/api/resolvers/admin/customer.resolver.ts
  11. 13 13
      server/src/api/resolvers/admin/facet.resolver.ts
  12. 5 5
      server/src/api/resolvers/admin/global-settings.resolver.ts
  13. 5 5
      server/src/api/resolvers/admin/import.resolver.ts
  14. 15 15
      server/src/api/resolvers/admin/order.resolver.ts
  15. 5 5
      server/src/api/resolvers/admin/payment-method.resolver.ts
  16. 12 12
      server/src/api/resolvers/admin/product-category.resolver.ts
  17. 10 10
      server/src/api/resolvers/admin/product-option.resolver.ts
  18. 14 14
      server/src/api/resolvers/admin/product.resolver.ts
  19. 7 7
      server/src/api/resolvers/admin/promotion.resolver.ts
  20. 5 5
      server/src/api/resolvers/admin/role.resolver.ts
  21. 6 6
      server/src/api/resolvers/admin/search.resolver.ts
  22. 5 5
      server/src/api/resolvers/admin/shipping-method.resolver.ts
  23. 6 6
      server/src/api/resolvers/admin/tax-category.resolver.ts
  24. 8 8
      server/src/api/resolvers/admin/tax-rate.resolver.ts
  25. 7 7
      server/src/api/resolvers/admin/zone.resolver.ts
  26. 1 1
      server/src/plugin/default-search-plugin/fulltext-search.resolver.ts
  27. 1 1
      shared/shared-constants.ts

+ 18 - 18
server/dev-config.ts

@@ -17,30 +17,30 @@ export const devConfig: VendureConfig = {
     authOptions: {
         disableAuth: false,
         sessionSecret: 'some-secret',
+        requireVerification: false,
     },
     port: API_PORT,
     apiPath: API_PATH,
     dbConnectionOptions: {
-        synchronize: true,
+        synchronize: false,
         logging: false,
 
-        // type: 'mysql',
-        // host: '192.168.99.100',
-        // port: 3306,
-        // username: 'root',
-        // password: '',
-        // database: 'vendure-dev',
+        type: 'mysql',
+        host: '192.168.99.100',
+        port: 3306,
+        username: 'root',
+        password: '',
+        database: 'vendure-dev',
 
-        // type: 'sqljs',
-        // database: new Uint8Array([]),
-        // location:  path.join(__dirname, 'vendure.sqlite'),
+        // type: 'sqlite',
+        // database:  path.join(__dirname, 'vendure.sqlite'),
 
-        type: 'postgres',
-        host: '127.0.0.1',
-        port: 5432,
-        username: 'postgres',
-        password: 'Be70',
-        database: 'vendure',
+        // type: 'postgres',
+        // host: '127.0.0.1',
+        // port: 5432,
+        // username: 'postgres',
+        // password: 'Be70',
+        // database: 'vendure',
     },
     orderProcessOptions: {} as OrderProcessOptions<any>,
     paymentOptions: {
@@ -64,11 +64,11 @@ export const devConfig: VendureConfig = {
         new DefaultAssetServerPlugin({
             route: 'assets',
             assetUploadDir: path.join(__dirname, 'assets'),
-            port: 3002,
+            port: 5002,
         }),
         new DefaultSearchPlugin(),
         new AdminUiPlugin({
-            port: 3001,
+            port: 5001,
         }),
     ],
 };

+ 40 - 32
server/src/api/api.module.ts

@@ -1,43 +1,41 @@
 import { Module } from '@nestjs/common';
 import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
-import { GraphQLModule } from '@nestjs/graphql';
+import path from 'path';
 
-import { ConfigModule } from '../config/config.module';
 import { DataImportModule } from '../data-import/data-import.module';
-import { I18nModule } from '../i18n/i18n.module';
 import { PluginModule } from '../plugin/plugin.module';
 import { ServiceModule } from '../service/service.module';
 
 import { IdCodecService } from './common/id-codec.service';
 import { RequestContextService } from './common/request-context.service';
-import { GraphqlConfigService } from './config/graphql-config.service';
+import { configureGraphQLModule } from './config/graphql-config.service';
 import { AssetInterceptor } from './middleware/asset-interceptor';
 import { AuthGuard } from './middleware/auth-guard';
 import { IdInterceptor } from './middleware/id-interceptor';
-import { AdministratorResolver } from './resolvers/administrator.resolver';
-import { AssetResolver } from './resolvers/asset.resolver';
-import { AuthResolver } from './resolvers/auth.resolver';
-import { ChannelResolver } from './resolvers/channel.resolver';
-import { CountryResolver } from './resolvers/country.resolver';
-import { CustomerGroupResolver } from './resolvers/customer-group.resolver';
-import { CustomerResolver } from './resolvers/customer.resolver';
-import { FacetResolver } from './resolvers/facet.resolver';
-import { GlobalSettingsResolver } from './resolvers/global-settings.resolver';
-import { ImportResolver } from './resolvers/import.resolver';
-import { OrderResolver } from './resolvers/order.resolver';
-import { PaymentMethodResolver } from './resolvers/payment-method.resolver';
-import { ProductCategoryResolver } from './resolvers/product-category.resolver';
-import { ProductOptionResolver } from './resolvers/product-option.resolver';
-import { ProductResolver } from './resolvers/product.resolver';
-import { PromotionResolver } from './resolvers/promotion.resolver';
-import { RoleResolver } from './resolvers/role.resolver';
-import { SearchResolver } from './resolvers/search.resolver';
-import { ShippingMethodResolver } from './resolvers/shipping-method.resolver';
-import { TaxCategoryResolver } from './resolvers/tax-category.resolver';
-import { TaxRateResolver } from './resolvers/tax-rate.resolver';
-import { ZoneResolver } from './resolvers/zone.resolver';
+import { AdministratorResolver } from './resolvers/admin/administrator.resolver';
+import { AssetResolver } from './resolvers/admin/asset.resolver';
+import { AuthResolver } from './resolvers/admin/auth.resolver';
+import { ChannelResolver } from './resolvers/admin/channel.resolver';
+import { CountryResolver } from './resolvers/admin/country.resolver';
+import { CustomerGroupResolver } from './resolvers/admin/customer-group.resolver';
+import { CustomerResolver } from './resolvers/admin/customer.resolver';
+import { FacetResolver } from './resolvers/admin/facet.resolver';
+import { GlobalSettingsResolver } from './resolvers/admin/global-settings.resolver';
+import { ImportResolver } from './resolvers/admin/import.resolver';
+import { OrderResolver } from './resolvers/admin/order.resolver';
+import { PaymentMethodResolver } from './resolvers/admin/payment-method.resolver';
+import { ProductCategoryResolver } from './resolvers/admin/product-category.resolver';
+import { ProductOptionResolver } from './resolvers/admin/product-option.resolver';
+import { ProductResolver } from './resolvers/admin/product.resolver';
+import { PromotionResolver } from './resolvers/admin/promotion.resolver';
+import { RoleResolver } from './resolvers/admin/role.resolver';
+import { SearchResolver } from './resolvers/admin/search.resolver';
+import { ShippingMethodResolver } from './resolvers/admin/shipping-method.resolver';
+import { TaxCategoryResolver } from './resolvers/admin/tax-category.resolver';
+import { TaxRateResolver } from './resolvers/admin/tax-rate.resolver';
+import { ZoneResolver } from './resolvers/admin/zone.resolver';
 
-const resolvers = [
+const adminResolvers = [
     AdministratorResolver,
     AssetResolver,
     AuthResolver,
@@ -62,6 +60,13 @@ const resolvers = [
     ZoneResolver,
 ];
 
+@Module({
+    imports: [ServiceModule, DataImportModule],
+    providers: [IdCodecService, ...adminResolvers],
+    exports: adminResolvers,
+})
+class AdminApiModule {}
+
 /**
  * The ApiModule is responsible for the public API of the application. This is where requests
  * come in, are parsed and then handed over to the ServiceModule classes which take care
@@ -71,14 +76,17 @@ const resolvers = [
     imports: [
         ServiceModule,
         DataImportModule,
-        GraphQLModule.forRootAsync({
-            useClass: GraphqlConfigService,
-            imports: [ConfigModule, I18nModule],
-        }),
+        AdminApiModule,
+        configureGraphQLModule(configService => ({
+            apiPath: configService.apiPath,
+            typePaths: ['type', 'admin-api', 'common'].map(p =>
+                path.join(__dirname, 'schema', p, '*.graphql'),
+            ),
+            resolverModule: AdminApiModule,
+        })),
         PluginModule,
     ],
     providers: [
-        ...resolvers,
         RequestContextService,
         IdCodecService,
         {

+ 72 - 45
server/src/api/config/graphql-config.service.ts

@@ -1,5 +1,11 @@
-import { Injectable } from '@nestjs/common';
-import { GqlModuleOptions, GqlOptionsFactory, GraphQLTypesLoader } from '@nestjs/graphql';
+import { DynamicModule, Injectable } from '@nestjs/common';
+import {
+    GqlModuleAsyncOptions,
+    GqlModuleOptions,
+    GqlOptionsFactory,
+    GraphQLModule,
+    GraphQLTypesLoader,
+} from '@nestjs/graphql';
 import { GraphQLUpload } from 'apollo-server-core';
 import { extendSchema, printSchema } from 'graphql';
 import { GraphQLDateTime } from 'graphql-iso-date';
@@ -7,54 +13,75 @@ import GraphQLJSON from 'graphql-type-json';
 import path from 'path';
 
 import { notNullOrUndefined } from '../../../../shared/shared-utils';
+import { ConfigModule } from '../../config/config.module';
 import { ConfigService } from '../../config/config.service';
+import { I18nModule } from '../../i18n/i18n.module';
 import { I18nService } from '../../i18n/i18n.service';
 import { TranslateErrorExtension } from '../middleware/translate-errors-extension';
 
 import { addGraphQLCustomFields } from './graphql-custom-fields';
 
-@Injectable()
-export class GraphqlConfigService implements GqlOptionsFactory {
-    readonly typePaths = ['type', 'admin-api', 'common'].map(p =>
-        path.join(__dirname, '../schema', p, '**/*.graphql'),
-    );
+export interface GraphQLApiOptions {
+    typePaths: string[];
+    apiPath: string;
+    // tslint:disable-next-line:ban-types
+    resolverModule: Function;
+}
 
-    constructor(
-        private i18nService: I18nService,
-        private configService: ConfigService,
-        private typesLoader: GraphQLTypesLoader,
-    ) {}
+/**
+ * Dynamically generates a GraphQLModule according to the given config options.
+ */
+export function configureGraphQLModule(
+    getOptions: (configService: ConfigService) => GraphQLApiOptions,
+): DynamicModule {
+    return GraphQLModule.forRootAsync({
+        useFactory: (
+            configService: ConfigService,
+            i18nService: I18nService,
+            typesLoader: GraphQLTypesLoader,
+        ) => {
+            return createGraphQLOptions(i18nService, configService, typesLoader, getOptions(configService));
+        },
+        inject: [ConfigService, I18nService, GraphQLTypesLoader],
+        imports: [ConfigModule, I18nModule],
+    });
+}
 
-    createGqlOptions(): GqlModuleOptions {
-        // Prevent `Type "Node" is missing a "resolveType" resolver.` warnings.
-        // See https://github.com/apollographql/apollo-server/issues/1075
-        const dummyResolveType = {
-            __resolveType() {
-                return null;
-            },
-        };
+function createGraphQLOptions(
+    i18nService: I18nService,
+    configService: ConfigService,
+    typesLoader: GraphQLTypesLoader,
+    options: GraphQLApiOptions,
+): GqlModuleOptions {
+    // Prevent `Type "Node" is missing a "resolveType" resolver.` warnings.
+    // See https://github.com/apollographql/apollo-server/issues/1075
+    const dummyResolveType = {
+        __resolveType() {
+            return null;
+        },
+    };
 
-        return {
-            path: '/' + this.configService.apiPath,
-            typeDefs: this.createTypeDefs(),
-            resolvers: {
-                JSON: GraphQLJSON,
-                DateTime: GraphQLDateTime,
-                Node: dummyResolveType,
-                PaginatedList: dummyResolveType,
-                Upload: GraphQLUpload || dummyResolveType,
-            },
-            uploads: {
-                maxFileSize: this.configService.assetOptions.uploadMaxFileSize,
-            },
-            playground: true,
-            debug: true,
-            context: req => req,
-            extensions: [() => new TranslateErrorExtension(this.i18nService)],
-            // This is handled by the Express cors plugin
-            cors: false,
-        };
-    }
+    return {
+        path: '/' + options.apiPath,
+        typeDefs: createTypeDefs(),
+        include: [options.resolverModule],
+        resolvers: {
+            JSON: GraphQLJSON,
+            DateTime: GraphQLDateTime,
+            Node: dummyResolveType,
+            PaginatedList: dummyResolveType,
+            Upload: GraphQLUpload || dummyResolveType,
+        },
+        uploads: {
+            maxFileSize: configService.assetOptions.uploadMaxFileSize,
+        },
+        playground: true,
+        debug: true,
+        context: req => req,
+        extensions: [() => new TranslateErrorExtension(i18nService)],
+        // This is handled by the Express cors plugin
+        cors: false,
+    };
 
     /**
      * Generates the server's GraphQL schema by combining:
@@ -62,11 +89,11 @@ export class GraphqlConfigService implements GqlOptionsFactory {
      * 2. any custom fields defined in the config
      * 3. any schema extensions defined by plugins
      */
-    private createTypeDefs(): string {
-        const customFields = this.configService.customFields;
-        const typeDefs = this.typesLoader.mergeTypesByPaths(...this.typePaths);
+    function createTypeDefs(): string {
+        const customFields = configService.customFields;
+        const typeDefs = typesLoader.mergeTypesByPaths(...options.typePaths);
         let schema = addGraphQLCustomFields(typeDefs, customFields);
-        const pluginTypes = this.configService.plugins
+        const pluginTypes = configService.plugins
             .map(p => (p.defineGraphQlTypes ? p.defineGraphQlTypes() : undefined))
             .filter(notNullOrUndefined);
         for (const types of pluginTypes) {

+ 6 - 6
server/src/api/resolvers/administrator.resolver.ts → server/src/api/resolvers/admin/administrator.resolver.ts

@@ -8,12 +8,12 @@ import {
     CreateAdministratorMutationArgs,
     Permission,
     UpdateAdministratorMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Administrator } from '../../entity/administrator/administrator.entity';
-import { AdministratorService } from '../../service/services/administrator.service';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Administrator } from '../../../entity/administrator/administrator.entity';
+import { AdministratorService } from '../../../service/services/administrator.service';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
 
 @Resolver('Administrator')
 export class AdministratorResolver {

+ 6 - 15
server/src/api/resolvers/asset.resolver.ts → server/src/api/resolvers/admin/asset.resolver.ts

@@ -5,37 +5,28 @@ import {
     AssetsQueryArgs,
     CreateAssetsMutationArgs,
     Permission,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Asset } from '../../entity/asset/asset.entity';
-import { AssetService } from '../../service/services/asset.service';
-import { Allow } from '../decorators/allow.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Asset } from '../../../entity/asset/asset.entity';
+import { AssetService } from '../../../service/services/asset.service';
+import { Allow } from '../../decorators/allow.decorator';
 
-@Resolver('Assets')
+@Resolver('Asset')
 export class AssetResolver {
     constructor(private assetService: AssetService) {}
 
-    /**
-     * Returns a list of Assets
-     */
     @Query()
     @Allow(Permission.ReadCatalog)
     async asset(@Args() args: AssetQueryArgs): Promise<Asset | undefined> {
         return this.assetService.findOne(args.id);
     }
 
-    /**
-     * Returns a list of Assets
-     */
     @Query()
     @Allow(Permission.ReadCatalog)
     async assets(@Args() args: AssetsQueryArgs): Promise<PaginatedList<Asset>> {
         return this.assetService.findAll(args.options || undefined);
     }
 
-    /**
-     * Create a new Asset
-     */
     @Mutation()
     @Allow(Permission.CreateCatalog)
     async createAssets(@Args() args: CreateAssetsMutationArgs): Promise<Asset[]> {

+ 13 - 13
server/src/api/resolvers/auth.resolver.ts → server/src/api/resolvers/admin/auth.resolver.ts

@@ -8,19 +8,19 @@ import {
     RefreshCustomerVerificationMutationArgs,
     RegisterCustomerAccountMutationArgs,
     VerifyCustomerAccountMutationArgs,
-} from '../../../../shared/generated-types';
-import { VerificationTokenError } from '../../common/error/errors';
-import { ConfigService } from '../../config/config.service';
-import { User } from '../../entity/user/user.entity';
-import { AuthService } from '../../service/services/auth.service';
-import { ChannelService } from '../../service/services/channel.service';
-import { CustomerService } from '../../service/services/customer.service';
-import { UserService } from '../../service/services/user.service';
-import { extractAuthToken } from '../common/extract-auth-token';
-import { RequestContext } from '../common/request-context';
-import { setAuthToken } from '../common/set-auth-token';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { VerificationTokenError } from '../../../common/error/errors';
+import { ConfigService } from '../../../config/config.service';
+import { User } from '../../../entity/user/user.entity';
+import { AuthService } from '../../../service/services/auth.service';
+import { ChannelService } from '../../../service/services/channel.service';
+import { CustomerService } from '../../../service/services/customer.service';
+import { UserService } from '../../../service/services/user.service';
+import { extractAuthToken } from '../../common/extract-auth-token';
+import { RequestContext } from '../../common/request-context';
+import { setAuthToken } from '../../common/set-auth-token';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Auth')
 export class AuthResolver {

+ 7 - 7
server/src/api/resolvers/channel.resolver.ts → server/src/api/resolvers/admin/channel.resolver.ts

@@ -5,13 +5,13 @@ import {
     CreateChannelMutationArgs,
     Permission,
     UpdateChannelMutationArgs,
-} from '../../../../shared/generated-types';
-import { Channel } from '../../entity/channel/channel.entity';
-import { ChannelService } from '../../service/services/channel.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { Channel } from '../../../entity/channel/channel.entity';
+import { ChannelService } from '../../../service/services/channel.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Channel')
 export class ChannelResolver {

+ 8 - 8
server/src/api/resolvers/country.resolver.ts → server/src/api/resolvers/admin/country.resolver.ts

@@ -8,14 +8,14 @@ import {
     DeletionResponse,
     Permission,
     UpdateCountryMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Translated } from '../../common/types/locale-types';
-import { Country } from '../../entity/country/country.entity';
-import { CountryService } from '../../service/services/country.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Translated } from '../../../common/types/locale-types';
+import { Country } from '../../../entity/country/country.entity';
+import { CountryService } from '../../../service/services/country.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Country')
 export class CountryResolver {

+ 7 - 7
server/src/api/resolvers/customer-group.resolver.ts → server/src/api/resolvers/admin/customer-group.resolver.ts

@@ -7,13 +7,13 @@ import {
     Permission,
     RemoveCustomersFromGroupMutationArgs,
     UpdateCustomerGroupMutationArgs,
-} from '../../../../shared/generated-types';
-import { CustomerGroup } from '../../entity/customer-group/customer-group.entity';
-import { CustomerGroupService } from '../../service/services/customer-group.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { CustomerGroup } from '../../../entity/customer-group/customer-group.entity';
+import { CustomerGroupService } from '../../../service/services/customer-group.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('CustomerGroup')
 export class CustomerGroupResolver {

+ 14 - 14
server/src/api/resolvers/customer.resolver.ts → server/src/api/resolvers/admin/customer.resolver.ts

@@ -11,20 +11,20 @@ import {
     Permission,
     UpdateCustomerAddressMutationArgs,
     UpdateCustomerMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { UnauthorizedError } from '../../common/error/errors';
-import { idsAreEqual } from '../../common/utils';
-import { Address } from '../../entity/address/address.entity';
-import { Customer } from '../../entity/customer/customer.entity';
-import { Order } from '../../entity/order/order.entity';
-import { CustomerService } from '../../service/services/customer.service';
-import { OrderService } from '../../service/services/order.service';
-import { IdCodecService } from '../common/id-codec.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { UnauthorizedError } from '../../../common/error/errors';
+import { idsAreEqual } from '../../../common/utils';
+import { Address } from '../../../entity/address/address.entity';
+import { Customer } from '../../../entity/customer/customer.entity';
+import { Order } from '../../../entity/order/order.entity';
+import { CustomerService } from '../../../service/services/customer.service';
+import { OrderService } from '../../../service/services/order.service';
+import { IdCodecService } from '../../common/id-codec.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Customer')
 export class CustomerResolver {

+ 13 - 13
server/src/api/resolvers/facet.resolver.ts → server/src/api/resolvers/admin/facet.resolver.ts

@@ -11,19 +11,19 @@ import {
     Permission,
     UpdateFacetMutationArgs,
     UpdateFacetValuesMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { DEFAULT_LANGUAGE_CODE } from '../../common/constants';
-import { EntityNotFoundError } from '../../common/error/errors';
-import { Translated } from '../../common/types/locale-types';
-import { FacetValue } from '../../entity/facet-value/facet-value.entity';
-import { Facet } from '../../entity/facet/facet.entity';
-import { FacetValueService } from '../../service/services/facet-value.service';
-import { FacetService } from '../../service/services/facet.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { DEFAULT_LANGUAGE_CODE } from '../../../common/constants';
+import { EntityNotFoundError } from '../../../common/error/errors';
+import { Translated } from '../../../common/types/locale-types';
+import { FacetValue } from '../../../entity/facet-value/facet-value.entity';
+import { Facet } from '../../../entity/facet/facet.entity';
+import { FacetValueService } from '../../../service/services/facet-value.service';
+import { FacetService } from '../../../service/services/facet.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Facet')
 export class FacetResolver {

+ 5 - 5
server/src/api/resolvers/global-settings.resolver.ts → server/src/api/resolvers/admin/global-settings.resolver.ts

@@ -1,10 +1,10 @@
 import { Args, Mutation, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
 
-import { Permission, UpdateGlobalSettingsMutationArgs } from '../../../../shared/generated-types';
-import { VendureConfig } from '../../config';
-import { ConfigService } from '../../config/config.service';
-import { GlobalSettingsService } from '../../service/services/global-settings.service';
-import { Allow } from '../decorators/allow.decorator';
+import { Permission, UpdateGlobalSettingsMutationArgs } from '../../../../../shared/generated-types';
+import { VendureConfig } from '../../../config';
+import { ConfigService } from '../../../config/config.service';
+import { GlobalSettingsService } from '../../../service/services/global-settings.service';
+import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver('GlobalSettings')
 export class GlobalSettingsResolver {

+ 5 - 5
server/src/api/resolvers/import.resolver.ts → server/src/api/resolvers/admin/import.resolver.ts

@@ -1,10 +1,10 @@
 import { Args, Mutation, Resolver } from '@nestjs/graphql';
 
-import { ImportInfo, ImportProductsMutationArgs, Permission } from '../../../../shared/generated-types';
-import { Importer } from '../../data-import/providers/importer/importer';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+import { ImportInfo, ImportProductsMutationArgs, Permission } from '../../../../../shared/generated-types';
+import { Importer } from '../../../data-import/providers/importer/importer';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Import')
 export class ImportResolver {

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

@@ -15,21 +15,21 @@ import {
     SetOrderShippingMethodMutationArgs,
     ShippingMethodQuote,
     TransitionOrderToStateMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { ForbiddenError, InternalServerError } from '../../common/error/errors';
-import { idsAreEqual } from '../../common/utils';
-import { Order } from '../../entity/order/order.entity';
-import { OrderState } from '../../service/helpers/order-state-machine/order-state';
-import { AuthService } from '../../service/services/auth.service';
-import { CustomerService } from '../../service/services/customer.service';
-import { OrderService } from '../../service/services/order.service';
-import { ShippingMethodService } from '../../service/services/shipping-method.service';
-import { IdCodecService } from '../common/id-codec.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { ForbiddenError, InternalServerError } from '../../../common/error/errors';
+import { idsAreEqual } from '../../../common/utils';
+import { Order } from '../../../entity/order/order.entity';
+import { OrderState } from '../../../service/helpers/order-state-machine/order-state';
+import { AuthService } from '../../../service/services/auth.service';
+import { CustomerService } from '../../../service/services/customer.service';
+import { OrderService } from '../../../service/services/order.service';
+import { ShippingMethodService } from '../../../service/services/shipping-method.service';
+import { IdCodecService } from '../../common/id-codec.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Order')
 export class OrderResolver {

+ 5 - 5
server/src/api/resolvers/payment-method.resolver.ts → server/src/api/resolvers/admin/payment-method.resolver.ts

@@ -5,11 +5,11 @@ import {
     PaymentMethodsQueryArgs,
     Permission,
     UpdatePaymentMethodMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { PaymentMethod } from '../../entity/payment-method/payment-method.entity';
-import { PaymentMethodService } from '../../service/services/payment-method.service';
-import { Allow } from '../decorators/allow.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { PaymentMethod } from '../../../entity/payment-method/payment-method.entity';
+import { PaymentMethodService } from '../../../service/services/payment-method.service';
+import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver('PaymentMethod')
 export class PaymentMethodResolver {

+ 12 - 12
server/src/api/resolvers/product-category.resolver.ts → server/src/api/resolvers/admin/product-category.resolver.ts

@@ -7,18 +7,18 @@ import {
     ProductCategoriesQueryArgs,
     ProductCategoryQueryArgs,
     UpdateProductCategoryMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Translated } from '../../common/types/locale-types';
-import { FacetValue } from '../../entity/facet-value/facet-value.entity';
-import { ProductCategory } from '../../entity/product-category/product-category.entity';
-import { FacetValueService } from '../../service/services/facet-value.service';
-import { ProductCategoryService } from '../../service/services/product-category.service';
-import { IdCodecService } from '../common/id-codec.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Translated } from '../../../common/types/locale-types';
+import { FacetValue } from '../../../entity/facet-value/facet-value.entity';
+import { ProductCategory } from '../../../entity/product-category/product-category.entity';
+import { FacetValueService } from '../../../service/services/facet-value.service';
+import { ProductCategoryService } from '../../../service/services/product-category.service';
+import { IdCodecService } from '../../common/id-codec.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('ProductCategory')
 export class ProductCategoryResolver {

+ 10 - 10
server/src/api/resolvers/product-option.resolver.ts → server/src/api/resolvers/admin/product-option.resolver.ts

@@ -6,16 +6,16 @@ import {
     ProductOptionGroupQueryArgs,
     ProductOptionGroupsQueryArgs,
     UpdateProductOptionGroupMutationArgs,
-} from '../../../../shared/generated-types';
-import { Translated } from '../../common/types/locale-types';
-import { ProductOptionGroup } from '../../entity/product-option-group/product-option-group.entity';
-import { ProductOption } from '../../entity/product-option/product-option.entity';
-import { ProductOptionGroupService } from '../../service/services/product-option-group.service';
-import { ProductOptionService } from '../../service/services/product-option.service';
-import { IdCodecService } from '../common/id-codec.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { Translated } from '../../../common/types/locale-types';
+import { ProductOptionGroup } from '../../../entity/product-option-group/product-option-group.entity';
+import { ProductOption } from '../../../entity/product-option/product-option.entity';
+import { ProductOptionGroupService } from '../../../service/services/product-option-group.service';
+import { ProductOptionService } from '../../../service/services/product-option.service';
+import { IdCodecService } from '../../common/id-codec.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('ProductOptionGroup')
 export class ProductOptionResolver {

+ 14 - 14
server/src/api/resolvers/product.resolver.ts → server/src/api/resolvers/admin/product.resolver.ts

@@ -12,20 +12,20 @@ import {
     RemoveOptionGroupFromProductMutationArgs,
     UpdateProductMutationArgs,
     UpdateProductVariantsMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Translated } from '../../common/types/locale-types';
-import { assertFound } from '../../common/utils';
-import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
-import { Product } from '../../entity/product/product.entity';
-import { FacetValueService } from '../../service/services/facet-value.service';
-import { ProductVariantService } from '../../service/services/product-variant.service';
-import { ProductService } from '../../service/services/product.service';
-import { IdCodecService } from '../common/id-codec.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Translated } from '../../../common/types/locale-types';
+import { assertFound } from '../../../common/utils';
+import { ProductVariant } from '../../../entity/product-variant/product-variant.entity';
+import { Product } from '../../../entity/product/product.entity';
+import { FacetValueService } from '../../../service/services/facet-value.service';
+import { ProductVariantService } from '../../../service/services/product-variant.service';
+import { ProductService } from '../../../service/services/product.service';
+import { IdCodecService } from '../../common/id-codec.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Product')
 export class ProductResolver {

+ 7 - 7
server/src/api/resolvers/promotion.resolver.ts → server/src/api/resolvers/admin/promotion.resolver.ts

@@ -8,13 +8,13 @@ import {
     PromotionQueryArgs,
     PromotionsQueryArgs,
     UpdatePromotionMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Promotion } from '../../entity/promotion/promotion.entity';
-import { PromotionService } from '../../service/services/promotion.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Promotion } from '../../../entity/promotion/promotion.entity';
+import { PromotionService } from '../../../service/services/promotion.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Promotion')
 export class PromotionResolver {

+ 5 - 5
server/src/api/resolvers/role.resolver.ts → server/src/api/resolvers/admin/role.resolver.ts

@@ -6,11 +6,11 @@ import {
     RoleQueryArgs,
     RolesQueryArgs,
     UpdateRoleMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { Role } from '../../entity/role/role.entity';
-import { RoleService } from '../../service/services/role.service';
-import { Allow } from '../decorators/allow.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { Role } from '../../../entity/role/role.entity';
+import { RoleService } from '../../../service/services/role.service';
+import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver('Roles')
 export class RoleResolver {

+ 6 - 6
server/src/api/resolvers/search.resolver.ts → server/src/api/resolvers/admin/search.resolver.ts

@@ -1,11 +1,11 @@
 import { Mutation, Query, ResolveProperty, Resolver } from '@nestjs/graphql';
 
-import { Permission, SearchResponse } from '../../../../shared/generated-types';
-import { Omit } from '../../../../shared/omit';
-import { Allow } from '../../api/decorators/allow.decorator';
-import { InternalServerError } from '../../common/error/errors';
-import { Translated } from '../../common/types/locale-types';
-import { FacetValue } from '../../entity';
+import { Permission, SearchResponse } from '../../../../../shared/generated-types';
+import { Omit } from '../../../../../shared/omit';
+import { InternalServerError } from '../../../common/error/errors';
+import { Translated } from '../../../common/types/locale-types';
+import { FacetValue } from '../../../entity';
+import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver()
 export class SearchResolver {

+ 5 - 5
server/src/api/resolvers/shipping-method.resolver.ts → server/src/api/resolvers/admin/shipping-method.resolver.ts

@@ -7,11 +7,11 @@ import {
     ShippingMethodQueryArgs,
     ShippingMethodsQueryArgs,
     UpdateShippingMethodMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { ShippingMethod } from '../../entity/shipping-method/shipping-method.entity';
-import { ShippingMethodService } from '../../service/services/shipping-method.service';
-import { Allow } from '../decorators/allow.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { ShippingMethod } from '../../../entity/shipping-method/shipping-method.entity';
+import { ShippingMethodService } from '../../../service/services/shipping-method.service';
+import { Allow } from '../../decorators/allow.decorator';
 
 @Resolver('ShippingMethod')
 export class ShippingMethodResolver {

+ 6 - 6
server/src/api/resolvers/tax-category.resolver.ts → server/src/api/resolvers/admin/tax-category.resolver.ts

@@ -5,12 +5,12 @@ import {
     Permission,
     TaxCategoryQueryArgs,
     UpdateTaxCategoryMutationArgs,
-} from '../../../../shared/generated-types';
-import { TaxCategory } from '../../entity/tax-category/tax-category.entity';
-import { TaxCategoryService } from '../../service/services/tax-category.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { TaxCategory } from '../../../entity/tax-category/tax-category.entity';
+import { TaxCategoryService } from '../../../service/services/tax-category.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('TaxCategory')
 export class TaxCategoryResolver {

+ 8 - 8
server/src/api/resolvers/tax-rate.resolver.ts → server/src/api/resolvers/admin/tax-rate.resolver.ts

@@ -6,14 +6,14 @@ import {
     TaxRateQueryArgs,
     TaxRatesQueryArgs,
     UpdateTaxRateMutationArgs,
-} from '../../../../shared/generated-types';
-import { PaginatedList } from '../../../../shared/shared-types';
-import { TaxRate } from '../../entity/tax-rate/tax-rate.entity';
-import { TaxRateService } from '../../service/services/tax-rate.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { PaginatedList } from '../../../../../shared/shared-types';
+import { TaxRate } from '../../../entity/tax-rate/tax-rate.entity';
+import { TaxRateService } from '../../../service/services/tax-rate.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('TaxRate')
 export class TaxRateResolver {

+ 7 - 7
server/src/api/resolvers/zone.resolver.ts → server/src/api/resolvers/admin/zone.resolver.ts

@@ -9,13 +9,13 @@ import {
     RemoveMembersFromZoneMutationArgs,
     UpdateZoneMutationArgs,
     ZoneQueryArgs,
-} from '../../../../shared/generated-types';
-import { Zone } from '../../entity/zone/zone.entity';
-import { ZoneService } from '../../service/services/zone.service';
-import { RequestContext } from '../common/request-context';
-import { Allow } from '../decorators/allow.decorator';
-import { Decode } from '../decorators/decode.decorator';
-import { Ctx } from '../decorators/request-context.decorator';
+} from '../../../../../shared/generated-types';
+import { Zone } from '../../../entity/zone/zone.entity';
+import { ZoneService } from '../../../service/services/zone.service';
+import { RequestContext } from '../../common/request-context';
+import { Allow } from '../../decorators/allow.decorator';
+import { Decode } from '../../decorators/decode.decorator';
+import { Ctx } from '../../decorators/request-context.decorator';
 
 @Resolver('Zone')
 export class ZoneResolver {

+ 1 - 1
server/src/plugin/default-search-plugin/fulltext-search.resolver.ts

@@ -5,7 +5,7 @@ import { Omit } from '../../../../shared/omit';
 import { RequestContext } from '../../api/common/request-context';
 import { Allow } from '../../api/decorators/allow.decorator';
 import { Ctx } from '../../api/decorators/request-context.decorator';
-import { SearchResolver as BaseSearchResolver } from '../../api/resolvers/search.resolver';
+import { SearchResolver as BaseSearchResolver } from '../../api/resolvers/admin/search.resolver';
 import { Translated } from '../../common/types/locale-types';
 import { FacetValue } from '../../entity';
 

+ 1 - 1
shared/shared-constants.ts

@@ -2,7 +2,7 @@
  * This file contains constants which are shared between more than one sub-module
  * e.g. values required by both the server and admin-ui.
  */
-export const API_PORT = 3000;
+export const API_PORT = 5000;
 export const API_PATH = 'api';
 export const DEFAULT_CHANNEL_CODE = '__default_channel__';
 export const SUPER_ADMIN_ROLE_CODE = '__super_admin_role__';