Deno と Supabase で沼った話

自己紹介

Name 大杉太郎(たろさん,たろ先生)
Age 1987 年生まれ
Place 茨城県 -> 北海道 -> 東京都 -> 福岡県
Career 講師,開発(Laravel メイン)
Like1 Deno,Rust,📚,✈️ 🚃 🚌,🚮
Like2 🥃, 🍺, 🍷
twitter @taro_osg
                  _人人人人人人人人人人人人人人人_
                  > Deno(Fresh)はいいぞ!! <
                   ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

もくじ

  • つくったもの

  • 使った技術

  • まとめ

つくったもの

ジーズでは課題を提出する必要がある!

提出用のシステムをつくろう!

やりたいこと

  • ブラウザから提出ができる(受講生)

  • 提出した内容を確認できる(受講生)

  • 提出された内容を評価できる(中の人)

使った技術

(´・ω・`;)ウーン…??

(*`・ω・´) Deno やな!

(*`・ω・´) 最近出た Fresh を使うぞ!

(´・ω・`;) DB は…

(*`・ω・´) Supabase や!

(*`・ω・´) 中身 Postgres やし余裕やろ(慢心)

実装

ルーティングつくって(つくってない)

ファイルベースでいい感じにやってくれる

.
├── admin
│   ├── [id].tsx
│   ├── _middleware.ts
│   └── index.tsx
├── index.tsx
└── posts
    ├── [id].tsx
    ├── _middleware.ts
    ├── create.tsx
    ├── fantastic.tsx
    └── index.tsx

(ディレクトリごとの middleware 設置良き)

画面作って...

SSR のコンポーネントで作成する

import { PageProps } from "$fresh/server.ts";

export default function Greet(props: PageProps) {
  return <div>Hello {props.params.name}</div>;
}

(*`・ω・´) とりあえずデプロイするか

(*`・ω・´) う,動かん...

—30 分後—

(´・ω・`) モジュールの URL 指定がおかしかった

データ入れる処理作って...

データ全部もってくる処理つくって...

(*`・ω・´) Supabase の公式ライブラリで余裕や!

テーブル連携!

const { data, error } = await supabase
  .from("countries")
  .select(`name, cities(name)`);

(カラム名とか文字列なのが若干キモいな..)

(*`・ω・´) さて,データの並び替えが必要やな!

order()を使う

const { data, error } = await supabase
  .from("cities")
  .select("name", "country_id")
  .order("id", { ascending: false });

今回は親テーブルの値を

子テーブルのカラムで並び替えたい

(*`・ω・´) fmfm…

const { data, error } = await supabase
  .from("countries")
  .select(`name, cities(name)`)
  .order("name", { foreignTable: "cities", ascending: false });

(´・ω・`;) 順番変わってなくね??

(´・ω・`;) 修正修正...

— 1 時間後 —

(´・ω・`;;) なんでや???

(´・ω・`;;) ん??

Ordering on foreign tables
doesn't affect the ordering of the parent table.
外部テーブルでの順序付けは、
親テーブルの順序付けに影響しない。(DeepLによる翻訳)

(´・ω・`;;) あああああああああああ

並び替わらないのは「仕様」

              _人人人人人人人人人人人人人人_
              > ドキュメントを読め!!! <
               ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

(*`・ω・´) クソがあああああああ!!!

力こそパワー

posts.sort((a, b) => {
  if (a.class > b.class) return -1;
  if (a.class < b.class) return 1;
  if (a.work > b.work) return -1;
  if (a.work < b.work) return 1;
  if (a.student_number > b.student_number) return 1;
  if (a.student_number < b.student_number) return -1;
  return 0;
});

やれやれだぜ

まとめ

Deno(Fresh)はいいぞ!

Supabase は

外部テーブルキーだと並び替わらないよ!

JS でなんとかすればなんとかなるよ!

              _人人人人人人人人人人人人人人_
              > ドキュメントを読め!!! <
               ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