😮‍💨

graphql-Amplify (DynamoDB)のハマりどころ

2023/02/23に公開

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