TypeORM の基本的なクエリ。データベースには MySQL を用いています。
このリポジトリは下記のコンテンツを含んでいます。
- Node.jsのバックエンドAPI (MySQとTypeORMで通信) (13000番ポートでホストからアクセス可能です。)
- MySQL
上記はDockerコンテナとして、作っていますので、 Docker Compose コマンドで動作させてください。
ユーザーが店舗をレビューするようなシステムを想定しており、店舗テーブル (stores) とレビューテーブル (reviews) がデフォルトのテーブルとして定義されています。APIを使って店舗・レビューをCRUDできます。
Field | Type | Null | Key |
---|---|---|---|
id | int(11) | NO | PRI |
score | float | NO | |
name | varchar(255) | NO | |
address | varchar(255) | NO | |
genre | varchar(255) | NO |
Field | Type | Null | Key |
---|---|---|---|
id | int(11) | NO | PRI |
storeId | int(11) | NO | |
score | float | NO | |
title | text | NO | |
content | text | NO |
- データベースのタイムゾーンは (Asia/Tokyo) にデフォルトでセットされています。もし、変更したい場合には docker-compose.yml で環境変数を渡していますので、そこを編集してください。
Docker Compose コマンドでコンテナを起動します。
docker-compose up
DBマイグレーションが自動で走って、テーブルが作成されます。
下記のコマンドでMySQLにログインできます。
docker exec -it typeorm-example-db mysql -u user -ppass example
下記のコマンドで mysqldump を実行することができます。
docker exec typeorm-example-db mysqldump -u user -ppass example > dump.sql
自分でマイグレーションファイルを作成する場合には、下記コマンドを実行します。
# ホストから実行する場合
docker exec -it typeorm-example-api yarn create:migration myFooBarTable
# コンテナの中で実行する場合
$(npm bin)/ts-node -r tsconfig-paths/register $(npm bin)/typeorm migration:create -n myFooBarTable
Then edit api/src/migration/myFooBarTable/
自分でマイグレーションファイルを作成した場合には下記コマンドで実行します。
docker exec -it typeorm-example-api yarn migrate
# The following command revert migration
# docker exec -it typeorm-example-api yarn migrate:revert
# Inside Container
yarn migrate
# Create a store
curl -X POST -H "Content-Type: application/json" -d '{"name":"my shop name", "genre":"Fast Food", "address":"Tokyo, Japan"}' http://localhost:13000/stores
# Updtate a store
curl -X PUT -H "Content-Type: application/json" -d '{"name":"my new shop name", "genre":" NEW Fast Food", "address":"Kyoto, Japan"}' http://localhost:13000/stores/1
# Delete a store
curl -X DELETE -H "Content-Type: application/json" http://localhost:13000/stores/2
# Get all store with child reviews
curl -X GET http://localhost:13000/stores
# Get a store
curl -X GET http://localhost:13000/stores/1
# Get a store with MySQL LIKE operator query
curl -X GET "http://localhost:13000/stores/find/likeName?name=new"
# Get a store with MySQL FullText Search (ngram)
curl "http://localhost:13000/stores/find/fullText?name=new&address=Kyoto&genre=Fast"
# Create one review and calculate and set store's avarage score (Transaction)
curl -X POST -H "Content-Type: application/json" -d '{"storeId":1, "score": 5, "title":"Good!", "content": "Yummy!"}' http://localhost:13000/reviews