set-entity-id-strategy.ts 1.3 KB

123456789101112131415161718192021222324252627282930
  1. import { Type } from '@vendure/common/lib/shared-types';
  2. import { Column, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm';
  3. import { EntityIdStrategy } from '../config/entity-id-strategy/entity-id-strategy';
  4. import { getIdColumnsFor, getPrimaryGeneratedIdColumn } from './entity-id.decorator';
  5. export function setEntityIdStrategy(entityIdStrategy: EntityIdStrategy<any>, entities: Array<Type<any>>) {
  6. setBaseEntityIdType(entityIdStrategy);
  7. setEntityIdColumnTypes(entityIdStrategy, entities);
  8. }
  9. function setEntityIdColumnTypes(entityIdStrategy: EntityIdStrategy<any>, entities: Array<Type<any>>) {
  10. const columnDataType = entityIdStrategy.primaryKeyType === 'increment' ? 'int' : 'varchar';
  11. for (const EntityCtor of entities) {
  12. const columnConfig = getIdColumnsFor(EntityCtor);
  13. for (const { name, options, entity } of columnConfig) {
  14. Column({
  15. type: columnDataType,
  16. nullable: (options && options.nullable) || false,
  17. primary: (options && options.primary) || false,
  18. })(entity, name);
  19. }
  20. }
  21. }
  22. function setBaseEntityIdType(entityIdStrategy: EntityIdStrategy<any>) {
  23. const { entity, name } = getPrimaryGeneratedIdColumn();
  24. PrimaryGeneratedColumn(entityIdStrategy.primaryKeyType as any)(entity, name);
  25. }