#71 DMMF Gatewayの実装とコマンド関数見直し ─ 個人開発者向けのサービスの開発記録

tyshgc
·

本日の作業

  • 今週のもくもく会 connpass作成

  • ✅ Prismaなどserver側のエラーパーサー実装

  • 🚴 日報・分報のcommand/event/policyのまとめ書く

    • ✅ commandの見直し

    • 🚴 event, policy

  • ✅ gateway層を作る

  • 日報プレゼンテーション層(Remix loader/action)との結合

  • 日報画面実装

  • サインインの実装

    • 認証画面実装

    • 認証ロジック実装(主にClient側)

    • Server側の認証チェック実装

    • Client側の認証チェック実装

  • 🛑 🚴 イベントストーミングとサービスブループリンの融合についてzennにまとめる

  • 🛑 🚴 Feature-Sliced Designについてzennにまとめる

Server Side Error Parser

prismaのエラーを捕捉しやすいようにcatchしたエラーをHttpStatusFailure型として返すユーティリティを実装しました。

コマンド関数の見直し

集約の見直し・バリデーション関数実装まで行ったのでコマンド関数を最適化していきます。

見直し後のコード。

  • command関数を高階関数にして、gatewayなどの依存を注入し、返り値の関数の引数でバリデーション関数からpipe関数内で渡されるバリデーションした日報の入力値とユーザ情報を合成したデータ。

  • そのバリデーション後のデータを元にgateway関数の「createDaily」関数で永続層=データベースへ保存します。

  • この永続層とのやり取りの前にビジネスロジックが存在していればその処理を入れます。日報は特にこれ以上のロジックは今のところないのでこのまま進めます。

  • データベース保存後の結果値をEitherのRightとして返します。pipe関数で次にフローがあればそこへこの値が渡っていきます。

  • また、この処理の中でエラーがあればcatchしてエラーをHttpStatusFailure型としてLeftとして返します。pipe関数側でchain関数でラップしておけばワークフローの処理を止めることもできます。

という感じで依存注入などしているのでテストも容易にできる様になっていると思います(まだテストコード書いてない、ていうか先に書けよって話ですが)。

以下が処理のフロー図。

Gatewayの実装

データベースや外部サービスへの変換層です。これはデータベースの日報リソーステーブルにレコードを追加するのでprismaを内包してます。

その他、メモ

  • 依存注入でテストはしやすいが、こういうコードに慣れてない人がメンバーにいると理解できないとかストレス溜まるそうなので注意が必要。

  • 関係ないけどちょい野暮用で5人くらいで1日鎌倉って条件の鎌倉のランチ・晩御飯のお店リストを作った。条件が色々あるのでこのセットだけど特になければまだリストアップしたい店は色々ある。でも大体は地元の人が行く系。

← #70 #72 →

@tyshgc
デザインファーム及びスタートアップ(上場)などを経てフリーランスとして、様々なスタートアップや大手企業の新規事業の立ち上げ期における事業設計・アプリケーションの設計・開発、サービスのUX分析とデザインとエンジニアリングの両軸でお手伝いさせていただいています。 現在、個人開発者向けの支援サービスを個人開発中。 X Account: @tyshgc