Slide 15
Slide 15 text
GraphQL (gqlgen) の実装例
func (r *queryResolver) Todos(ctx context.Context) ([]*gql.Todo, error) {
// 全てのTodoの取得
todos, err := model.ListAllTodos(ctx, s.db)
if err != nil { return nil, err }
return lo.Map(todos, func (todo *model.Todo, _ int) *gql.Todo {
return &gql.Todo{
ID: todo.ID,
Text: todo.Text,
Done: todo.Done,
// IDだけをTodo構造体に設定する
UserID: todo.UserID,
}
}), nil
}
func (r *todoResolver) User(ctx context.Context, obj *gql.Todo) (*gql.User, error) {
// Todoから受け取ったUserIDを使って取得
user, err := model.GetUser(ctx, s.db, obj.UserID) // <- ここが問題!
if err != nil { return nil, err }
return &gql.User{
ID: user.ID,
Name: user.Name,
}, nil
}