node.jsgraphqlprismaapollo-serverprisma-graphql

Order result resolved via resolver in graphql + apollo server + nodejs


I am trying to order an array returned by resolver in GraphQL. I can only think of way of ordering data using DB Query, but how can we order data that GraphQL resolves using its resolver functions?

Below is my Query resolver:

getAllNotifications: (
      _parent,
      _args: { authorId: string },
      context: Context
    ) => {
      return context.prisma.blog.findMany({
        where: {
          authorId: _args.authorId,
        },
        orderBy: {
          created_at: "desc",
        },
      });
    },

And my query:

query Query($authorId: String) {
  getAllNotifications(authorId: $authorId) {
    title
    comment {
      id
      created_at
    }
  }
}

And result:

{
  "data": {
    "getAllNotifications": [
      {
        "title": "First Ride! ",
        "comment": [ <--- I am trying to order this comment array using created_at date
          {
            "id": "cl8afqaqx001209jtxx7mt5h6",
            "created_at": "2022-09-20T16:53:07.689Z"
          },
          {
            "id": "cl8agiq71001509l27or7oxyd",
            "created_at": "2022-09-20T17:15:14.077Z"
          },
          {
            "id": "cl8ahmvrm003109l8dp684bn6",
            "created_at": "2022-09-20T17:46:27.538Z"
          },
          {
            "id": "cl99kj24p002609iajdbpycg0",
            "created_at": "2022-10-15T06:59:24.169Z"
          }
        ]
      }
    ]
  }
}

I didn't found anything in Graphql docs regarding ordering data returned by resolver


Solution

  • GraphQL doesn't have functions for selection and ordering, those are jobs that resolvers must do.

    Add a resolver for comment that sorts the comment array. Your existing sort just sorts based on the created_at date of the post.