TF-3006 Add ADR for logic SortOrder in search
This commit is contained in:
@@ -0,0 +1,216 @@
|
||||
# 52. Logic Sort Order in search
|
||||
|
||||
Date: 2024-10-07
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
- Using `sort` by `Subject`, `Sender` or `Relevance` together with `filter` by `conditions` with `before` or `after` date results in incorrect `Email/query` response results.
|
||||
- ISSUE: https://github.com/linagora/tmail-flutter/pull/2360
|
||||
|
||||
```json
|
||||
{
|
||||
"using": [
|
||||
"urn:ietf:params:jmap:core",
|
||||
"urn:ietf:params:jmap:mail",
|
||||
"urn:apache:james:params:jmap:mail:shares"
|
||||
],
|
||||
"methodCalls": [
|
||||
[
|
||||
"Email/query",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"filter": {
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"before": "2023-11-10T16:46:32.000Z",
|
||||
"text": "firstname99"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sort": [
|
||||
{
|
||||
"isAscending": true,
|
||||
"property": "subject"
|
||||
}
|
||||
],
|
||||
"limit": 20
|
||||
},
|
||||
"c0"
|
||||
],
|
||||
[
|
||||
"Email/get",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"#ids": {
|
||||
"resultOf": "c0",
|
||||
"name": "Email/query",
|
||||
"path": "/ids/*"
|
||||
},
|
||||
"properties": [
|
||||
"id",
|
||||
"subject",
|
||||
"from",
|
||||
"to",
|
||||
"cc",
|
||||
"bcc",
|
||||
"keywords",
|
||||
"size",
|
||||
"receivedAt",
|
||||
"sentAt",
|
||||
"preview",
|
||||
"hasAttachment",
|
||||
"replyTo",
|
||||
"mailboxIds",
|
||||
"header:X-MEETING-UID:asText"
|
||||
]
|
||||
},
|
||||
"c1"
|
||||
]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Decision
|
||||
|
||||
Brief the logic flows when click `Sort Order` in search:
|
||||
|
||||
- To sort by `Subject`, `Sender` or `Relevance` we will have to use the `position` property and ignore `before` and `after` in `conditions` of `filter`
|
||||
|
||||
```json
|
||||
{
|
||||
"using": [
|
||||
"urn:ietf:params:jmap:core",
|
||||
"urn:ietf:params:jmap:mail",
|
||||
"urn:apache:james:params:jmap:mail:shares"
|
||||
],
|
||||
"methodCalls": [
|
||||
[
|
||||
"Email/query",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"filter": {
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"text": "firstname99"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sort": [
|
||||
{
|
||||
"isAscending": true,
|
||||
"property": "subject"
|
||||
}
|
||||
],
|
||||
"limit": 20,
|
||||
"position": 20
|
||||
},
|
||||
"c0"
|
||||
],
|
||||
[
|
||||
"Email/get",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"#ids": {
|
||||
"resultOf": "c0",
|
||||
"name": "Email/query",
|
||||
"path": "/ids/*"
|
||||
},
|
||||
"properties": [
|
||||
"id",
|
||||
"subject",
|
||||
"from",
|
||||
"to",
|
||||
"cc",
|
||||
"bcc",
|
||||
"keywords",
|
||||
"size",
|
||||
"receivedAt",
|
||||
"sentAt",
|
||||
"preview",
|
||||
"hasAttachment",
|
||||
"replyTo",
|
||||
"mailboxIds",
|
||||
"header:X-MEETING-UID:asText"
|
||||
]
|
||||
},
|
||||
"c1"
|
||||
]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- As for `sort` by `Most Recent` and `Oldest` we need to use `before` and `after` in `conditions` of `filter`
|
||||
|
||||
```json
|
||||
{
|
||||
"using": [
|
||||
"urn:ietf:params:jmap:core",
|
||||
"urn:ietf:params:jmap:mail",
|
||||
"urn:apache:james:params:jmap:mail:shares"
|
||||
],
|
||||
"methodCalls": [
|
||||
[
|
||||
"Email/query",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"filter": {
|
||||
"operator": "AND",
|
||||
"conditions": [
|
||||
{
|
||||
"before": "2023-11-10T16:46:32.000Z",
|
||||
"text": "firstname99"
|
||||
}
|
||||
]
|
||||
},
|
||||
"sort": [
|
||||
{
|
||||
"isAscending": true,
|
||||
"property": "receivedAt"
|
||||
}
|
||||
],
|
||||
"limit": 20
|
||||
},
|
||||
"c0"
|
||||
],
|
||||
[
|
||||
"Email/get",
|
||||
{
|
||||
"accountId": "3cd281b49cxxxxxxxxexx",
|
||||
"#ids": {
|
||||
"resultOf": "c0",
|
||||
"name": "Email/query",
|
||||
"path": "/ids/*"
|
||||
},
|
||||
"properties": [
|
||||
"id",
|
||||
"subject",
|
||||
"from",
|
||||
"to",
|
||||
"cc",
|
||||
"bcc",
|
||||
"keywords",
|
||||
"size",
|
||||
"receivedAt",
|
||||
"sentAt",
|
||||
"preview",
|
||||
"hasAttachment",
|
||||
"replyTo",
|
||||
"mailboxIds",
|
||||
"header:X-MEETING-UID:asText"
|
||||
]
|
||||
},
|
||||
"c1"
|
||||
]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Consequences
|
||||
|
||||
- Any changes to the `Sort Order` logic in search must be updated in this ADR.
|
||||
Reference in New Issue
Block a user