---
# System prepended metadata

title: Untitled

---



## クラス図

```plantuml

skinparam classAttributeIconSize 0
left to right direction

skinparam class {
ArrowColor black
}

entity 利用ユーザー{
    名前
    メールアドレス
    ユーザーID
    ログインID
    ログインパスワード
    ログイン状態
    作成日時
    アクティブ状態
    最終操作日時
}

entity 代表ユーザー{
    ワークスペースID
}

entity 招待ユーザー{
    ユーザーID
    メールアドレス
    チャンネルID
    作成日時
}

package ユーザー情報 <<Database>> {
}



package "Infrastructure" #ffa500{
    class 利用ユーザーアクティブ状態管理リポジトリ{
        アクティブ状態取得(ユーザー: 利用ユーザー):string
        アクティブ状態更新(ユーザー: 利用ユーザー):void
    }
    class 利用ユーザー管理リポジトリ{
        利用ユーザー作成(ユーザー: 利用ユーザー):void
        利用ユーザー削除(ユーザーID :uuid):void
        利用ユーザー更新(ユーザー: 利用ユーザー):void
        利用ユーザー取得(ユーザーID :uuid):利用ユーザー
        ログイン(ユーザー名 :string, パスワード: string):void
        ログアウト(ユーザーID :uuid):void
    }
    class 代表ユーザー管理リポジトリ{
        代表ユーザー作成(ユーザー: 代表ユーザー):void
        代表ユーザー削除(ユーザーID :uuid):void
        代表ユーザー取得(ユーザーID :uuid):代表ユーザー
    }
    class 招待ユーザー管理リポジトリ{
        招待ユーザー作成(ユーザー: 招待ユーザー):void
        招待ユーザー削除(ユーザーID :uuid):void
        招待ユーザー取得(ユーザーID :uuid):招待ユーザー
    }
}



package "Domain Service"{
    interface 利用ユーザーアクティブ状態管理リポジトリIF{
        アクティブ状態取得(ユーザー: 利用ユーザー):string
        アクティブ状態更新(ユーザー: 利用ユーザー):void
    }
}

package "Domain Service"{
    interface 利用ユーザー管理リポジトリIF{
        利用ユーザー作成(ユーザー: 利用ユーザー):void
        利用ユーザー削除(ユーザーID :uuid):void
        利用ユーザー更新(ユーザー: 利用ユーザー):void
        利用ユーザー取得(ユーザーID :uuid):利用ユーザー
        ログイン(ユーザー名 :string, パスワード: string):void
        ログアウト(ユーザーID :uuid):void
    }
}

package "Domain Service"{
    interface 代表ユーザー管理リポジトリIF{
        代表ユーザー作成(ユーザー: 代表ユーザー):void
        代表ユーザー取得(ユーザーID :uuid):代表ユーザー
        代表ユーザー削除(ユーザーID :uuid):void
    }
}
package "Domain Service" #b0c4de{
    interface 招待ユーザー管理リポジトリIF{
        招待ユーザー作成(ユーザー: 招待ユーザー):void
        招待ユーザー取得(ユーザーID :uuid):招待ユーザー
        招待ユーザー削除(ユーザーID :uuid):void
    }
}
利用ユーザー管理リポジトリIF <|..利用ユーザー管理リポジトリ
利用ユーザー管理リポジトリ-->利用ユーザー
代表ユーザー--|>利用ユーザー

代表ユーザー管理リポジトリIF <|..代表ユーザー管理リポジトリ
代表ユーザー管理リポジトリ-->代表ユーザー

利用ユーザーアクティブ状態管理リポジトリIF <|..利用ユーザーアクティブ状態管理リポジトリ
利用ユーザーアクティブ状態管理リポジトリ-->利用ユーザー

招待ユーザー管理リポジトリIF <|..招待ユーザー管理リポジトリ
招待ユーザー管理リポジトリ-->招待ユーザー

利用ユーザー管理リポジトリ-->ユーザー情報
代表ユーザー管理リポジトリ-->ユーザー情報
招待ユーザー管理リポジトリ-->ユーザー情報


package "Application Service"{
    class アクティブ状態取得サービス{
        アクティブ状態を取得する(ユーザー: 利用ユーザー):string
    }
    class アクティブ状態更新サービス{
        アクティブ状態を更新する(ユーザー: 利用ユーザー):void
    }
}

package "Application Service"{
    class 利用ユーザー作成サービス{
        利用ユーザーを作成する(ユーザー: 利用ユーザー):void
    }
    class 利用ユーザー削除サービス{
        ユーザーを削除する(ユーザーID :uuid):void
    }
    class 利用ユーザー更新サービス{
        ユーザーを更新する(ユーザー: ユーザー):void
        ユーザーをログインする(ユーザー名 :string, パスワード: string):void
        ユーザーをログアウトする(ユーザーID :uuid):void
    }
    class 利用ユーザー取得サービス{
        利用ユーザーを取得する(ユーザーID :uuid):利用ユーザー
    }
}
package "Application Service"{
    class 代表ユーザー作成サービス{
        代表ユーザーを作成する(ユーザー: 代表ユーザー):void
    }
    class 代表ユーザー削除サービス{
        代表ユーザーを削除する(ユーザーID :uuid):void
    }
    class 代表ユーザー更新サービス{
        代表ユーザーを更新する(ユーザー: 代表ユーザー):void
    }
    class 代表ユーザー取得サービス{
        代表ユーザーを取得する(ユーザーID :uuid):代表ユーザー
    }
}

package "Application Service" #afeeee{
    class 招待ユーザー作成サービス{
        招待ユーザーを作成する(ユーザー: 招待ユーザー):void
    }
    class 招待ユーザー削除サービス{
        招待ユーザーを削除する(ユーザーID :uuid):void
    }
    class 招待ユーザー取得サービス{
        招待ユーザーを取得する(ユーザーID :uuid):招待ユーザー
    }
}

skinparam class {
ArrowColor Black
}
アクティブ状態取得サービス-->利用ユーザーアクティブ状態管理リポジトリIF
アクティブ状態更新サービス-->利用ユーザーアクティブ状態管理リポジトリIF

skinparam class {
ArrowColor SeaGreen
}

利用ユーザー作成サービス-->利用ユーザー管理リポジトリIF
利用ユーザー削除サービス-->利用ユーザー管理リポジトリIF
利用ユーザー更新サービス-->利用ユーザー管理リポジトリIF
利用ユーザー取得サービス-->利用ユーザー管理リポジトリIF

skinparam class {
ArrowColor Red
}
代表ユーザー作成サービス-->代表ユーザー管理リポジトリIF
代表ユーザー削除サービス-->代表ユーザー管理リポジトリIF
代表ユーザー更新サービス-->代表ユーザー管理リポジトリIF
代表ユーザー取得サービス-->代表ユーザー管理リポジトリIF

skinparam class {
ArrowColor Blue
}
招待ユーザー作成サービス-->招待ユーザー管理リポジトリIF
招待ユーザー削除サービス-->招待ユーザー管理リポジトリIF
招待ユーザー取得サービス-->招待ユーザー管理リポジトリIF


package "Presentation"{
    class 利用ユーザー管理サービス{
        利用ユーザーを作成する(ユーザー: 利用ユーザー):void
        利用ユーザーを削除する(ユーザーID :uuid):void
        利用ユーザーを更新する(ユーザー: 利用ユーザー):void
        利用ユーザーを取得する(ユーザーID :uuid):利用ユーザー
        利用ユーザーをログインする(ユーザー名 :string, パスワード: string):void
        利用ユーザーをログアウトする(ユーザーID :uuid):void
    }
}
package "Presentation"{
    class 代表ユーザー管理サービス{
        代表ユーザーを作成する(ユーザー: 代表ユーザー):void
        代表ユーザーを削除する(ユーザーID :uuid):void
        代表ユーザーを更新する(ユーザー: 代表ユーザー):void
        代表ユーザーを取得する(ユーザーID :uuid):代表ユーザー
    }
}

package "Presentation" #ffb6c1{
    class 招待ユーザー管理サービス{
        招待ユーザーを作成する(ユーザー: 招待ユーザー):void
        招待ユーザーを削除する(ユーザーID :uuid):void
        招待ユーザーを取得する(ユーザーID :uuid):招待ユーザー
    }
}
package "Presentation" #ffb6c1{
    class アクティブ状態管理サービス{
        アクティブ状態を取得する(ユーザー: 利用ユーザー):string
        アクティブ状態を更新する(ユーザー: 利用ユーザー):void
    }
}

skinparam class {
ArrowColor SeaGreen
}

利用ユーザー管理サービス-->利用ユーザー作成サービス
利用ユーザー管理サービス-->利用ユーザー削除サービス
利用ユーザー管理サービス-->利用ユーザー更新サービス
利用ユーザー管理サービス-->利用ユーザー取得サービス

skinparam class {
ArrowColor Red
}

代表ユーザー管理サービス-->代表ユーザー作成サービス
代表ユーザー管理サービス-->代表ユーザー削除サービス
代表ユーザー管理サービス-->代表ユーザー更新サービス
代表ユーザー管理サービス-->代表ユーザー取得サービス

skinparam class {
ArrowColor Blue
}

招待ユーザー管理サービス-->招待ユーザー作成サービス
招待ユーザー管理サービス-->招待ユーザー削除サービス
招待ユーザー管理サービス-->招待ユーザー取得サービス

skinparam class {
ArrowColor #696969
}

アクティブ状態管理サービス-->アクティブ状態取得サービス
アクティブ状態管理サービス-->アクティブ状態更新サービス

skinparam class {
ArrowColor SeaGreen
}

利用ユーザー作成サービス->利用ユーザー
利用ユーザー削除サービス->利用ユーザー
利用ユーザー更新サービス->利用ユーザー
利用ユーザー取得サービス->利用ユーザー

skinparam class {
ArrowColor Red
}
代表ユーザー作成サービス->代表ユーザー
代表ユーザー削除サービス->代表ユーザー
代表ユーザー更新サービス->代表ユーザー
代表ユーザー取得サービス->代表ユーザー

skinparam class {
ArrowColor Blue
}
招待ユーザー作成サービス->招待ユーザー
招待ユーザー削除サービス->招待ユーザー
招待ユーザー取得サービス->招待ユーザー

package "UI" #98fb98{
    class 利用ユーザー管理画面{
        ユーザー: 利用ユーザー
    }
    class ログイン画面{
        ユーザー名: string
        パスワード: string
    }
    class ログアウト画面{
        ユーザーID :uuid
    }
    class 初期設定画面{
        ユーザー: 利用ユーザー
    }
    class 代表ユーザー作成画面{
        ユーザー: 代表ユーザー
    }
    class 招待ユーザー作成画面{
        ユーザー: 利用ユーザー
    }
}
skinparam class {
ArrowColor SeaGreen
}

利用ユーザー管理画面-->利用ユーザー管理サービス
ログイン画面-->利用ユーザー管理サービス
ログアウト画面-->利用ユーザー管理サービス
初期設定画面-->利用ユーザー管理サービス

skinparam class {
ArrowColor Red
}
代表ユーザー作成画面-->代表ユーザー管理サービス
skinparam class {
ArrowColor Blue
}
招待ユーザー作成画面-->招待ユーザー管理サービス

skinparam class {
ArrowColor #cd853f
}

class チャットボット管理ドメイン #fffacd  {
    アクティブ状態を更新する()
}

hide チャットボット管理ドメイン circle

チャットボット管理ドメイン->アクティブ状態管理サービス
skinparam class {
ArrowColor #Black
}
ログイン画面->アクティブ状態管理サービス
ログアウト画面->アクティブ状態管理サービス
利用ユーザー管理画面->アクティブ状態管理サービス

skinparam class {
ArrowColor #c71585
}

class メッセージ管理ドメイン #db7093  {
    利用ユーザー情報を取得する()
}
hide メッセージ管理ドメイン circle
メッセージ管理ドメイン->利用ユーザー管理サービス

skinparam class {
ArrowColor #4169e1
}


class チャンネル管理ドメイン #6495ed {
    利用ユーザー情報を取得する()
    代表ユーザー情報を取得する()
    アクティブ状態を更新する()
    アクティブ状態を取得する()
}
hide チャンネル管理ドメイン circle

チャンネル管理ドメイン->利用ユーザー管理サービス
チャンネル管理ドメイン->代表ユーザー管理サービス
チャンネル管理ドメイン->招待ユーザー管理サービス



チャンネル管理ドメイン->アクティブ状態管理サービス
'ログインログアウト、利用ユーザー管理からアクティブ状態管理サービスへ線を引く'

```

