EntityIdStrategy
AutoIncrementIdStrategy
An id strategy which uses auto-increment integers as primary keys for all entities. This is the default strategy used by Vendure.
class AutoIncrementIdStrategy implements EntityIdStrategy<'increment'> {
readonly primaryKeyType = 'increment';
decodeId(id: string) => number;
encodeId(primaryKey: number) => string;
}
- Implements:
EntityIdStrategy<'increment'>
primaryKeyType
decodeId
(id: string) => number
encodeId
(primaryKey: number) => string
EntityIdStrategy
The EntityIdStrategy determines how entity IDs are generated and stored in the database, as well as how they are transformed when being passed from the API to the service layer and vice versa.
Vendure ships with two strategies: AutoIncrementIdStrategy and UuidIdStrategy, but custom strategies can be used, e.g. to apply some custom encoding to the ID before exposing it in the GraphQL API.
This is configured via the entityOptions.entityIdStrategy
property of
your VendureConfig.
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.
interface EntityIdStrategy<T extends 'increment' | 'uuid'> extends InjectableStrategy {
readonly primaryKeyType: T;
encodeId: (primaryKey: PrimaryKeyType<T>) => string;
decodeId: (id: string) => PrimaryKeyType<T>;
}
- Extends:
InjectableStrategy
primaryKeyType
T
Defines how the primary key will be stored in the database - either
'increment'
for auto-increment integer IDs, or 'uuid'
for a unique
string ID.
encodeId
(primaryKey: PrimaryKeyType<T>) => string
Allows the raw ID from the database to be transformed in some way before exposing it in the GraphQL API.
For example, you may need to use auto-increment integer IDs due to some business constraint, but you may not want to expose this data publicly in your API. In this case, you can use the encode/decode methods to obfuscate the ID with some kind of encoding scheme, such as base64 (or something more sophisticated).
decodeId
(id: string) => PrimaryKeyType<T>
Reverses the transformation performed by the encodeId
method in order to get
back to the raw ID value.
UuidIdStrategy
An id strategy which uses string uuids as primary keys
for all entities. This strategy can be configured with the
entityIdStrategy
property of the entityOptions
property
of VendureConfig.
Example
import { UuidIdStrategy, VendureConfig } from '@vendure/core';
export const config: VendureConfig = {
entityOptions: {
entityIdStrategy: new UuidIdStrategy(),
// ...
}
}
class UuidIdStrategy implements EntityIdStrategy<'uuid'> {
readonly primaryKeyType = 'uuid';
decodeId(id: string) => string;
encodeId(primaryKey: string) => string;
}
- Implements:
EntityIdStrategy<'uuid'>