😮💨
graphql-Amplify (DynamoDB)のハマりどころ
AWS AmplifyCRUDで、Read, Update, Deleteのハマった点をメモします。
対象: graphql初心者
Read:
- dynamoDBでは、deleteは、trueフラグが付けられている(たぶん、目的としては、deleteされたデータを使う人がいるから)
- そこで、graphqlのqueryで、trueを除外してからデータをfetchすればいいと思ったのですが、それが出来ない。stackoverflowに同じ問題があって、出来ないとある。
https://stackoverflow.com/questions/72669627/how-do-i-prevent-deleted-records-from-appearing-in-my-aws-amplify-graphql-result - 結論としては、全部Readしてから、filterするということになる。なんかgraphqlの良さが半減...。
- しかもAmpifyでは、データのcontentのページでは、deleteがtrueであれば読み込まれない。だから、DynamoDBのデータを見ないと気づかないという可能性もある。
Update/Delete:
- UpdateとDeleteの両方とも、どのデータをUpdate/Deleteするか特定するのに、idだけでなく、versionデータも使う。
- このversionデーターは、updateするたびにdynamoDB側で更新される。
- そのため、データベースをupdateした後、返されたデータをローカル側でも常に書き換えておかないと、deleteする時にversionが合わない問題が起こる。
- 解決策としては、(1) graphqlにcrud操作した時に返ってきたデータを常にローカル側で書き換える。(2) update/deleteする時に、直前にDynamoDBのversion情報を読んで、そのversion情報でupdate/deleteを行う。
Discussion