|
1 | 1 | **go-ddd-practice**
|
2 | 2 |
|
3 |
| -* DDD勉強用 |
4 |
| -* 業務ユースケースは雑 |
5 |
| - * セキュリティを考慮しないアカウント管理 |
6 |
| - * TODOリスト |
7 |
| -* 利用するフレームワーク等 |
8 |
| - * Gin |
9 |
| - * GORM |
10 |
| - * MySQL |
| 3 | +### 構成 |
| 4 | +``` |
| 5 | +├── .vscode |
| 6 | +├── pkg |
| 7 | +| ├── controller |
| 8 | +| | ├── response |
| 9 | +| | | └── response.go |
| 10 | +| | ├── app_controllers.go |
| 11 | +| | ├── master_controllers.go |
| 12 | +| | └── routers.go |
| 13 | +| ├── error |
| 14 | +| | └── errors.go |
| 15 | +| ├── infrastracture |
| 16 | +| | ├── db |
| 17 | +| | | ├── db.go |
| 18 | +| | | └── tx.go |
| 19 | +| | ├── repository |
| 20 | +| | | └── account_repository.go |
| 21 | +| | └── security |
| 22 | +| | └── security.go |
| 23 | +| ├── model |
| 24 | +| | └── accounts.go |
| 25 | +| ├── test |
| 26 | +| | └── master_test.go |
| 27 | +| └── usecase |
| 28 | +| ├── dto |
| 29 | +| | ├── app_dto.go |
| 30 | +| | ├── dto.go |
| 31 | +| | └── master_dto.go |
| 32 | +| ├── app_service.go |
| 33 | +| └── master_service.go |
| 34 | +├── .env |
| 35 | +├── go.mod |
| 36 | +├── go.sum |
| 37 | +└── main.go |
| 38 | +``` |
| 39 | + |
| 40 | +### モデル |
| 41 | +**accounts** |
| 42 | +| 論理名 | 物理名 | 主 | 型 | 必須 | 桁数 | 一意 | 備考 | |
| 43 | +| ---------------- | ------------ | :---: | -------- | :---: | :---: | :---: | ------------------- | |
| 44 | +| ID | id | 〇 | int | 〇 | | 〇 | | |
| 45 | +| 作成日時 | created_at | | datetime | | | | | |
| 46 | +| 更新日時 | updated_at | | datetime | | | | | |
| 47 | +| 削除日時 | deleted_at | | datetime | | | | | |
| 48 | +| パスワード | password | | varchar | 〇 | 500 | | SHA-256でハッシュ化 | |
| 49 | +| アクセストークン | access_token | | varchar | | 500 | | | |
| 50 | +| アカウント名 | name | | varchar | 〇 | 50 | | | |
| 51 | +| メールアドレス | email | | varchar | 〇 | 50 | | | |
| 52 | + |
| 53 | +### ユースケース |
| 54 | +* IDはgorm.ModelのAIをそのまま利用 |
| 55 | +* 返すアクセストークンはJWTなどで生成せず、ハードコードして一応ハッシュ化 |
| 56 | + |
| 57 | + |
| 58 | +#### ログイン |
| 59 | +| **Login** | | |
| 60 | +| --------- | ------------------------------------------------------------------------------------------------ | |
| 61 | +| メソッド | POST | |
| 62 | +| URI | /api/login | |
| 63 | +| 説明 | IDとパスワードを入力してログインする。IDとパスワードが一致すれば、アクセストークンが発行される。 | |
| 64 | + |
| 65 | +``` |
| 66 | +{ |
| 67 | + "id": 1, |
| 68 | + "password": password |
| 69 | +} |
| 70 | +``` |
| 71 | + |
| 72 | +#### アカウント取得(1件) |
| 73 | +| **GetAccount** | | |
| 74 | +| -------------- | ------------------------- | |
| 75 | +| メソッド | GET | |
| 76 | +| URI | /api/master/:id | |
| 77 | +| 説明 | アカウントを1件取得する。 | |
| 78 | + |
| 79 | +#### アカウント取得(全件) |
| 80 | +| **GetAccountAll** | | |
| 81 | +| ----------------- | -------------------------- | |
| 82 | +| メソッド | GET | |
| 83 | +| URI | /api/master | |
| 84 | +| 説明 | アカウントを全件取得する。 | |
| 85 | + |
| 86 | +#### アカウント登録 |
| 87 | +| **RegisterAccount** | | |
| 88 | +| ------------------- | ---------------------- | |
| 89 | +| メソッド | POST | |
| 90 | +| URI | /api/master | |
| 91 | +| 説明 | アカウントを登録する。 | |
| 92 | + |
| 93 | +``` |
| 94 | +{ |
| 95 | + "name": "山田 太郎", |
| 96 | + "password": "Yamada_Taro01", |
| 97 | + "email": "yamada@example.com" |
| 98 | +} |
| 99 | +``` |
| 100 | + |
| 101 | +#### アカウント編集 |
| 102 | +| **EditAccount** | | |
| 103 | +| --------------- | ---------------------- | |
| 104 | +| メソッド | PUT | |
| 105 | +| URI | /api/master/edit | |
| 106 | +| 説明 | アカウントを編集する。 | |
| 107 | + |
| 108 | +``` |
| 109 | +{ |
| 110 | + "id": "1", |
| 111 | + "name": "山田 太郎", |
| 112 | + "email": "yamada@sample.com" |
| 113 | +} |
| 114 | +``` |
| 115 | + |
| 116 | +#### アカウント削除 |
| 117 | +| **DeleteAccount** | | |
| 118 | +| ----------------- | -------------------------- | |
| 119 | +| メソッド | DELETE | |
| 120 | +| URI | /api/master/delete | |
| 121 | +| 説明 | アカウントを論理削除する。 | |
| 122 | + |
| 123 | +``` |
| 124 | +{ |
| 125 | + "id": "1", |
| 126 | +} |
| 127 | +``` |
| 128 | + |
| 129 | +### 参考 |
| 130 | +* [ddd_on_golang_sample](https://github.com/yu-croco/ddd_on_golang_sample) |
| 131 | +* [ざっくりDDD・クリーンアーキテクチャにおける各層の責務を理解したい①(ドメイン層・ユースケース層編)](https://qiita.com/kotobuki5991/items/22712c7d761c659a784f) |
| 132 | +* [ドメイン層の実装](https://terasolunaorg.github.io/guideline/current/ja/ImplementationAtEachLayer/DomainLayer.html) |
| 133 | +* [sample-boot-jpa](https://github.com/jkazama/sample-boot-jpa) |
0 commit comments