現状
graphql初心者です。現在、下記のリンク記事の手順に従って学習しております。
https://qiita.com/koinori/items/17272aee571b15d4611e
とりあえずApollo + Sequelize + TypeGraphQLを使って、APIは構築できました。
構築したAPIでquery(参照)とmutation(create)は、問題なく実行できたのですが、updateだけエラーがでており、できていない。
実現したいこと
エラーを解決し、データの更新をできるようにし、graphqlAPIを構築したい。
クエリパラメータにidが渡っていないとは思うのですが、どう記述したらよいかわかっていないです。
まだまだ、graphqlについてわかっていないことが多いので、アドバイス含めご意見いただけますと幸いです。
コード
クエリ
mutation updateUser ($userInput: UpdateUserInput) { updateUser(data: $userInput) { id username password } } // query viriables { "userInput":{"id": 1, "username": "suzuki", "password”:”password”} }
// エラーメッセージ { "error": { "errors": [ { "message": "Variable \"$userInput\" of type \"UpdateUserInput\" used in position expecting type \"UpdateUserInput!\".", "locations": [ { "line": 1, "column": 21 }, { "line": 2, "column": 20 } ], "extensions": { "code": "GRAPHQL_VALIDATION_FAILED", "exception": { "stacktrace": [ "GraphQLError: Variable \"$userInput\" of type \"UpdateUserInput\" used in position expecting type \"UpdateUserInput!\".", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/validation/rules/VariablesInAllowedPosition.js:59:35)", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:345:29)", " at Object.leave (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:395:21)", " at visit (/Users/iraira/mil/typegraphql/node_modules/graphql/language/visitor.js:242:26)", " at Object.validate (/Users/iraira/mil/typegraphql/node_modules/graphql/validation/validate.js:73:24)", " at validate (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:233:34)", " at Object.<anonymous> (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:119:42)", " at Generator.next (<anonymous>)", " at fulfilled (/Users/iraira/mil/typegraphql/node_modules/apollo-server-core/dist/requestPipeline.js:5:58)", " at processTicksAndRejections (internal/process/task_queues.js:95:5)" ] } } } ] } }
typescript
1// リゾルバー 2// resolvers/user.ts 3import { 4 Resolver, 5 Query, 6 InputType, 7 Field, 8 Arg, 9 Ctx, 10 Mutation, 11} from "type-graphql"; 12import { User } from "../models/user"; 13import { Context } from "apollo-server-core"; 14 15@InputType({ description: "New User Argument" }) 16class AddUserInput implements Partial<User> { 17 @Field() 18 username!: string; 19 @Field() 20 password!: string; 21} 22 23@InputType({ description: "Update User Argument" }) 24class UpdateUserInput implements Partial<User> { 25 @Field() 26 id!: string; 27 @Field() 28 username!: string; 29 @Field() 30 password!: string; 31} 32 33@Resolver() 34export class AppResolver { 35 @Query((returns) => User, { nullable: true }) 36 async user(@Arg("id") id: string): Promise<User | null> { 37 return User.findByPk(id); 38 } 39 40 @Mutation((returns) => User) 41 async addUser( 42 @Arg("data") newUser: AddUserInput, 43 @Ctx() ctx: Context 44 ): Promise<User> { 45 return User.create(newUser); 46 } 47 48 @Mutation((returns) => User!) 49 async updateUser( 50 @Arg("data") updateUser: UpdateUserInput, 51 @Ctx() ctx: Context 52 ): Promise<User | null> { 53 return User.update(updateUser, { 54 where: { 55 id: updateUser.id, 56 }, 57 }).then((res) => { 58 console.log(res); 59 return User.findByPk(updateUser.id); 60 }); 61 } 62}
typescript
1// スキーマ 2// models/user.ts 3import { ObjectType, Field, ID } from "type-graphql"; 4import { Model, UUID, UUIDV1, STRING } from "sequelize"; 5import { sequelize } from "../db/conf"; 6 7@ObjectType() 8export class User extends Model { 9 @Field((type) => ID) 10 public id!: string; 11 @Field() 12 public username!: string; 13 @Field() 14 public password!: string; 15} 16 17User.init( 18 { 19 id: { 20 type: UUID, 21 defaultValue: UUIDV1, 22 allowNull: false, 23 primaryKey: true, 24 }, 25 username: { 26 type: STRING, 27 allowNull: false, 28 }, 29 password: { 30 type: STRING, 31 allowNull: false, 32 }, 33 }, 34 { 35 sequelize, 36 modelName: "user", 37 } 38); 39
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。