QueryRepository
Defined in: packages/ddd-core/persistence/query-repository.abstract.ts:75
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.
Examples
Section titled “Examples”Creating a query repository with the FromCache decorator
@Injectable()export class GetUserQueryRepository extends QueryRepository<GetUserQuery, User | null> { constructor( @Inject(CACHE_TOKEN) protected readonly cache: ICache<UserSnapshot>, @Inject(MIKRO_ORM_CLIENT) 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
@Injectable()export class GetRoleQueryRepository extends QueryRepository<GetRoleQuery, Role | null> { constructor( @Inject(CACHE_TOKEN) cache: ICache<RoleSnapshot>, @Inject(MIKRO_ORM_CLIENT) 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.
Type Parameters
Section titled “Type Parameters”TQuery
Section titled “TQuery”TQuery = IQueryOptions
The query/options type accepted by find.
TResult
Section titled “TResult”TResult = unknown
The result type returned by find.
Implements
Section titled “Implements”IQueryRepository<TQuery,TResult>
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new QueryRepository<
TQuery,TResult>(cache,hydration?):QueryRepository<TQuery,TResult>
Defined in: packages/ddd-core/persistence/query-repository.abstract.ts:78
Parameters
Section titled “Parameters”ICache<unknown>
hydration?
Section titled “hydration?”QueryRepositoryHydration<TResult>
Returns
Section titled “Returns”QueryRepository<TQuery, TResult>
Properties
Section titled “Properties”
protectedreadonlycache:ICache<unknown>
Defined in: packages/ddd-core/persistence/query-repository.abstract.ts:79
hydration?
Section titled “hydration?”
protectedreadonlyoptionalhydration?:QueryRepositoryHydration<TResult>
Defined in: packages/ddd-core/persistence/query-repository.abstract.ts:80
Methods
Section titled “Methods”find()
Section titled “find()”
abstractfind(query):Promise<TResult>
Defined in: packages/ddd-core/persistence/query-repository.abstract.ts:83
Resolves one application query.
Parameters
Section titled “Parameters”TQuery
Returns
Section titled “Returns”Promise<TResult>