Skip to content

Commit 69f44d6

Browse files
ivanportillorsaladocidaliondev
committed
Implement InMemoryQueryBus
Co-authored-by: Rubén Salado <rsaladocid@users.noreply.github.com> Co-authored-by: aliondev <antonioleon@audiense.com>
1 parent a69946d commit 69f44d6

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Query } from './Query';
2+
import { Response } from './Response';
23

34
export interface QueryBus {
4-
ask<T>(query: Query): Promise<T>;
5+
ask<R extends Response>(query: Query): Promise<R>;
56
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Query } from './Query';
22
import { Response } from './Response';
33

4-
export interface QueryHandler<T extends Query, R extends Response> {
4+
export interface QueryHandler<Q extends Query, R extends Response> {
55
subscribedTo(): Query;
6-
handle(query: T): Promise<R>;
6+
handle(query: Q): Promise<R>;
77
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Query } from '../../domain/Query';
2+
import { Response } from '../../domain/Response';
3+
import { QueryBus } from './../../domain/QueryBus';
4+
import { QueryHandlersInformation } from './QueryHandlersInformation';
5+
6+
export class InMemoryQueryBus implements QueryBus {
7+
constructor(private queryHandlersInformation: QueryHandlersInformation) {}
8+
9+
async ask<R extends Response>(query: Query): Promise<R> {
10+
const handler = this.queryHandlersInformation.search(query);
11+
12+
return handler.handle(query) as Promise<R>;
13+
}
14+
}

tests/Contexts/Shared/infrastructure/QueryBus/InMemoryQueryBus.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { QueryHandlersInformation } from '../../../../../src/Contexts/Shared/inf
33
import { QueryNotRegisteredError } from '../../../../../src/Contexts/Shared/domain/QueryNotRegisteredError';
44
import { QueryHandler } from '../../../../../src/Contexts/Shared/domain/QueryHandler';
55
import { Response } from '../../../../../src/Contexts/Shared/domain/Response';
6+
import { InMemoryQueryBus } from '../../../../../src/Contexts/Shared/infrastructure/QueryBus/InMemoryQueryBus';
67

78
class UnhandledQuery extends Query {
89
static QUERY_NAME = 'unhandled.query';
@@ -35,7 +36,7 @@ describe('InMemoryQueryBus', () => {
3536
}
3637

3738
expect(exception).toBeInstanceOf(QueryNotRegisteredError);
38-
expect(exception.message).toBe(`The query <UnhandledCommand> hasn't a query handler associated`);
39+
expect(exception.message).toBe(`The query <UnhandledQuery> hasn't a query handler associated`);
3940
});
4041

4142
it('accepts a query with handler', async () => {

0 commit comments

Comments
 (0)