Skip to content

Commit 96aeee5

Browse files
author
Lucas Cosmo Rocha
committed
Refactoring Date filter
1 parent 9318450 commit 96aeee5

File tree

2 files changed

+330
-307
lines changed

2 files changed

+330
-307
lines changed

lib/mapper/filters.js

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,27 @@ function processQuery(key, value) {
4242
}
4343

4444
function treatValue(value) {
45-
if (isDate(value)) return new Date(value).toISOString()
45+
if (isDate(value) || isDateTime(value)) return new Date(value).toISOString()
46+
else if (value.includes('*')) return buildRegEx(value)
47+
else if (value.includes(':')) return getCompareOperator(value)
48+
else if (value === 'now') return new Date().toISOString()
4649
else if (parseInt(value)) return parseInt(value)
47-
else if (value.includes('*')) value = buildRegEx(value)
48-
else if (value.includes(':')) {
49-
var result = {}
50-
value = value.split(':')
51-
result[`$${value[0]}`] = treatValue(value[1])
52-
value = result
53-
}
5450
return value
5551
}
5652

5753
function isDate(value) {
58-
return /(^\d{4}-\d{1,2}-\d{1,2}$)|(^\d{4}-\d{1,2}-\d{1,2}T\d{2}:\d{2}:\d{2}$)/.test(value)
54+
return /^([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))$/.test(value)
55+
}
56+
function isDateTime(value) {
57+
return /^([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))T(0[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/.test(value)
58+
}
59+
60+
function getCompareOperator(value) {
61+
if (value.startsWith('gte')) return { '$gte': treatValue(value.slice(4)) }
62+
else if (value.startsWith('gt')) return { '$gt': treatValue(value.slice(3)) }
63+
else if (value.startsWith('lte')) return { '$lte': treatValue(value.slice(4)) }
64+
else if (value.startsWith('lt')) return { '$lt': treatValue(value.slice(3)) }
65+
return value
5966
}
6067

6168
function splitByCommas(key, value) {
@@ -79,13 +86,13 @@ function buildRegEx(value) {
7986
function parseDate(query, options) {
8087
var result = []
8188
if (query.period) {
82-
(query.date_end && isDate(query.date_end)) ?
89+
(query.date_end) ?
8390
result.push(
84-
processQuery(options.date_field, 'lt:'.concat(getDateStart('0d', new Date(query.date_end)))),
91+
processQuery(options.date_field, 'lt:'.concat(query.date_end)),
8592
processQuery(options.date_field, 'gte:'.concat(
8693
getDateStart(query.period, new Date(query.date_end))))) :
8794
result.push(
88-
processQuery(options.date_field, 'lt:'.concat(getDateStart('0d', new Date()))),
95+
processQuery(options.date_field, 'lt:now'),
8996
processQuery(options.date_field, 'gte:'.concat(
9097
getDateStart(query.period, new Date()))))
9198
return result
@@ -97,7 +104,7 @@ function parseDate(query, options) {
97104
processQuery(options.date_field, 'lt:'.concat(query.date_end)))
98105
} else {
99106
result.push(
100-
processQuery(options.date_field, 'lt:'.concat(getDateStart('0d', new Date()))))
107+
processQuery(options.date_field, 'lt:now'))
101108
}
102109
result.push(
103110
processQuery(options.date_field, 'gte:'.concat(query.date_start)))
@@ -110,7 +117,7 @@ function getDateStart(period, date_end) {
110117
return dateToString(new Date(
111118
date_end.getFullYear(),
112119
date_end.getMonth(),
113-
(date_end.getDate() - onlyNumbers(period) + 1)))
120+
(date_end.getDate() - onlyNumbers(period))))
114121
}
115122
else if (period.endsWith('w')) {
116123
return dateToString(new Date(

0 commit comments

Comments
 (0)