|
| 1 | +# traP Collection Server |
| 2 | + |
| 3 | +このアプリは、サークル内で作られたゲームを管理・配信するシステムのサーバーサイドです。 |
| 4 | +Go 言語で書かれています。 |
| 5 | + |
| 6 | +## ディレクトリ構成 |
| 7 | + |
| 8 | +```txt |
| 9 | +. |
| 10 | +├── docker # Docker に関する設定 |
| 11 | +│ ├── base |
| 12 | +│ ├── dev # 開発環境の設定 |
| 13 | +│ ├── production # 本番環境の設定 |
| 14 | +│ └── tbls # tbls による DB スキーマドキュメント生成用の設定 |
| 15 | +├── docs |
| 16 | +│ ├── db_schema # DB スキーマドキュメント |
| 17 | +│ ├── images |
| 18 | +│ └── openapi # OpenAPI スキーマ |
| 19 | +├── migrations # DB マイグレーションのSQLファイル |
| 20 | +├── pkg |
| 21 | +│ ├── context |
| 22 | +│ ├── random # 暗号的に安全なランダム文字列生成 |
| 23 | +│ └── types # optionalな型 |
| 24 | +├── src |
| 25 | +│ ├── auth # 認証関連 |
| 26 | +│ │ ├── mock |
| 27 | +│ │ └── traQ |
| 28 | +│ ├── cache # キャッシュ関連 |
| 29 | +│ │ ├── mock |
| 30 | +│ │ └── ristretto |
| 31 | +│ ├── config # 設定関連 |
| 32 | +│ │ ├── mock |
| 33 | +│ │ └── v1 # 環境変数から読み込む実装 |
| 34 | +│ ├── domain # ドメインモデル |
| 35 | +│ │ └── values # 値オブジェクト |
| 36 | +│ ├── handler # HTTP ハンドラ |
| 37 | +│ │ ├── common |
| 38 | +│ │ └── v2 # ハンドラの実装 |
| 39 | +│ │ └── openapi # OpenAPI スキーマから生成されたコード |
| 40 | +│ ├── repository # データの永続化。RDB を想定 |
| 41 | +│ │ ├── gorm2 # GORM を使った実装 |
| 42 | +│ │ │ ├── migrate # 古いマイグレーションのコード |
| 43 | +│ │ │ └── schema # 新しいマイグレーションのコード |
| 44 | +│ │ └── mock |
| 45 | +│ ├── service # ビジネスロジック |
| 46 | +│ │ ├── mock |
| 47 | +│ │ ├── v1 |
| 48 | +│ │ └── v2 |
| 49 | +│ ├── storage # ストレージ関連。ファイルの保存先 |
| 50 | +│ │ ├── local # ローカルのファイルストレージ |
| 51 | +│ │ ├── mock |
| 52 | +│ │ ├── s3 # S3 ストレージ |
| 53 | +│ │ └── swift # Swift ストレージ |
| 54 | +│ └── wire # Dependency Injection |
| 55 | +├── task # Taskfile の設定 |
| 56 | +└── testdata # テスト用に使うファイル |
| 57 | +``` |
| 58 | + |
| 59 | +設計の詳細は [src/README.md ](src/README.md) も参照してください。 |
| 60 | + |
| 61 | +## 開発の進め方について |
| 62 | + |
| 63 | +### テスト |
| 64 | + |
| 65 | +ユニットテストを記述しています。ユニットテストでは、原則的に Table Driven Test を行います。 |
| 66 | +また、テスト時の assertion には、[testify](https://github.com/stretchr/testify) を使用しています。 |
| 67 | + |
| 68 | +## DB 操作について |
| 69 | + |
| 70 | +DB 操作には、[GORM](https://gorm.io/) を使用しています。 |
| 71 | + |
| 72 | +### マイグレーション |
| 73 | + |
| 74 | +マイグレーションには、[atlas](https://atlasgo.io/) を使用しています。 |
| 75 | +マイグレーション、およびDBスキーマの詳細は、 [docs/migration.md](docs/migration.md) を参照してください。 |
| 76 | + |
| 77 | +### Linter について |
| 78 | + |
| 79 | +golangci-lint を使用しています。 |
| 80 | +golangci-lint の設定は、[.golangci.yaml](.golangci.yaml) を参照してください。 |
| 81 | + |
| 82 | +## このアプリが扱う概念について |
| 83 | + |
| 84 | +### game |
| 85 | + |
| 86 | +ゲーム。 |
| 87 | +タイトルと説明が紐づけられている。 |
| 88 | + |
| 89 | +### game file |
| 90 | + |
| 91 | +ゲームを動かすためのファイル。実体は zip ファイル。1つのゲームに複数のゲームファイルが存在する。 |
| 92 | +Windows 用の exe ファイルを含むもの、Mac OS 用のアプリケーションを含むもの、JVM 用の jar ファイルを含むものがある。 |
| 93 | + |
| 94 | +### game video |
| 95 | + |
| 96 | +ゲームの動画。1つの game に複数の game video が存在する。 |
| 97 | + |
| 98 | +### game image |
| 99 | + |
| 100 | +ゲームの画像。1つの game に複数の game image が存在する。 |
| 101 | + |
| 102 | +### game version |
| 103 | + |
| 104 | +ゲームのバージョン。1つの game に複数の game version が存在する。 |
| 105 | +1つのバージョンには、1つ以上の game file または URL、1つの game video、1つの game image が含まれる。 |
| 106 | + |
| 107 | +### edition |
| 108 | + |
| 109 | +ランチャーのエディション。複数の game version をまとめたもの。 |
| 110 | +エディションは、 game version をまとめて配布するためのもの。 |
| 111 | +例えば、x年のコミケ用のエディション、y年の工大祭用のエディションなど。 |
| 112 | +以前は Launcher Version と呼ばれており、一部にその名前が残っている。 |
| 113 | + |
| 114 | +### game role |
| 115 | + |
| 116 | +game に対する権限。 |
| 117 | + |
| 118 | +- owner: game の所有者。game の編集、削除、game roleの変更、削除、game fileのアップロード、game videoのアップロード、game imageのアップロード、game versionの作成ができる。 |
| 119 | +- maintainer: game の管理者。game の編集、game roleの変更、game fileのアップロード、game videoのアップロード、game imageのアップロード、game versionの作成ができる。 |
| 120 | + |
| 121 | +### admin |
| 122 | + |
| 123 | +traP Collection の管理者。 |
| 124 | +edition を作成できるほか、全ての game について操作を行うことができる。 |
| 125 | + |
| 126 | +### seat |
| 127 | + |
| 128 | +座席。工大祭などで座席の管理をするのに使用する。 |
| 129 | +ランチャーから今の座席の状態が送信され、空いている座席を確認できる。 |
| 130 | + |
| 131 | +### visibility |
| 132 | + |
| 133 | +ゲームの公開状態を表す。`public`、`limited`、`private` の3つの値をとる。 |
| 134 | + |
| 135 | +| 公開状態 | game file | game のタイトル、説明、game image、game video | |
| 136 | +| -------- | ------------------------ | ------------------------ | |
| 137 | +| public | 誰でもダウンロード可能 | 誰でも閲覧可能 | |
| 138 | +| limited | 部員のみダウンロード可能 | 誰でも閲覧可能 | |
| 139 | +| private | 部員のみダウンロード可能 | 部員のみ閲覧可能 | |
0 commit comments