Skip to content

ochamu/good-morning-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Good Morning API

Good Morning API は「指定した日時にテキストでモーニングコールを届ける」体験を支えるバックエンドです。ユーザー登録と認証、モーニングコールの作成・参照・削除を REST API 経由で提供し、同梱のシンプル UI や任意のクライアントから利用できます。クラウド(Cloud Run)でもローカルでも同じ構成で動作するよう設計されています。

アーキテクチャ概要

  • エントリポイント: cmd/api/main.go が設定読込・依存注入・HTTP サーバ起動を担当します。設定は .envinternal/config のローダを介して環境変数に集約されます。
  • レイヤ構造:
    • internal/adapter/http: net/http を用いたデリバリ層。ハンドラごとに Register を公開し、ミドルウェアは関数として注入します。
    • internal/usecase: ユースケース層。ドメイン抽象 (UserRepository など) を介してアプリケーションロジックを実装し、JWT 管理やパスワード検証を統括します。
    • internal/entity: ドメインモデルとバリデーションを担い、ユースケース層からのみ参照されます。
    • internal/infrastructure/mysql: MySQL 8.4 互換を前提とした永続化実装。ユースケース層のインターフェースを満たす形でクエリを提供します。
    • internal/infrastructure/jwt: github.com/golang-jwt/jwt/v5 に基づくトークン署名・検証の実装です。
  • データストア: MySQL を単一データベースとし、internal/infrastructure/mysql/schema.sql でスキーマを管理します。接続プール設定(最大接続数など)は internal/config/database.go を通じて環境変数から注入されます。
  • 認証・認可: 電子メール+パスワードでログインし、JWT アクセストークンを発行します。HTTP ハンドラでは Authorization: Bearer ヘッダーを検証し、必要に応じてユーザー情報をリポジトリから再取得します。

API エンドポイント概要

エンドポイント メソッド 説明 認証
/users POST 新規ユーザー登録。メール重複時は 409 を返却 不要
/auth/login POST ログインと JWT アクセストークン発行 不要
/morning-calls GET / POST モーニングコールの一覧取得・新規作成 必須
/morning-calls/{id} GET / DELETE 特定モーニングコールの取得・削除 必須
/readyz GET DB 疎通を含むレディネスチェック 不要

認証が必要なエンドポイントでは Authorization: Bearer <access_token> ヘッダーを添付します。トークンの TTL や Bcrypt コストは環境変数で調整できます。

デプロイ済み URL

開発と運用

  • ローカル開発: Docker Compose と Makefile により、API・MySQL・UI を一括起動できます。環境変数テンプレートは make env-demo / make env-local で生成されます。
  • テスト: go test ./... でユニットテスト・ハンドラテストを実行。主要コンポーネントは interface 抽象によりテストダブルを利用可能です。
  • ビルド/デプロイ: マルチステージ DockerfileMakefilegcp-build / gcp-deploy タスクで Cloud Run へデプロイできます。UI 用 ui/Dockerfile も同一 Makefile からビルド/デプロイ可能です。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors