EntityOptions
EntityOptions
Options relating to the internal handling of entities.
Signature
interface EntityOptions {
entityIdStrategy?: EntityIdStrategy<any>;
moneyStrategy?: MoneyStrategy;
channelCacheTtl?: number;
zoneCacheTtl?: number;
taxRateCacheTtl?: number;
metadataModifiers?: EntityMetadataModifier[];
}
Members
entityIdStrategy
Defines the strategy used for both storing the primary keys of entities in the database, and the encoding & decoding of those ids when exposing entities via the API. The default uses a simple auto-increment integer strategy.
Note: changing from an integer-based strategy to a uuid-based strategy on an existing Vendure database will lead to problems with broken foreign-key references. To change primary key types like this, you’ll need to start with a fresh database.
moneyStrategy
channelCacheTtl
number
30000
zoneCacheTtl
number
30000
taxRateCacheTtl
number
30000
metadataModifiers
EntityMetadataModifier
A function which allows TypeORM entity metadata to be manipulated prior to the DB schema being generated during bootstrap.
Certain DB schema modifications will result in auto-generated migrations which will lead to data loss. For instance, changing the data type of a column will drop the column & data and then re-create it. To avoid loss of important data, always check and modify your migration scripts as needed.
Example
import { Index } from 'typeorm';
import { EntityMetadataModifier, ProductVariant } from '@vendure/core';
// Adds a unique index to the ProductVariant.sku column
export const addSkuUniqueIndex: EntityMetadataModifier = metadata => {
const instance = new ProductVariant();
Index({ unique: true })(instance, 'sku');
};
Example
import { Column } from 'typeorm';
import { EntityMetadataModifier, ProductTranslation } from '@vendure/core';
// Use the "mediumtext" datatype for the Product's description rather than
// the default "text" type.
export const makeProductDescriptionMediumText: EntityMetadataModifier = metadata => {
const descriptionColumnIndex = metadata.columns.findIndex(
col => col.propertyName === 'description' && col.target === ProductTranslation,
);
if (-1 < descriptionColumnIndex) {
// First we need to remove the existing column definition
// from the metadata.
metadata.columns.splice(descriptionColumnIndex, 1);
// Then we add a new column definition with our custom
// data type "mediumtext"
// DANGER: this particular modification will generate a DB migration
// which will result in data loss of existing descriptions. Make sure
// to manually check & modify your migration scripts.
const instance = new ProductTranslation();
Column({ type: 'mediumtext' })(instance, 'description');
}
};
Signature
type EntityMetadataModifier = (metadata: MetadataArgsStorage) => void | Promise<void>