Browse Source

refactor(admin-ui): Group EntityIdStrategies

Michael Bromley 7 years ago
parent
commit
de05727a68

+ 1 - 3
server/src/api/common/apply-id-codec-decorator.ts

@@ -1,4 +1,3 @@
-import { EntityIdStrategy } from '../../config/entity-id-strategy';
 import { getConfig } from '../../config/vendure-config';
 
 import { IdCodec } from './id-codec';
@@ -14,12 +13,11 @@ export type IdCodecType = { [K in keyof IdCodec]: IdCodec[K] };
  * @param customIdCodec - A custom IdCodec instance, primarily intended for testing.
  */
 export function ApplyIdCodec(transformKeys?: string[], customIdCodec?: IdCodecType) {
-    let strategy: EntityIdStrategy;
     let idCodec: IdCodecType;
 
     return (target: any, name: string | symbol, descriptor: PropertyDescriptor) => {
         if (!customIdCodec) {
-            strategy = getConfig().entityIdStrategy;
+            const strategy = getConfig().entityIdStrategy;
             idCodec = new IdCodec(strategy);
         } else {
             idCodec = customIdCodec;

+ 1 - 1
server/src/api/common/id-codec.ts

@@ -1,7 +1,7 @@
 import { ID } from '../../../../shared/shared-types';
 import { VendureEntity } from '../../entity/base/base.entity';
 
-import { EntityIdStrategy } from '../../config/entity-id-strategy';
+import { EntityIdStrategy } from '../../config/entity-id-strategy/entity-id-strategy';
 
 /**
  * This service is responsible for encoding/decoding entity IDs according to the configured EntityIdStrategy.

+ 0 - 0
server/src/config/auto-increment-id-strategy.ts → server/src/config/entity-id-strategy/auto-increment-id-strategy.ts


+ 17 - 0
server/src/config/entity-id-strategy/base64-id-strategy.ts

@@ -0,0 +1,17 @@
+import { IntegerIdStrategy } from './entity-id-strategy';
+
+/**
+ * An example custom strategy which uses base64 encoding on integer ids.
+ */
+export class Base64IdStrategy implements IntegerIdStrategy {
+    readonly primaryKeyType = 'increment';
+    decodeId(id: string): number {
+        const asNumber = +Buffer.from(id, 'base64').toString();
+        return Number.isNaN(asNumber) ? -1 : asNumber;
+    }
+    encodeId(primaryKey: number): string {
+        return Buffer.from(primaryKey.toString())
+            .toString('base64')
+            .replace(/=+$/, '');
+    }
+}

+ 1 - 1
server/src/config/entity-id-strategy.ts → server/src/config/entity-id-strategy/entity-id-strategy.ts

@@ -1,4 +1,4 @@
-import { ID } from '../../../shared/shared-types';
+import { ID } from '../../../../shared/shared-types';
 
 export type PrimaryKeyType = 'increment' | 'uuid';
 

+ 0 - 0
server/src/config/uuid-id-strategy.ts → server/src/config/entity-id-strategy/uuid-id-strategy.ts


+ 2 - 2
server/src/config/vendure-config.ts

@@ -5,8 +5,8 @@ import { DeepPartial } from '../../../shared/shared-types';
 import { ReadOnlyRequired } from '../common/common-types';
 import { LanguageCode } from '../locale/language-code';
 
-import { AutoIncrementIdStrategy } from './auto-increment-id-strategy';
-import { EntityIdStrategy } from './entity-id-strategy';
+import { AutoIncrementIdStrategy } from './entity-id-strategy/auto-increment-id-strategy';
+import { EntityIdStrategy } from './entity-id-strategy/entity-id-strategy';
 import { mergeConfig } from './merge-config';
 
 export interface VendureConfig {

+ 1 - 1
server/src/service/config.service.mock.ts

@@ -1,4 +1,4 @@
-import { EntityIdStrategy, PrimaryKeyType } from '../config/entity-id-strategy';
+import { EntityIdStrategy, PrimaryKeyType } from '../config/entity-id-strategy/entity-id-strategy';
 import { VendureEntity } from '../entity/base/base.entity';
 import { MockClass } from '../testing/testing-types';
 

+ 1 - 1
server/src/service/config.service.ts

@@ -3,7 +3,7 @@ import { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.int
 import { ConnectionOptions } from 'typeorm';
 
 import { ReadOnlyRequired } from '../common/common-types';
-import { EntityIdStrategy } from '../config/entity-id-strategy';
+import { EntityIdStrategy } from '../config/entity-id-strategy/entity-id-strategy';
 import { getConfig, VendureConfig } from '../config/vendure-config';
 import { LanguageCode } from '../locale/language-code';