Skip to content

Commit cfc7e12

Browse files
committed
Refactor recentEvents filtering: move marks to top-level and add date range support
1 parent 1bd29cd commit cfc7e12

2 files changed

Lines changed: 24 additions & 29 deletions

File tree

src/models/eventsFactory.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ const { ObjectID } = require('mongodb');
2323

2424
/**
2525
* @typedef {Object} EventsFilters
26-
* @property {boolean} [starred] - if true, events with 'starred' mark should be included to the output
27-
* @property {boolean} [resolved] - if true, events with 'resolved' should be included to the output
28-
* @property {boolean} [ignored] - if true, events with 'ignored' mark should be included to the output
26+
* @property {boolean} [starred]
27+
* @property {boolean} [resolved]
28+
* @property {boolean} [ignored]
29+
* @property {string|number} [dateFrom]
30+
* @property {string|number} [dateTo]
2931
*/
3032

3133
/**
@@ -149,10 +151,7 @@ class EventsFactory extends Factory {
149151
* @param {Number} limit - events count limitations
150152
* @param {Number} skip - certain number of documents to skip
151153
* @param {'BY_DATE' | 'BY_COUNT'} sort - events sort order
152-
* @param {Object} filters - filter object
153-
* @param {Object.<string, boolean>} [filters.marks] - mark filters: e.g. { starred: true, ignored: false }
154-
* @param {string|number} [filters.dateFrom] - filter start date (ISO or timestamp)
155-
* @param {string|number} [filters.dateTo] - filter end date (ISO or timestamp)
154+
* @param {EventsFilters} filters - filter object
156155
* @param {String} search - search query
157156
*
158157
* @return {RecentEventSchema[]}
@@ -236,11 +235,11 @@ class EventsFactory extends Factory {
236235
};
237236

238237
// Filter by marks (event.marks.{key})
239-
if (filters.marks && typeof filters.marks === 'object') {
240-
for (const [mark, exists] of Object.entries(filters.marks)) {
241-
matchFilter[`event.marks.${mark}`] = { $exists: exists };
238+
['starred', 'resolved', 'ignored'].forEach((mark) => {
239+
if (typeof filters[mark] === 'boolean') {
240+
matchFilter[`event.marks.${mark}`] = { $exists: filters[mark] };
242241
}
243-
}
242+
});
244243

245244
// Filter by date (groupingTimestamp)
246245
if (filters.dateFrom || filters.dateTo) {

src/typeDefs/project.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,31 @@ Events filters input type
1616
"""
1717
input EventsFiltersInput {
1818
"""
19-
Filter events by marks (e.g. starred, resolved, ignored).
20-
Set to true to include only events that have the mark, or false to exclude those.
21-
Example: { starred: true, ignored: false }
19+
If true, includes events with resolved mark
2220
"""
23-
marks: MarksFilterInput
21+
resolved: Boolean
22+
23+
"""
24+
If true, includes events with starred mark
25+
"""
26+
starred: Boolean
27+
28+
"""
29+
If true, includes events with ignored mark
30+
"""
31+
ignored: Boolean
2432
2533
"""
26-
Include only events that occurred after this date (inclusive).
27-
Accepts ISO date string or Unix timestamp (in seconds).
34+
Include events with groupingTimestamp >= dateFrom (ISO or timestamp in seconds)
2835
"""
2936
dateFrom: Timestamp
3037
3138
"""
32-
Include only events that occurred before this date (inclusive).
33-
Accepts ISO date string or Unix timestamp (in seconds).
39+
Include events with groupingTimestamp <= dateTo (ISO or timestamp in seconds)
3440
"""
3541
dateTo: Timestamp
3642
}
3743
38-
"""
39-
Allows filtering by specific event marks.
40-
Each field corresponds to event.marks.{name}.
41-
"""
42-
input MarksFilterInput {
43-
starred: Boolean
44-
resolved: Boolean
45-
ignored: Boolean
46-
}
47-
4844
"""
4945
Respose object with updated project and his id
5046
"""

0 commit comments

Comments
 (0)