Class BaseQueryHandler<TQuery, TResult>Abstract

Base class for query handlers with built-in validation and error handling.

Provides a template method pattern similar to BaseCommandHandler but for queries.

class GetProductByIdHandler extends BaseQueryHandler<GetProductByIdQuery, Product> {
constructor(private repository: IProductRepository) {
super();
}

protected validate(query: GetProductByIdQuery): Result<void, DomainError> {
if (!query.productId) {
return Failure.create(new DomainError('INVALID_ID', 'Product ID is required'));
}
return Success.create(undefined);
}

protected async execute(query: GetProductByIdQuery): Promise<Result<Product, DomainError>> {
const product = await this.repository.findById(query.productId);
if (!product) {
return Failure.create(new DomainError('NOT_FOUND', 'Product not found'));
}
return Success.create(product);
}
}

Type Parameters

  • TQuery extends Query

    The query type

  • TResult

    The result type

Implements

Constructors

Methods

Constructors

Methods