🚀

シンServerpodを解読する 〜insert

2024/01/22に公開

Serverpod1.2 CyberPunk を使いこなせるか

待ちに待ったServerpodのUpgrade、
ほんとはAWSへのdeploy前に対応したかったけど、それは言っても始まらない。
考え方は二つ、Serverpod 1.1のままAWSでの作業を続けるか、
いったん立ち止まって、1.2に対応するか。
なんといっても1.2はDatabase周りの改変が大きい。
だから「開通しただけ」のAWSはいったん措いて、
1.2にちゃんと対応するのが、やっぱり肝要かなと思う。
https://www.youtube.com/watch?v=AmHZP6T1NdQ

細かいことを一つずつ

Serverpodを1.2に上げると同時に、Flutterも3.16.7に上げた。
VSCodeに拡張機能を入れる。
ServerpodInsightを1.2に上げる。

するとCodeが真っ赤になる。まあ、当然か。
よく見ると、赤いのは自動生成のfileだ。
触れないじゃん。
でも、赤いからには、私がつくったfileと不整合があるということだろう。
なのでそれを直していくしかありません。

add関数を修正する。

1.1で動いていたヤツ。

  Future<int> addPrincipal(
      Session session, Principal principal) async {
    await Principal.insert(session, principal);
    return principal.id!;
  }

1.2に対応したのがこちら。なんの情報もなくて、大苦戦でしたよ。

  Future<int> addPrincipal(
      Session session, Principal principal) async {
    var newPrincipal = await Principal.db.insertRow(session, principal);
    var newId = newPrincipal.id;
    return newId!;
  }

なんか、めんどくさくなってないか?
以前は「データを加えたら、新しいID教えるよ」だったのに、
今回は型が違うとかなんとかいろいろうるさくて、
このさりげない1行に気づくまで、だいぶ時間を溶かした。
The method will return the entire object with the id field set.
つまり、「データを加えたら、「全部」返すよ」らしい。
全部返されても、とりあえずここでほしいのはIDだけなんです!
なので、「全部から、IDだけちょうだい」の1行が増えた。
最適解かどうかわからないけど、とりあえずこれで行く。

さあ、この調子で一歩ずつ進みましょう

Flutter大学

Discussion