Khan/genqlient

Support for pagination when using relay pattern

Open

#357 创建于 2024年10月3日

在 GitHub 查看
 (3 评论) (0 反应) (0 负责人)Go (141 fork)github user discovery
enhancementhelp wantedneeds design

仓库指标

Star
 (1,310 star)
PR 合并指标
 (PR 指标待抓取)

描述

Describe the solution you'd like i would like the generated file to expose a function such as:

func queryPaged(
	ctx context.Context,
	client graphql.Client,
	pageSize int,
	pf func(T) error,
) error {
	var cursor *string
	resp, err := query(ctx, client, pageSize, cursor)
	if err != nil {
		return nil
	}

	for _, edge := range resp.X.Edges {
		if err := pf(edge.GetNode()); err != nil {
			return err
		}
	}
	return nil
}

The issue I have is that this needs to be generated as the "X" is the query endpoint so it's not fixed. One possibility is to add a generic method to the root query that returns the node inside "data", Then we can write a generic pager with interfaces and generics.

Describe alternatives you've considered Writing a pager function for every query, but that sort of defeats the purpose of the generator.

Additional context The relay connection paging pattern is described here: https://relay.dev/graphql/connections.htm and here: https://graphql.org/learn/pagination/.

贡献者指南