# データベース

[ER図](https://drive.google.com/file/d/1kLr9kZwfxK5FVgqm2ukMoEqyGS6WRgEV/view?usp=sharing)

## migration

alembicで記述されたmigrationスクリプト。

### 利用方法

```bash
# 最新までアップグレード
cd database/migration
alembic upgrade head

# ローカル環境で利用できるショートカット
migration
```

※ 接続情報は環境変数で指定

※ クラウド環境で利用する場合は、ネットワークが許可されている場所(e.g. [同VPC内で構築したCodebuild](/infra/stage/README.md#マイグレーション))から実行すること

### オプション引数

`mode`と`revision`が存在する。
ユースケースとその組み合わせは以下の通り。

| ユースケース | mode | revision |
| --- | --- | --- |
| 最新までアップグレード | upgrade | head |
| 指定したrevisionまでアップグレード | upgrade | ${revision名} |
| 初期状態までダウングレード | downgrade | base |
| 指定したrevisionまでダウングレード | downgrade | ${revision名} |
| 一つ前のrevisionまでダウングレード | downgrade | -1 |

### テーブル追加時の注意点

- `tenant_id` カラムを持つテーブルを新規追加した場合、そのテーブルに対して RLS（Row Level Security）が有効化され、`tenant_isolation_policy` が設定されていることを確認する。
- RLS の設定は `database/migration/versions/` 配下に `create_policy` パターンに倣ったマイグレーションファイルとして追加する。

## fixture

csvで記述した動作確認用、シナリオテスト用データを投入するスクリプト。

### 利用方法

```bash
# 動作確認用のデータを投入
cd database/fixture
python fixture.py --csv-dir integrationtest

# ローカル環境で利用できるショートカット
fixture
```

※ 接続情報は環境変数で指定

※ クラウド環境で利用する場合は、ネットワークが許可されている場所(e.g. [同VPC内で構築したCodebuild](/infra/stage/README.md#データ投入))から実行すること

### オプション引数

`csv-dir`に、利用したいデータが入ったディレクトリ名を指定する。

| ディレクトリ名 | 用途 |
| --- | --- |
| integrationtest | 最低限の動作確認ができるデータ |
