nested model を操作する[aws-mobile-appsync-sdk-android]
環境はこれの最後のところから
mutation CreatePost(
$input: CreatePostInput!
) {
createPost(input: $input) {
Id
CreatedAt
Comment {
Id
Message
}
}
}
こういうような model があった場合に、自動生成されるコードから Comment
部分、つまり nested な部分の情報が落ちる
外部の型を参照しているとも言うかもしれない
似た症状な気はする
maxDepth
を 10 くらいにしてみようか
(今は 3)
amplify statements
で
Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
って怒られた
key 入れ直すのはどこからやるんだろうか
aws configure
は微妙に挙動が違った
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_DEFAULT_REGION=XXXXXXXXXXXX
環境変数で読み込ませると通った
amplify codegen configure
これで
? Enter maximum statement depth [increase from default if your schema is deeply nested] 10
10 にした
amplify codegen
# これは一応
amplify codegen types
これで、情報量は増えた。
ただ、抜けてたと思ってたところに変化はなかった
query は増えたけど
mutate は増えなかった
build したら生成後のところに増えてた…?
呼び出して予測で出るか見てみる
builder のところにはでてこない
nested なところは 別で クエリ発行しないといけない…?
aws console で見てみても、nested な部分は input に含まれてなかった
CreatePostInput
には Comment
の記述がない
CreatePostMutation
には Comment
の記述がない
CreatePostMutation.CreatePost
には Comment
の記述がある
作成したい時はどうすればええんや
client.mutate(
AddPostMutation.builder()
.input(CreatePostInput.builder()
.title(title)
.author(author)
.url(url)
.content(content)
.ups(1)
.downs(0)
.build()
)
.build(),
new AddPostMutation.Data(new AddPostMutation.CreatePost(
"Post", "", "", "", "", "", null, null, 0
))
)
.enqueue(callback);
これは何をやってるのか
input を渡した後に create用のmodel も渡してる
mutate(@Nonnull Mutation<D, T, V> mutation, @Nonnull D withOptimisticUpdates, boolean isRetry)
これか
builder のところで埋まっていなければ こっちで埋める的な?
楽観アップデートの意味的には上書きアップデートかな
ただ、わざわざそんな挙動にはしなさそう
ありなしで保存される中身を見てみる
なしの場合、当たり前だけど nest してる部分には何も入らない
ありでやってみたけど、なしのときと変化がない。
やり方が悪いのか何なのか
mutate のことは書いてない
appsync client は何をするの?への回答
appsync client は何をするの?への回答
同じようなことをしてるコードが見つけられない
未解決
再現コード書いて github の issue に起票するかな…
schemq の input の定義を変更して
$ amplify pull --restore
$ amplify codegen
すると
android/app/src/main/graphql/schema.json
ここに更新が入って、
その状態で build したら
nested の部分の class が更新された
それを使うと nested の部分も mutate 実行できた
{
"name": "Comment",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
"name": "Comment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
こういうのが増えてた
input CreatePostInput {
Id: String!
TimeStampMs: Float!
Comment: CommentInput
}
appsync の schema 定義はこんな感じで書けばいけた