Skip to content

Commit 6103ca9

Browse files
#RI-3063-change etries structure (#810)
* #RI-3063-change etries structure
1 parent b198a9f commit 6103ca9

File tree

10 files changed

+197
-191
lines changed

10 files changed

+197
-191
lines changed

redisinsight/api/src/modules/browser/dto/stream.dto.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ import {
1111
IsString,
1212
Min,
1313
ValidateNested,
14-
isString,
1514
NotEquals,
1615
ValidateIf,
1716
IsBoolean,
1817
} from 'class-validator';
1918
import { KeyDto, KeyWithExpireDto } from 'src/modules/browser/dto/keys.dto';
2019
import { SortOrder } from 'src/constants';
2120
import { Type } from 'class-transformer';
22-
import { IsObjectWithValues } from 'src/validators/isObjectWithValues.validator';
2321

2422
export class StreamEntryDto {
2523
@ApiProperty({
@@ -35,12 +33,13 @@ export class StreamEntryDto {
3533
@ApiProperty({
3634
type: Object,
3735
description: 'Entry fields',
38-
example: { field1: 'value1', field2: 'value2' },
36+
example: [['field1', 'value1'], ['field2', 'value2']],
3937
})
4038
@IsDefined()
4139
@IsNotEmpty()
42-
@IsObjectWithValues([isString], { message: '$property must be an object with string values' })
43-
fields: Record<string, string>;
40+
@IsArray()
41+
@ArrayNotEmpty()
42+
fields: Array<Array<string>>;
4443
}
4544

4645
export class GetStreamEntriesDto extends KeyDto {
@@ -131,17 +130,17 @@ export class AddStreamEntriesDto extends KeyDto {
131130
example: [
132131
{
133132
id: '*',
134-
fields: {
135-
field1: 'value1',
136-
field2: 'value2',
137-
},
133+
fields: [
134+
['field1', 'value1'],
135+
['field2', 'value2'],
136+
],
138137
},
139138
{
140139
id: '*',
141-
fields: {
142-
field1: 'value1',
143-
field2: 'value2',
144-
},
140+
fields: [
141+
['field1', 'value1'],
142+
['field2', 'value2'],
143+
],
145144
},
146145
],
147146
})

redisinsight/api/src/modules/browser/services/stream/consumer-group.service.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ const mockKeyDto = {
2323

2424
const mockStreamEntry: StreamEntryDto = {
2525
id: '*',
26-
fields: {
27-
field1: 'value1',
28-
},
26+
fields: [
27+
['field1', 'value1']
28+
]
2929
};
3030
const mockAddStreamEntriesDto: AddStreamEntriesDto = {
3131
keyName: 'testList',

redisinsight/api/src/modules/browser/services/stream/stream.service.spec.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ const mockClientOptions: IFindRedisClientInstanceByOptions = {
1818

1919
const mockStreamEntry: StreamEntryDto = {
2020
id: '*',
21-
fields: {
22-
field1: 'value1',
23-
},
21+
fields: [
22+
['field1', 'value1'],
23+
],
2424
};
2525
const mockAddStreamEntriesDto: AddStreamEntriesDto = {
2626
keyName: 'testList',
@@ -74,11 +74,11 @@ const mockStreamInfo = {
7474
lastGeneratedId: '1651130346487-1',
7575
firstEntry: {
7676
id: '1651130346487-0',
77-
fields: { field1: 'value1', field2: 'value2' },
77+
fields: [ ['field1', 'value1'], ['field2', 'value2'] ],
7878
},
7979
lastEntry: {
8080
id: '1651130346487-1',
81-
fields: { field1: 'value1', field2: 'value2' },
81+
fields: [ ['field1', 'value1'], ['field2', 'value2'] ],
8282
},
8383
};
8484
const mockStreamEntriesReply = [
@@ -87,8 +87,8 @@ const mockStreamEntriesReply = [
8787
];
8888
const mockEmptyStreamEntriesReply = [];
8989
const mockStreamEntries = [
90-
{ id: '1651130346487-1', fields: { field1: 'value1', field2: 'value2' } },
91-
{ id: '1651130346487-0', fields: { field1: 'value1', field2: 'value2' } },
90+
{ id: '1651130346487-1', fields: [ ['field1', 'value1'], ['field2', 'value2'] ] },
91+
{ id: '1651130346487-0', fields: [ ['field1', 'value1'], ['field2', 'value2'] ] },
9292
];
9393

9494
const mockGetStreamEntriesDto: GetStreamEntriesDto = {
@@ -133,7 +133,7 @@ describe('StreamService', () => {
133133
).resolves.not.toThrow();
134134
expect(browserTool.execMulti).toHaveBeenCalledWith(mockClientOptions, [
135135
[BrowserToolStreamCommands.XAdd, mockAddStreamEntriesDto.keyName, mockStreamEntry.id,
136-
...Object.keys(mockStreamEntry.fields), ...Object.values(mockStreamEntry.fields)],
136+
...mockStreamEntry.fields[0]],
137137
[BrowserToolKeysCommands.Expire, mockAddStreamEntriesDto.keyName, 1000],
138138
]);
139139
});
@@ -145,7 +145,7 @@ describe('StreamService', () => {
145145
).resolves.not.toThrow();
146146
expect(browserTool.execMulti).toHaveBeenCalledWith(mockClientOptions, [
147147
[BrowserToolStreamCommands.XAdd, mockAddStreamEntriesDto.keyName, mockStreamEntry.id,
148-
...Object.keys(mockStreamEntry.fields), ...Object.values(mockStreamEntry.fields)],
148+
...mockStreamEntry.fields[0]],
149149
]);
150150
});
151151
it('should throw error key exists', async () => {
@@ -239,7 +239,7 @@ describe('StreamService', () => {
239239
).resolves.not.toThrow();
240240
expect(browserTool.execMulti).toHaveBeenCalledWith(mockClientOptions, [
241241
[BrowserToolStreamCommands.XAdd, mockAddStreamEntriesDto.keyName, mockStreamEntry.id,
242-
...Object.keys(mockStreamEntry.fields), ...Object.values(mockStreamEntry.fields)],
242+
...mockStreamEntry.fields[0]],
243243
]);
244244
});
245245
it('should throw Not Found when key does not exists', async () => {

redisinsight/api/src/modules/browser/services/stream/stream.service.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ export class StreamService {
172172

173173
const entriesArray = entries.map((entry) => [
174174
entry.id,
175-
...flatMap(map(entry.fields, (value, field) => [field, value])),
175+
...flatMap(map(entry.fields, (field) => [field[0], field[1]])),
176176
]);
177177

178178
const toolCommands: Array<[
@@ -243,7 +243,7 @@ export class StreamService {
243243

244244
const entriesArray = entries.map((entry) => [
245245
entry.id,
246-
...flatMap(map(entry.fields, (value, field) => [field, value])),
246+
...flatMap(map(entry.fields, (field) => [field[0], field[1]])),
247247
]);
248248

249249
const toolCommands: Array<[
@@ -340,8 +340,8 @@ export class StreamService {
340340
* to DTO
341341
*
342342
* [
343-
* { id: '1650985323741-0', fields: { field: 'value' } },
344-
* { id: '1650985351882-0', fields: { field: 'value2' } },
343+
* { id: '1650985323741-0', fields: [ ['field', 'value'] ] },
344+
* { id: '1650985351882-0', fields: [ ['field', 'value2 ] },
345345
* ...
346346
* ]
347347
* @param reply
@@ -359,13 +359,6 @@ export class StreamService {
359359
return null;
360360
}
361361

362-
const dto = { id: entry[0], fields: {} };
363-
364-
chunk(entry[1] || [], 2).forEach((keyFieldPair) => {
365-
// eslint-disable-next-line prefer-destructuring
366-
dto.fields[keyFieldPair[0]] = keyFieldPair[1];
367-
});
368-
369-
return dto;
362+
return { id: entry[0], fields: chunk(entry[1] || [], 2) };
370363
}
371364
}

redisinsight/api/test/api/stream/POST-instance-id-streams-entries-get.test.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const validInputData = {
3434

3535
const entrySchema = Joi.object().keys({
3636
id: Joi.string().required(),
37-
fields: Joi.object().required(),
37+
fields: Joi.array().required(),
3838
});
3939

4040
const responseSchema = Joi.object().keys({
@@ -91,9 +91,9 @@ describe('POST /instance/:instanceId/streams/entries/get', () => {
9191
expect(body.entries.length).to.eql(500);
9292
body.entries.forEach((entry, i) => {
9393
expect(entry.id).to.be.a('string');
94-
expect(entry.fields).to.eql({
95-
[`f_${9999 - i}`]: `v_${9999 - i}`,
96-
});
94+
expect(entry.fields).to.eql([
95+
[`f_${9999 - i}`, `v_${9999 - i}`],
96+
]);
9797
});
9898
},
9999
},
@@ -112,9 +112,9 @@ describe('POST /instance/:instanceId/streams/entries/get', () => {
112112
expect(body.entries.length).to.eql(10);
113113
body.entries.forEach((entry, i) => {
114114
expect(entry.id).to.be.a('string');
115-
expect(entry.fields).to.eql({
116-
[`f_${9900 - i}`]: `v_${9900 - i}`,
117-
});
115+
expect(entry.fields).to.eql([
116+
[`f_${9900 - i}`, `v_${9900 - i}`],
117+
]);
118118
});
119119
},
120120
},
@@ -132,9 +132,9 @@ describe('POST /instance/:instanceId/streams/entries/get', () => {
132132
expect(body.entries.length).to.eql(500);
133133
body.entries.forEach((entry, i) => {
134134
expect(entry.id).to.be.a('string');
135-
expect(entry.fields).to.eql({
136-
[`f_${i}`]: `v_${i}`,
137-
});
135+
expect(entry.fields).to.eql([
136+
[`f_${i}`, `v_${i}`],
137+
]);
138138
});
139139
},
140140
},
@@ -154,9 +154,9 @@ describe('POST /instance/:instanceId/streams/entries/get', () => {
154154
expect(body.entries.length).to.eql(10);
155155
body.entries.forEach((entry, i) => {
156156
expect(entry.id).to.be.a('string');
157-
expect(entry.fields).to.eql({
158-
[`f_${99 + i}`]: `v_${99 + i}`,
159-
});
157+
expect(entry.fields).to.eql([
158+
[`f_${99 + i}`, `v_${99 + i}`]
159+
]);
160160
});
161161
},
162162
},

0 commit comments

Comments
 (0)