Μετάβαση στο περιεχόμενο

QueryRepository

Αυτό το περιεχόμενο δεν είναι ακόμη διαθέσιμο στη γλώσσα σου.

Defined in: packages/core/persistence/query-repository.abstract.ts:73

Base class for read-side (query) repositories.

Resolves a query via the abstract find method and receives an ICache instance. Subclasses annotate find() with the @FromCache decorator to serve cached results, bypass cache, or rehydrate snapshots into domain entities.

Creating a query repository with the FromCache decorator

export class GetUserQueryRepository extends QueryRepository<GetUserQuery, User | null> {
constructor(
protected readonly cache: ICache<UserSnapshot>,
private readonly store: MikroOrmStore,
) {
super(cache);
}
@FromCache<GetUserQuery, User | null>({
keyFn: (query) => cacheKey('user', { id: query.userId }),
hydrateFn: (cached) => User.fromJSON(cached as UserSnapshot),
alwaysHydrate: true,
})
async find(query: GetUserQuery): Promise<User | null> {
return this.store.em.findOne(User, { id: query.userId });
}
}

Declaring rehydration once for the whole repository

export class GetRoleQueryRepository extends QueryRepository<GetRoleQuery, Role | null> {
constructor(
cache: ICache<RoleSnapshot>,
private readonly store: MikroOrmStore,
) {
super(cache, { hydrateFn: (cached) => Role.fromJSON(cached as RoleSnapshot) });
}
@FromCache<GetRoleQuery, Role | null>({
keyFn: (query) => cacheKey(Role.aggregateName, { id: query.roleId }),
})
async find(query: GetRoleQuery): Promise<Role | null> { ... }
}

A method that declares hydrateFn (including null) or serializeFn uses its own value instead of the repository default.

TQuery = IQueryOptions

The query/options type accepted by find.

TResult = unknown

The result type returned by find.

new QueryRepository<TQuery, TResult>(cache, hydration?): QueryRepository<TQuery, TResult>

Defined in: packages/core/persistence/query-repository.abstract.ts:76

ICache<unknown>

QueryRepositoryHydration<TResult>

QueryRepository<TQuery, TResult>

protected readonly cache: ICache<unknown>

Defined in: packages/core/persistence/query-repository.abstract.ts:77


protected readonly optional hydration?: QueryRepositoryHydration<TResult>

Defined in: packages/core/persistence/query-repository.abstract.ts:78

abstract find(query): Promise<TResult>

Defined in: packages/core/persistence/query-repository.abstract.ts:81

Resolves one application query.

TQuery

Promise<TResult>

IQueryRepository.find