Я не могу получить и создать массив объекта (вопрос) с помощью GraphQL (gqlgen) mongo и prisma
Schema .graphql
scalar DateTime
# Queries (GET - POST)
type Query {
getUser(userId: ID!): User!
}
# Mutations (POST - PUT)
type Mutation {
createUser(email:String!,password:String!,phone:String!,profile:NewProfile!,preference:NewPreference!): User!
}
# Data models
type User {
id: ID!
email: String!
password: String!
phone: String!
step: Int
profile: Profile
preference: Preference
questions: [Question!]
createdAt: DateTime!
}
type Profile {
name: String!
age: Int!
gender: String!
birthDate: String!
}
type Preference{
minAge:Int!
maxAge:Int!
kmRange:Int!
gender :[String!]!
}
type Question{
qid:Int!
forMe:Int!
forOther:Int!
importance:Int!
}
# Data input models
input NewProfile {
name: String!
age: Int!
gender: String!
birthDate: String!
}
input NewQuestion{
qid:Int!
forMe:Int!
forOther:Int!
importance:Int!
}
input NewPreference{
minAge:Int!
maxAge:Int!
kmRange:Int!
gender :[String!]!
}
datamodel.prisma
type User {
id: ID! @id
email: String! @unique
password: String!
phone:String!
step:Int
profile: Profile
preference : Preference
questions : [Question!]
createdAt: DateTime! @createdAt
}
type Profile @embedded{
name: String!
age: Int!
gender: String!
birthDate:String!
}
type Preference @embedded{
minAge: Int!
maxAge: Int!
kmRange: Int!
gender: [String!]!
}
type Question @embedded{
qid: Int!
forMe: Int!
forOther: Int!
importance: Int!
}
schema.resolvers.go
func (r *userResolver) Questions(ctx context.Context, obj *prisma.User) ([]*prisma.Question, error) {
return r.Prisma.User(prisma.UserWhereUniqueInput{ID: &obj.ID}).Questions().Exec(ctx)
}
Как я и ожидал, эта функция должна вернуть массив объекта Question. Однако он просто возвращает объект Question.
Из сгенерированного prisma.go
func (instance QuestionExec) Exec(ctx context.Context) (*Question, error) {
var v Question
ok, err := instance.exec.Exec(ctx, &v)
if err != nil {
return nil, err
}
if !ok {
return nil, ErrNoResult
}
return &v, nil
}
func (instance QuestionExec) Exists(ctx context.Context) (bool, error) {
return instance.exec.Exists(ctx)
}
type QuestionExecArray struct {
exec *prisma.Exec
}
func (instance QuestionExecArray) Exec(ctx context.Context) ([]Question, error) {
var v []Question
err := instance.exec.ExecArray(ctx, &v)
return v, err
}
Метод Exec запускает функцию func (экземпляр QuestionExec) Выполните этот метод вместо func (экземпляр QuestionExecArray) Exec
Я также попытался установить структуру данных с помощью @relation(ссылка:INLINE) между пользователем и вопросом. Это снова дает мне ошибку Несовместимый тип возвращаемого значения, потому что первый тип возвращаемого значения - это массив указателя вопроса.
func (r *userResolver) Questions(ctx context.Context, obj *prisma.User) ([]*prisma.Question, error) {
return r.Prisma.User(prisma.UserWhereUniqueInput{ID: &obj.ID}).Questions().Exec(ctx)
}
func (instance QuestionExecArray) Exec(ctx context.Context) ([]Question, error) {
var v []Question
err := instance.exec.ExecArray(ctx, &v)
return v, err
}