Filter `$eq` does not work with `date` column
navigator-dev opened this issue · 0 comments
Bug Report
Current behavior
I have a MySQL entity with a dueDate
column of type date
and if I use a request with filter dueDate||$eq||2022-04-22
I do not get any results even though there are values in the database. I looked at the TypeORM logs and I saw that the request was akin to SELECT * FROM Task WHERE dueDate = '2022-04-22T00:00:00.000Z'
.
The string 2022-04-22
is getting turned into 2022-04-22T00:00:00.000Z
which means that the $eq
operator will never work.
Expected behavior
I would like to be able to use the MySQL date
column and be able to use $lt, $lte, $eq, $gte, $gt
to filter out results based on the date.
Possible Solution
I dove into the code and found that commenting out the following block results in the expected behavior.
crud/packages/crud-request/src/request-query.parser.ts
Lines 205 to 207 in 43cf665
Is there a way to control this behavior with an option on the crud controller or with an override? I had tried overwriting the value in the filter in an override
@Override()
@Get()
async getMany(@ParsedRequest() parsedReq: CrudRequest) {
const dueDateFilters = parsedReq?.parsed?.filter?.filter((x) => x.field === "dueDate" && x.value instanceof Date);
if (dueDateFilters && dueDateFilters.length) {
for (const filter of dueDateFilters) {
filter.value = moment(filter.value).format("YYYY-MM-DD");
}
}
return this.base.getManyBase(parsedReq);
}
but even this did not work.
Environment
Package version: ^5.0.0-alpha.3
For Tooling issues:
- Node version: v16.13.2
- Platform: Mac
- Database MySQL 5.7
Others: