hackers.pub 館

書庫(models)

ja· en· ko
はじめての人へ投稿やアカウントなど、データの形と保存を決めている台帳の部屋です。

連合SNSの世界ぜんぶ——投稿、フォロー、ブロック、投票、通報——が、54枚の台帳にどう収まるかを見られます。自分で連合アプリを作る人にとって、この書庫は間取りの参考書です。

芯にあるのはrunInTransaction()という小さな作法。すでにトランザクションの中なら乗り合い、外なら新しく開く。館じゅうの棟が、この一つの作法に寄りかかっています。

見どころ

  • 公開範囲はpgEnum+TS unionの両建て: public / unlisted / followers / direct / none
  • 概念ごとにファイルとテストが対(post.ts/post.test.ts)。しかもlifecycle・remote・draftと、暮らしの場面別のテストまで分けてある
  • relations.tsの関係図を、graphqlの照会室(Pothos drizzle)もこの書庫も、同じ一枚で共有する

経文の一節

export const POST_VISIBILITIES = [
  "public",
  "unlisted",
  "followers",
  "direct",
  "none",
] as const;

export const postVisibilityEnum = pgEnum("post_visibility", POST_VISIBILITIES);
models/schema.ts L31-L39— 公開範囲の五段階が、台帳の言葉で

間取り

models/schema.ts
54卓の台帳とpgEnumたち
models/db.ts
Database/Transactionの型とrunInTransaction
models/relations.ts
台帳どうしの関係図
models/post.ts
代表の一冊。投稿の作成/同期/リモート取り込み

となりの部屋

そとへのリンク