Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CloudTechホテル API

CloudTechホテル口コミシステムのバックエンドAPIです。

技術スタック

  • Go 1.21
  • Gin (Webフレームワーク)
  • MySQL 8.0
  • sqlx (SQLライブラリ)

Docker単体での起動

前提条件

  • Docker
  • MySQLが起動していること

1. MySQLを起動(別途必要な場合)

docker run -d \
  --name cloudtech-mysql \
  -e MYSQL_ROOT_PASSWORD=password \
  -e MYSQL_DATABASE=cloudtech_hotel \
  -p 3306:3306 \
  mysql:8.0

2. APIを起動

cd cloudtech-hotel-api

# イメージをビルド
docker build -t cloudtech-hotel-api .

# コンテナを起動
docker run -d \
  --name cloudtech-hotel-api \
  -p 8080:8080 \
  -e DB_HOST=host.docker.internal \
  -e DB_PORT=3306 \
  -e DB_USER=root \
  -e DB_PASSWORD=password \
  -e DB_NAME=cloudtech_hotel \
  cloudtech-hotel-api

ローカル開発環境での起動

前提条件

  • Go 1.21以上
  • MySQL 8.0

1. 環境変数を設定

export PORT=8080
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=root
export DB_PASSWORD=password
export DB_NAME=cloudtech_hotel
export ALLOWED_ORIGINS=http://localhost:3000

2. データベースを作成

mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS cloudtech_hotel"
mysql -u root -p cloudtech_hotel < migrations/001_create_tables.sql

3. 依存関係をインストール

go mod download

4. サーバーを起動

go run cmd/api/main.go

テストの実行

go test ./...

# 詳細出力
go test -v ./...

# カバレッジ
go test -cover ./...

API仕様

ベースURL

http://localhost:8080/api/v1

エンドポイント

ヘルスチェック

GET /health

レスポンス:

{"status": "ok"}

口コミ一覧取得

GET /api/v1/reviews

レスポンス:

[
  {
    "id": 1,
    "title": "最高のホテルでした",
    "content": "スタッフの対応が素晴らしく...",
    "author_name": "山田太郎",
    "rating": 5,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
]

口コミ詳細取得

GET /api/v1/reviews/:id

レスポンス:

{
  "id": 1,
  "title": "最高のホテルでした",
  "content": "スタッフの対応が素晴らしく...",
  "author_name": "山田太郎",
  "rating": 5,
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-01-15T10:30:00Z"
}

口コミ投稿

POST /api/v1/reviews
Content-Type: application/json

{
  "title": "最高のホテルでした",
  "content": "スタッフの対応が素晴らしく、部屋も清潔でした。",
  "author_name": "山田太郎",
  "rating": 5
}

レスポンス: 201 Created

{
  "id": 1,
  "title": "最高のホテルでした",
  "content": "スタッフの対応が素晴らしく、部屋も清潔でした。",
  "author_name": "山田太郎",
  "rating": 5,
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-01-15T10:30:00Z"
}

口コミ編集

PUT /api/v1/reviews/:id
Content-Type: application/json

{
  "title": "素晴らしいホテルでした",
  "content": "更新した内容...",
  "author_name": "山田太郎",
  "rating": 4
}

口コミ削除

DELETE /api/v1/reviews/:id

レスポンス:

{"message": "Review deleted successfully"}

curlコマンドでの使い方

# ヘルスチェック
curl http://localhost:8080/health

# 口コミ一覧取得
curl http://localhost:8080/api/v1/reviews

# 口コミ投稿
curl -X POST http://localhost:8080/api/v1/reviews \
  -H "Content-Type: application/json" \
  -d '{"title":"テスト","content":"テスト内容","author_name":"テスト太郎","rating":5}'

# 口コミ詳細取得
curl http://localhost:8080/api/v1/reviews/1

# 口コミ編集
curl -X PUT http://localhost:8080/api/v1/reviews/1 \
  -H "Content-Type: application/json" \
  -d '{"title":"更新テスト","content":"更新内容","author_name":"テスト太郎","rating":4}'

# 口コミ削除
curl -X DELETE http://localhost:8080/api/v1/reviews/1

データベース仕様

reviewsテーブル

カラム名 説明
id BIGINT UNSIGNED 主キー、自動採番
title VARCHAR(100) 口コミタイトル
content TEXT 口コミ本文
author_name VARCHAR(50) 投稿者名
rating TINYINT UNSIGNED 評価(1-5)
created_at TIMESTAMP 作成日時
updated_at TIMESTAMP 更新日時

テーブル作成SQL

CREATE TABLE IF NOT EXISTS reviews (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    content TEXT NOT NULL,
    author_name VARCHAR(50) NOT NULL,
    rating TINYINT UNSIGNED NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_created_at (created_at),
    INDEX idx_rating (rating)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages