99designs / 99designs/gqlgen

End resolvers - ideas?

Đang mở
#2,613 2 bình luận 1 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Go
Star
10.8k
Fork
1.3k
Merge trung bình
2 ngày 36 phút
Pull request đã merge (30 ngày)
26

Mô tả

Hi all, I have an interestng problem that I cannot easily solve. I'll use the example from gqlgen to explain it.

We have list of TODOs, users are loaded on-demand (see [here](https://gqlgen.com/getting-started/#dont-eagerly-fetch-the-user)). In our workflow, we always load users concurrently with dataloaders, it's super useful.

Let's say that these users have also a status flag and we don't want to show TODOs of users that are disabled.

How can we do that?

The problem is that we can handle and change TODO slice in `Todos(ctx context.Context)` before TODOs are returned to gqlgen. But we know nothing about Users there yet. gqlgen takes those TODOs, glues User to every one and returns the result. We could load User data in Todos() function, but this would load them seqentially and not concurrently like dataloader does.

If gqlgen had an end resolver (of final resolver, or whatever name) which would be run after field resolvers are done, we could then filter TODOs based on those User objects.

----

This would tell gqlgen to create an "end" resolver:

```
models:
ID:
...
Todo:
fields:
user:
resolver: true
resolver: true // <-- this
```
an generate a method something like:

```
func (r *todoResolver) End(ctx context.Context, obj []*model.Todo) ([]*model.Todo, error) {
// do whatever we need with TODO and it's User
return obj, nil
}
```

Thoughts?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Issue này thảo luận về việc thêm một 'end resolver' vào quá trình sinh code của gqlgen. Hãy bắt đầu bằng cách xem xét codebase của gqlgen, đặc biệt là logic sinh model và nối resolver. Hãy tìm nơi các field resolvers được sinh ra và cách result pipeline được cấu trúc. Việc hiểu pattern dataloader hiện có và cách các resolver được nối chuỗi là rất quan trọng. Mục tiêu là đề xuất một thiết kế cho bước xử lý cuối có thể lọc hoặc biến đổi một danh sách sau khi tất cả field resolvers đã hoàn tất.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
go, graphql
Lĩnh vực
api, backend
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.