Skip to content

Commit 9b031f6

Browse files
committed
feat: allow filtering by root log id
1 parent 31b7ad9 commit 9b031f6

4 files changed

Lines changed: 48 additions & 1 deletion

File tree

lib/domain/dtos/GetAllLogsDto.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const FilterDto = Joi.object({
1919
origin: Joi.string()
2020
.valid('human', 'process'),
2121
parentLog: EntityIdDto,
22+
rootLog: EntityIdDto,
2223
});
2324

2425
const SortDto = Joi.object({

lib/usecases/log/GetAllLogsUseCase.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,18 @@ class GetAllLogsUseCase {
3737
const { filter, page = {}, sort = { id: 'desc' } } = query;
3838

3939
if (filter) {
40-
const { origin, parentLog } = filter;
40+
const { origin, parentLog, rootLog } = filter;
4141
if (origin) {
4242
queryBuilder.where('origin', origin);
4343
}
4444

4545
if (parentLog) {
4646
queryBuilder.where('parentLogId', parentLog);
4747
}
48+
49+
if (rootLog) {
50+
queryBuilder.where('rootLogId', rootLog);
51+
}
4852
}
4953

5054
const { limit = 100, offset = 0 } = page;

spec/openapi.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,8 @@ components:
440440
$ref: '#/components/schemas/LogOrigin'
441441
parentLog:
442442
$ref: '#/components/schemas/EntityId'
443+
rootLog:
444+
$ref: '#/components/schemas/EntityId'
443445
additionalProperties: false
444446
Log:
445447
description: Describes an intervention or an event that happened.

test/e2e/logs.test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,46 @@ module.exports = () => {
8383
});
8484
});
8585

86+
it('should support filtering by root log', (done) => {
87+
request(server)
88+
.get('/api/logs?filter[rootLog]=1')
89+
.expect(200)
90+
.end((err, res) => {
91+
if (err) {
92+
done(err);
93+
return;
94+
}
95+
96+
// Response must satisfy the OpenAPI specification
97+
expect(res).to.satisfyApiSpec;
98+
99+
expect(res.body.data).to.be.an('array');
100+
expect(res.body.data).to.have.lengthOf(3);
101+
102+
done();
103+
});
104+
});
105+
106+
it('should return 400 for an invalid root log', (done) => {
107+
request(server)
108+
.get('/api/logs?filter[rootLog]=-1')
109+
.expect(400)
110+
.end((err, res) => {
111+
if (err) {
112+
done(err);
113+
return;
114+
}
115+
116+
// Response must satisfy the OpenAPI specification
117+
expect(res).to.satisfyApiSpec;
118+
119+
const { errors } = res.body;
120+
expect(errors[0].detail).to.equal('"query.filter.rootLog" must be a positive number');
121+
122+
done();
123+
});
124+
});
125+
86126
it('should support filtering by origin (process)', (done) => {
87127
request(server)
88128
.get('/api/logs?filter[origin]=process')

0 commit comments

Comments
 (0)