SP APIは、サッカー/フットボールの大会、チーム、選手、試合などのデータを管理するためのGraphQL APIサーバーです。Go言語で開発されており、Clean Architectureの設計原則に従って構築されています。
- 言語: Go 1.16
- GraphQL: gqlgen (99designs/gqlgen)
- データベース: PostgreSQL
- 依存性注入: Google Wire
- 設定管理: Viper
- コンテナ: Docker & Docker Compose
- その他: Redis, HashiCorp Vault
Clean Architectureを採用し、以下の層に分離されています:
├── domain/ # ドメイン層
│ ├── model/ # エンティティ・値オブジェクト
│ └── repository/ # リポジトリインターフェース
├── usecase/ # ユースケース層
├── infrastructure/ # インフラストラクチャ層
│ ├── persistence/ # データ永続化
│ └── provider/ # 外部サービス連携
└── graph/ # GraphQL層
├── generated/ # 自動生成コード
└── resolver/ # リゾルバー実装
以下の主要なエンティティを管理:
- Event: 大会(FIFAワールドカップなど)
- Team: チーム(国代表など)
- Player: 選手
- Coach: コーチ
- Match: 試合
- Stadium: スタジアム
- Timeline: 試合のタイムライン(ゴール、カードなど)
type Query {
events: [Event!]! # 全大会取得
event(id: ID!): Event! # 特定大会取得
teams: [Team!]! # 全チーム取得
team(fifa: String!): Team! # FIFAコードでチーム取得
}events: 大会情報teams: チーム情報(FIFAコード、連盟など)players: 選手情報coaches: コーチ情報matches: 試合情報stadiums: スタジアム情報participants: 大会参加チームregistered_players: 登録選手match_progresses: 試合進行状況
- チームのFIFAコード
- 連盟別
- 大会別
- 試合別
- Go 1.16以上
- Docker & Docker Compose
- PostgreSQL 13.2
- Redis
- HashiCorp Vault
# 依存関係のインストール
make install-all
# GraphQLコード生成
make gqlgen
# サーバー起動
make server# インフラストラクチャ起動
docker-compose up -d
# サービス一覧
- PostgreSQL: localhost:25432
- Redis: localhost:26379
- Vault: localhost:28200config/environments/local.yml: ローカル環境設定config/environments/test.yml: テスト環境設定
database:
driver: postgres
user: sp
password: sp
host: localhost
port: 25432
db: spsp_api/
├── config/ # 設定管理
├── db/ # データベース関連
│ └── docker/init/ # 初期化スクリプト
├── domain/ # ドメイン層
│ ├── model/ # エンティティ
│ └── repository/ # リポジトリインターフェース
├── graph/ # GraphQL層
│ ├── generated/ # 自動生成コード
│ └── resolver/ # リゾルバー
├── infrastructure/ # インフラストラクチャ層
│ ├── persistence/ # データ永続化
│ └── provider/ # 外部サービス
├── usecase/ # ユースケース層
├── vault/ # Vault設定
├── docker-compose.yml # Docker設定
├── gqlgen.yml # GraphQL設定
├── wire.go # 依存性注入設定
└── server.go # エントリーポイント
graph/schema.graphqlsを編集make gqlgenでコード生成- リゾルバーを実装
db/docker/init/1_ddl.sqlを編集- Dockerコンテナを再起動
Google Wireを使用して依存性を管理:
wire.go: 依存性定義wire_gen.go: 自動生成された注入コード
- HashiCorp Vaultを使用した機密情報管理
- データベース接続プール設定
- 環境変数による設定の外部化
- 認証・認可機能
- リアルタイム更新(WebSocket)
- キャッシュ機能(Redis)
- ログ管理
- メトリクス収集
- API バージョニング
このプロジェクトのライセンス情報は、プロジェクトのルートディレクトリにあるLICENSEファイルを参照してください。