amplify-category-api icon indicating copy to clipboard operation
amplify-category-api copied to clipboard

Records with AWSDate using timezone not being returned in searchable queries when using @searchable directives

Open ncarvajalc opened this issue 2 years ago • 1 comments

Before opening, please confirm:

  • [X] I have installed the latest version of the Amplify CLI (see above), and confirmed that the issue still persists.
  • [X] I have searched for duplicate or closed issues.
  • [X] I have read the guide for submitting bug reports.
  • [X] I have done my best to include a minimal, self-contained set of instructions for consistently reproducing the issue.
  • [X] I have removed any sensitive information from my code snippets and submission.

How did you install the Amplify CLI?

npm

If applicable, what version of Node.js are you using?

17

Amplify CLI Version

10.0.0

What operating system are you using?

Mac

Did you make any manual changes to the cloud resources managed by Amplify? Please describe the changes made.

No manual changes made

Amplify Categories

Not applicable

Amplify Commands

Not applicable

Describe the bug

Whenever there is a model using the @searchable directive with an AWSDate field with a timezone (e.g "2022-10-13Z" or "2022-10-13+05:30") and a searchModelName query is used using the date field as a filter or sorting field, the query doesn't show up the results with a timezone.

Expected behavior

All of the results to show up, including the ones with a timezone.

Reproduction steps

  1. Create a transaction without a timezone
mutation createTransaction {
  createTransaction(input: {name: "Lorem ipsum dolor sit amet",
          transactionDate: "2010-09-28",
          transactionTotalAmount: 5.1}) {
    name
    transactionDate
    transactionTotalAmount
    id
    createdAt
    updatedAt
  }
}
  1. Create a transaction with a timezone
mutation createTransaction {
  createTransaction(input: {name: "Lorem ipsum dolor sit amet",
          transactionDate: "2010-09-28Z",
          transactionTotalAmount: 5.1}) {
    name
    transactionDate
    transactionTotalAmount
    id
    createdAt
    updatedAt
  }
}
  1. Filter by any field using transactionDate as sorting field
query filterAndSort {
  searchTransactions(filter: {transactionTotalAmount: {eq: 5.1}},
  sort: {direction: desc, field: transactionDate}, limit: 10) {
    total
    items {
      id
      transactionDate
      createdAt
      transactionTotalAmount
    }
  }
}

Only the transaction without a timezone appears as a result.

GraphQL schema(s)

type Transaction @model @searchable {
  id: ID!
  name: String!
  transactionDate: AWSDate
  transactionTotalAmount: Float
}ytj

Log output

# Put your logs below this line


Additional information

A possible workaround is to use AWSDatetime or String instead as the date data type. Also, I would suspect this is due to OpenSearch data types, as dates in the format YYYY-MM-DD are not supported with a timezone in OpenSearch.

ncarvajalc avatar Oct 13 '22 15:10 ncarvajalc