---
# System prepended metadata

title: DB Scheme
tags: [MOZICA]

---

# DB Scheme

- users
- profiles
- admins
- invitations
- organizations
  - owners (->organizers)
  - usages
      - rooms
- groups
- folders
- rooms
- speeches
- phrases

## users

ユーザーのドキュメント

| Field      |   Type    | Note               |
| ---------- |:---------:| ------------------ |
| name       |  string   | ユーザー名         |
| email      |  string   | メールアドレス     |
| admin      |  boolean  | 管理者フラグ       |
| oid        |  string   | 組織ID             |
| owner      |  boolean  | 組織オーナーフラグ |
| createTime | Timestamp | 登録日時           |

- 非公開ユーザー情報
- 本人とオーナーがアクセスできる
- ここに設定された値の一部がカスタムクレームとして設定される

## profiles

プロファイルのドキュメント

| Field |  Type   | Note               |
| ----- |:-------:| ------------------ |
| name  | string  | ユーザー名         |
| admin | boolean | 管理者フラグ       |
| oid   | string  | 組織ID             |
| owner | boolean | 組織オーナーフラグ |

- 公開ユーザー情報
- 誰でもアクセスできる
- usersを更新するとコピーされる

## claims

カスタムクレーム更新確認のドキュメント

| Field      |   Type    | Note     |
| ---------- |:---------:| -------- |
| updateTime | Timestamp | 更新日時 |

- カスタムクレームが更新されるとこのドキュメントが更新される

## organizations

組織のドキュメント

| Field   |  Type  | Note                     |
| ------- |:------:| ------------------------ |
| name    | string | 組織名                   |
| plan    | number | 契約中の時間（秒）       |
| limit   | number | 現在の制限時間（秒）     |
| amount  | number | 現在の利用時間（秒）     |

- `plan`が`undefined`の場合はトライアルとする
- `plan`は月初に`limit`として適用される
- `plan`が0で未契約

## organizations > usages

利用量のドキュメント

| Field  |  Type  | Note                 |
| ------ |:------:| -------------------- |
| limit  | number | 当月の制限時間（秒） |
| amount | number | 当月の利用時間（秒） |

- idは年月`yyyy-mm`とする
- トライアルのidは`trial`とする
- UTC時間で処理する

## organizations > usages > rooms

収録ごとの利用量のドキュメント

| Field     |   Type    | Note                     |
| --------- |:---------:| ------------------------ |
| amount    |  number   | 直近を除く収録時間（秒） |
| startTime | timestamp | 直近の収録開始時間       |
| endTime   | timestamp | 直近の収録終了時間       |

## folders

フォルダ

| Field    |   Type   | Note             |
| -------- |:--------:| ---------------- |
| name     |  string  | フォルダ名       |
| parent   |  string  | 親フォルダID     |
| oid      |  string  | 組織ID           |
| owner    |  string  | 所有者ID         |
| creator  |  string  | 作成者ID         |
| grantees | string[] | 権限を持つ者のID |

### アクセス制限

- 制限が変更されると配下のフォルダと収録にも同じ制限が適用される
- ただし既に別の制限が適用されていた場合は無視される
- 制限がかけられていない状態を`[""]`とする

フォルダ`A`に制限`n`が設定されている状態を`A(n)`と表すとすると

- 1: a,b,c
- 2: a,b
- 3: a,c
- 4: d

初期状態
`A(0)>B(0)>C(0)>D(0)`

Cに制限`1`を適用（同じ制限であるDにも適用される）
`A(0)>B(0)>C(1)>D(1)`

Cに制限`2`を適用（同じ制限であるDにも適用される）
`A(0)>B(0)>C(2)>D(2)`

Aに制限`3`を適用（Bには適用されるがC以下には適用されない）
`A(3)>B(3)>C(2)>D(2)`

`E(4)>F(5)`をBへ移動
`A(3)>B(3)>E(3)>F(5)`

`G(4)>H(4)`をBへ移動
`A(3)>B(3)>G(3)>H(3)`

## speechs

発言

| Field        |    Type     | Note               |
| ------------ |:-----------:| ------------------ |
| languageCode |   string    | 言語コード         |
| transcript   |   string    | 音声文字変換結果   |
| words        |   Word[]    | 単語ごとの変換結果 |
| translation  | Translation | 翻訳               |
| duration     |   number    | 発話の長さ         |

Word

|   Field    | Type   | Note     |
|:----------:| ------ | -------- |
|   spoken   | string | 発話     |
| transcript | string | 文字変換 |

Translation

|     Field      | Type   | Note     |
|:--------------:| ------ | -------- |
| [languageCode] | string | 翻訳結果 |

## phrases

語句

| Field      |  Type  | Note     |
| ---------- |:------:| -------- |
| spoken     | string | 発話     |
| transcript | string | 文字変換 |
| oid        | string | 組織ID   |
| owner      | string | 所有者ID |
| creator    | string | 作成者ID |

###### tags: `MOZICA`
