Я не могу получить и создать массив объекта (вопрос) с помощью 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
}

0 ответов

Другие вопросы по тегам