End resolvers - ideas?
- 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
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