このディレクトリには、ZEONアプリケーションのデータベースを構築するためのSQLスクリプトが含まれています。
ZEONは、ZEN大学のドメインのGoogleアカウントユーザーのみが利用できるクローズドなZEN大学の授業評価レビューサイトです。このデータベースは、科目情報、評価、通報、「役に立った」などのデータを管理します。
- Supabaseプロジェクトが作成済みであること
- Supabaseプロジェクトへの管理者アクセス権があること
- get-subjects MCPサーバーへのアクセス権があること(科目データの取得に使用)
- Supabaseダッシュボードにログインします。
- 「SQL Editor」を開きます。
- 以下のSQLスクリプトを順番に実行します:
01_create_tables.sql02_setup_rls_policies.sql03_initial_data.sql04_auth_hooks_setup.sql
- 必要に応じて、追加の科目データを登録します(後述の「科目データの登録方法」を参照)。
このスクリプトは、ZEONアプリケーションに必要なテーブルを作成します。以下のテーブルが含まれています:
admins:管理者情報banned_users:BANされたユーザー情報subjects:科目情報evaluations:評価情報invisible_evaluations:非表示評価情報reports:通報情報usefuls:「役に立った」情報
また、各テーブルに必要なインデックスも作成します。
このスクリプトは、Row Level Security(RLS)ポリシーを設定します。これにより、各テーブルに対するアクセス制御が実現されます。
主なポリシーは以下の通りです:
- 管理者テーブル:管理者のみが閲覧・編集可能
- BANされたユーザーテーブル:管理者は全てのレコードを閲覧可能、ユーザーは自分自身のレコードを閲覧可能、編集は管理者のみ可能
- 科目テーブル:全ての認証ユーザーが閲覧可能、編集は管理者のみ可能
- 評価テーブル:全ての認証ユーザーが閲覧可能、投稿者自身のみが編集・削除可能
- 非表示評価テーブル:管理者のみが閲覧・編集可能
- 通報テーブル:投稿者自身が自分の通報を閲覧・編集・削除可能、管理者は全ての通報を閲覧・編集・削除可能
- 役に立ったテーブル:全ての認証ユーザーが閲覧可能、投稿者自身が自分の「役に立った」を追加・編集・削除可能
このスクリプトは、初期データを投入します。以下のデータが含まれています:
- 管理者データ:吉村総一郎(ID: 1bebff21-b3a4-4498-9b2a-2a93cc75247f)
このスクリプトは、Auth Hooks(認証フック)を設定します。以下の機能が含まれています:
- ユーザーサインアップ時に実行されるトリガー関数
- zen.ac.jpドメイン以外のメールアドレスを持つユーザーを自動的にBANするロジック
- 既存のユーザーに対する遡及的なチェック機能
- banned_usersテーブルとauth.usersテーブルの内容確認
このスクリプトにより、zen.ac.jpドメイン以外のGoogleアカウントでサインアップしたユーザーは自動的にBANリスト(public.banned_users)に追加され、アカウントが無効化されます。
ZEN大学のすべての科目データを登録するには、以下の手順を実行します:
-
sql/03_initial_data_generator.jsスクリプトを実行します。cd c:/Users/sifue/workspace/zeon node sql/03_initial_data_generator.js -
スクリプトは、ZEN大学シラバス API サーバーから科目の詳細情報を取得し、年次ごとにSQLファイルを生成します。
sql/03_initial_data_subjects_grade1.sql(1年次の科目)sql/03_initial_data_subjects_grade2.sql(2年次の科目)sql/03_initial_data_subjects_grade3.sql(3年次の科目)sql/03_initial_data_subjects_grade4.sql(4年次の科目)
-
生成されたSQLファイルをSupabaseプロジェクトで実行します。
- 「特記事項参照」と書かれた科目は除外してください。
- 特記事項参照(2025年度) (1年次)
- 特記事項参照(2026年度) (2年次)
- 特記事項参照(2027年度) (3年次)
- 特記事項参照(2028年度) (4年次)
- このスクリプトは、既存のテーブルがある場合は作成をスキップします(
IF NOT EXISTS)。 - 管理者データと科目データは、既存のデータがある場合は更新します(
ON CONFLICT ... DO UPDATE)。 - RLSポリシーは、既存のポリシーがある場合は上書きします。同じ名前のポリシーが既に存在する場合は、先に削除する必要があります。
- BANされたユーザーは、評価の閲覧・投稿ができません。
- 非表示評価は、一般ユーザーには表示されません。