- [上の図を見やすくしたもの](//www.plantuml.com/plantuml/png/xLfVRzjK57_tfxXgNpQ9JaLiOusgQeKAb3T4nGTmd9lEMkfKZZC4MHvcgwXPLL5WsjHj5RGRQFpP7mHCcmhxCdTnjc_1hUFXrByRz_IqaVP07gh8FkTtp_sTutD-r-d5Pc3xGMkvRZKlkzwAxTlBmgdRpUPy4FXkfHN8ijFm5jqlfPYswh8MYA0XV7VfKY2ghY-Tm6ruLjvNjArvtszy_c6Ztl15fMuxbwsEPKalS8ClH6_jv_wD1ohwIKL_g_2f_jksXFxqDZTwtOtagufszcz6lwfmLqLT5VscmkVfdSojl91UUgZ29ogyhw8_39TKz8rsLj7Z1B4Bz_lNdyQhwydbb__SZTSsuri_nblXKC0lz-wzsZ44d6A6ZnFysydtvpg2p3DUlzDxiOgUi8lYBLzJqRra9nlwVcAFiQveakqbUG0wZbPxF_mkPcSNxC2ks4qvDoVQ-yQP-KJPg_bsC_1RJj3ovOIOhDNiSzFJIPnfDZ5X_KSx_SslLFIBYhPL-4n5Q_gxTaa_w328zjJmfPB1x7JfIiEj5k3qkjTVRzq_TP0_KMgrtEgXll6TF-ERJquWXgzlzbxS6X43cYT8-Q8xuAqBNvHq2bnlwHsHAzUI6DmOH0LOkohKE6k74TB9ifbMCpsRw63C9fW1as10o2RuqhA0va03Ffh5DA23aGOm0nh0W403-D9e0FEKXbmBM6Wiswud5gL_nNNan63BhXT8lsOxalhubpzwYnl0_msWGyqteK50liVG8dYFEQFPq8aIavLfvsnLvWWZj18WR0pDXDSG48b16Bb3YDchPyuGhQceKrDpQ6bX_gUchfeCqR8mUA8r5LK7ZvQMXSaeYebeJKNLCQ6bTOHqe0HDwM0wq-D6v-4vDx-oKdSTEt0RsJEDEXSVIXN-bVJYxtHVBffnAlmsTRYsfS9rsg11WJPgw9d3o0MGcc80nQfmvBGaBPgQcdQD-nq5CZmT4Oet8t61R6HoES9cUuJwI1sAbaO_64pcIWQDJwraj2wkPBId7ZMmaY4CVZtZqkHwHckiQZu3r981Qsh9P7vGCiKr8oRjcjIVDXoCgBM3rbWxP4M3vpDgxQ0rltP6YYhQqf0qnk6iy7tQehG_zgNqzWqf8qlFHR90ioZ3Xm-83o8V4BF312nc-rDPrKHJ6YfekQ95AQsH3uWySm6HPm8WX-SFwYsfYQPq7n2eHQjI-WWR47bX06Oj-XDVDgKN93rwWlG6TlpA507ftHL1o3EM4HLVO07ac8KfBiENfnr2-OnwHiSk1uylxCOWqSOijY0LoMygbVFEkst2w-UngwpZwwMtLFaWWMOPWFE4ZuMZX8-5uvgFXHE9f79mvfiNfAWXFXQIoiT2KlbOI2fDqg1YCAz8aJvyB6ILZqLdWdbaCTKquMX2SyIoe3lYpesE9tMaC9KXuUX0SqGUw8x8Wydnv2I_gGe9qfxkYFinEMO3_hEo7kip5sgLcGiKeTw_iVTwUpSRw8T9NNWdCIn2Yy2q6dqZEhFxPb4AQ-GKA2m3mzpuZdGxlllzgmSFUuzkypPDU8rP34p_yH-1UH5tcDqF2WI6kRafMr0DT4_CCTqPaalrF5P3_6ybokJcT1nSYJ8PYV_rfZzldguT5KKgt4imdwM0KLTV7oHIJ5Ohxq_Fl2SqK7PAn9-qyYBxj5xbabkLX1KSrtVgCeqe_uzbfeZEdvqv9wj73WZELxJmpU5W-8TQ4gkIW8ExuE1GAmepoDlOHUbLMylrVm40)


---
## 備考
- 代表ユーザー、招待ユーザーの管理機能を追加
    - 細かいところで利用ユーザーと使い勝手が異なりそうなので分離
- 実践の色が全て同じだとわかりにくいので、煩雑な箇所には色を付けた
- 外部のドメインはメッセージ管理ドメインとチャンネル管理ドメイン
- [color code](https://www.colordic.org/)


```plantuml
skinparam classAttributeIconSize 0
left to right direction

class Chatサービス利用ユーザー #ffe4b5 {
}
hide Chatサービス利用ユーザー members
hide Chatサービス利用ユーザー fields
hide Chatサービス利用ユーザー circle

Chatサービス利用ユーザー-->利用ユーザー管理画面
Chatサービス利用ユーザー-->ログイン画面
Chatサービス利用ユーザー-->ログアウト画面

class Chatサービス代表ユーザー #ffe4b5 {
}
hide Chatサービス代表ユーザー members
hide Chatサービス代表ユーザー fields
hide Chatサービス代表ユーザー circle

Chatサービス代表ユーザー-->招待ユーザー作成画面
Chatサービス代表ユーザー-->利用ユーザー管理画面
Chatサービス代表ユーザー-->ログイン画面
Chatサービス代表ユーザー-->ログアウト画面

class Chatサービス招待ユーザー #ffe4b5 {
}
hide Chatサービス招待ユーザー members
hide Chatサービス招待ユーザー fields
hide Chatサービス招待ユーザー circle

Chatサービス招待ユーザー-->初期設定画面

class 初期ユーザー #ffe4b5{
}
hide 初期ユーザー members
hide 初期ユーザー fields
hide 初期ユーザー circle

初期ユーザー-->代表ユーザー作成画面
```