public async Task <ActionResult <ResourceCollection <FolderResource> > > GetAsync(
            [FromQuery] int limit = 100, [FromQuery] string nextPageToken = "")
        {
            try
            {
                var query    = new ReadFoldersQuery(limit, nextPageToken);
                var response = await mediator.Send(query);

                var folders = response.Items.Select(x => new FolderResource(x)).ToArray();
                foreach (var folder in folders)
                {
                    folder.EnrichWithLinks(this);
                }

                var foldersCollection = new ResourceCollection <FolderResource>(folders, response.NextPageToken);
                foldersCollection.AddLinks(
                    new Link("self", this.Url.Link("GetFolders", new { Limit = limit, NextPageToken = nextPageToken })),
                    response.NextPageToken != null
                        ? new Link("next", this.Url.Link("GetFolders", new { Limit = limit, NextPageToken = response.NextPageToken }))
                        : new Link("next", null),
                    new Link("post", this.Url.Link("CreateFolder", null))
                    );

                return(foldersCollection);
            }
            catch (InvalidNextPageTokenRequestException)
            {
                return(BadRequest(new { Message = "The provided Next Page Token is invalid." }));
            }
        }