Update GraphQL endpoint to support sorting releases
What does this MR do?
Updates our GraphQL endpoint to support sorting of releases by released_at
and created_at
.
This is essentially the same change as !44118 (merged), but for GraphQL instead of our REST API.
This MR is an incremental step towards #26413 (closed).
Example queries/responses
No sort
provided (same as sort: RELEASED_AT_DESC
)
Query:
{
project(fullPath: "root/release-test") {
releases(first: 3) {
nodes {
createdAt
releasedAt
}
pageInfo {
startCursor
endCursor
}
}
}
}
Response:
{
"data": {
"project": {
"releases": {
"nodes": [
{
"createdAt": "2020-09-02T18:13:36Z",
"releasedAt": "2030-03-15T08:00:00Z"
},
{
"createdAt": "2020-09-22T00:22:27Z",
"releasedAt": "2020-09-22T00:22:27Z"
},
{
"createdAt": "2020-09-02T17:02:55Z",
"releasedAt": "2020-09-02T17:02:55Z"
}
],
"pageInfo": {
"startCursor": "eyJpZCI6IjQ0In0",
"endCursor": "eyJpZCI6IjQzIn0"
}
}
}
}
}
With sort: RELEASED_AT_DESC
Query:
{
project(fullPath: "root/release-test") {
releases(first: 3, sort: RELEASED_AT_DESC) {
nodes {
createdAt
releasedAt
}
pageInfo {
startCursor
endCursor
}
}
}
}
Response:
{
"data": {
"project": {
"releases": {
"nodes": [
{
"createdAt": "2020-09-02T18:13:36Z",
"releasedAt": "2030-03-15T08:00:00Z"
},
{
"createdAt": "2020-09-22T00:22:27Z",
"releasedAt": "2020-09-22T00:22:27Z"
},
{
"createdAt": "2020-09-02T17:02:55Z",
"releasedAt": "2020-09-02T17:02:55Z"
}
],
"pageInfo": {
"startCursor": "eyJpZCI6IjQ0In0",
"endCursor": "eyJpZCI6IjQzIn0"
}
}
}
}
}
With sort: RELEASED_AT_ASC
Query:
{
project(fullPath: "root/release-test") {
releases(first: 3, sort: RELEASED_AT_ASC) {
nodes {
createdAt
releasedAt
}
pageInfo {
startCursor
endCursor
}
}
}
}
Response:
{
"data": {
"project": {
"releases": {
"nodes": [
{
"createdAt": "2020-07-06T15:35:22Z",
"releasedAt": "2020-07-06T15:35:22Z"
},
{
"createdAt": "2020-07-09T19:20:06Z",
"releasedAt": "2020-07-09T19:20:06Z"
},
{
"createdAt": "2020-07-09T20:11:33Z",
"releasedAt": "2020-07-09T20:11:33Z"
}
],
"pageInfo": {
"startCursor": "eyJpZCI6IjEifQ",
"endCursor": "eyJpZCI6IjMifQ"
}
}
}
}
}
With sort: CREATED_DESC
Query:
{
project(fullPath: "root/release-test") {
releases(first: 3, sort: CREATED_DESC) {
nodes {
createdAt
releasedAt
}
pageInfo {
startCursor
endCursor
}
}
}
}
Response:
{
"data": {
"project": {
"releases": {
"nodes": [
{
"createdAt": "2020-09-22T00:22:27Z",
"releasedAt": "2020-09-22T00:22:27Z"
},
{
"createdAt": "2020-09-02T18:13:36Z",
"releasedAt": "2030-03-15T08:00:00Z"
},
{
"createdAt": "2020-09-02T17:02:55Z",
"releasedAt": "2020-09-02T17:02:55Z"
}
],
"pageInfo": {
"startCursor": "eyJpZCI6IjQ2In0",
"endCursor": "eyJpZCI6IjQzIn0"
}
}
}
}
}
With sort: CREATED_ASC
Query:
{
project(fullPath: "root/release-test") {
releases(first: 3, sort: CREATED_ASC) {
nodes {
createdAt
releasedAt
}
pageInfo {
startCursor
endCursor
}
}
}
}
Response:
{
"data": {
"project": {
"releases": {
"nodes": [
{
"createdAt": "2020-07-06T15:35:22Z",
"releasedAt": "2020-07-06T15:35:22Z"
},
{
"createdAt": "2020-07-09T19:20:06Z",
"releasedAt": "2020-07-09T19:20:06Z"
},
{
"createdAt": "2020-07-09T20:11:33Z",
"releasedAt": "2020-07-09T20:11:33Z"
}
],
"pageInfo": {
"startCursor": "eyJpZCI6IjEifQ",
"endCursor": "eyJpZCI6IjMifQ"
}
}
}
}
}
Related to #26413 (closed)
Edited by Nathan Friend