mirror of
https://github.com/kou029w/hasura-rest-hands-on.git
synced 2025-02-02 07:08:45 +00:00
Compare commits
No commits in common. "f945065b01068bb17deba2bf5071944a595eb526" and "b751fcb6544b06fbc4626b42393cb085ed193967" have entirely different histories.
f945065b01
...
b751fcb654
19 changed files with 178 additions and 29 deletions
3
db/README.md
Normal file
3
db/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# [memo-demo.hasura.app](https://memo-demo.hasura.app)
|
||||||
|
|
||||||
|
https://cloud.hasura.io → "Git Deployment"
|
6
db/config.yaml
Normal file
6
db/config.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
version: 3
|
||||||
|
endpoint: https://memo-demo.hasura.app
|
||||||
|
metadata_directory: metadata
|
||||||
|
actions:
|
||||||
|
kind: synchronous
|
||||||
|
handler_webhook_baseurl: http://localhost:3000
|
0
db/metadata/actions.graphql
Normal file
0
db/metadata/actions.graphql
Normal file
6
db/metadata/actions.yaml
Normal file
6
db/metadata/actions.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
actions: []
|
||||||
|
custom_types:
|
||||||
|
enums: []
|
||||||
|
input_objects: []
|
||||||
|
objects: []
|
||||||
|
scalars: []
|
1
db/metadata/allow_list.yaml
Normal file
1
db/metadata/allow_list.yaml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
- collection: allowed-queries
|
8
db/metadata/cron_triggers.yaml
Normal file
8
db/metadata/cron_triggers.yaml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
- name: daily_reset
|
||||||
|
webhook: https://memo-demo.hasura.app/api/rest/delete_pages
|
||||||
|
schedule: 0 0 * * *
|
||||||
|
include_in_metadata: true
|
||||||
|
payload: {}
|
||||||
|
headers:
|
||||||
|
- value: "***"
|
||||||
|
name: x-hasura-admin-secret
|
35
db/metadata/databases/databases.yaml
Normal file
35
db/metadata/databases/databases.yaml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
- name: default
|
||||||
|
kind: postgres
|
||||||
|
tables:
|
||||||
|
- table:
|
||||||
|
schema: public
|
||||||
|
name: pages
|
||||||
|
insert_permissions:
|
||||||
|
- role: anonymous
|
||||||
|
permission:
|
||||||
|
check: {}
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- content
|
||||||
|
backend_only: false
|
||||||
|
select_permissions:
|
||||||
|
- role: anonymous
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- content
|
||||||
|
filter: {}
|
||||||
|
update_permissions:
|
||||||
|
- role: anonymous
|
||||||
|
permission:
|
||||||
|
columns:
|
||||||
|
- id
|
||||||
|
- content
|
||||||
|
filter: {}
|
||||||
|
check: {}
|
||||||
|
configuration:
|
||||||
|
connection_info:
|
||||||
|
use_prepared_statements: false
|
||||||
|
database_url:
|
||||||
|
from_env: HEROKU_DATABASE_URL
|
||||||
|
isolation_level: read-committed
|
9
db/metadata/query_collections.yaml
Normal file
9
db/metadata/query_collections.yaml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
- name: allowed-queries
|
||||||
|
definition:
|
||||||
|
queries:
|
||||||
|
- name: get page
|
||||||
|
query: "query getPage($id: Int!) {\n page: pages_by_pk(id: $id) {\n id\n content\n }\n}"
|
||||||
|
- name: put page
|
||||||
|
query: "mutation putPage($id: Int, $content: jsonb!) {\n page: insert_pages_one(object: {id: $id, content: $content}, on_conflict: {constraint: pages_pkey, update_columns: content}) {\n id\n content\n }\n}"
|
||||||
|
- name: delete all
|
||||||
|
query: "mutation deleteAll($scheduled_time: String = \"\", $payload: jsonb = {}, $name: String = \"\", $id: String = \"\") {\n delete_pages(where: {id: {_is_null: false}, _or: {content: {_neq: {scheduled_time: $scheduled_time, payload: $payload, name: $name, id: $id}}}}) {\n affected_rows\n }\n}"
|
1
db/metadata/remote_schemas.yaml
Normal file
1
db/metadata/remote_schemas.yaml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[]
|
28
db/metadata/rest_endpoints.yaml
Normal file
28
db/metadata/rest_endpoints.yaml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
- definition:
|
||||||
|
query:
|
||||||
|
collection_name: allowed-queries
|
||||||
|
query_name: delete all
|
||||||
|
url: delete_pages
|
||||||
|
methods:
|
||||||
|
- POST
|
||||||
|
- DELETE
|
||||||
|
name: delete all
|
||||||
|
comment: null
|
||||||
|
- definition:
|
||||||
|
query:
|
||||||
|
collection_name: allowed-queries
|
||||||
|
query_name: get page
|
||||||
|
url: page/:id
|
||||||
|
methods:
|
||||||
|
- GET
|
||||||
|
name: get page
|
||||||
|
comment: null
|
||||||
|
- definition:
|
||||||
|
query:
|
||||||
|
collection_name: allowed-queries
|
||||||
|
query_name: put page
|
||||||
|
url: page/:id
|
||||||
|
methods:
|
||||||
|
- PUT
|
||||||
|
name: put page
|
||||||
|
comment: null
|
1
db/metadata/version.yaml
Normal file
1
db/metadata/version.yaml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
version: 3
|
16
db/migrations/default/1646649644573_init/up.sql
Normal file
16
db/migrations/default/1646649644573_init/up.sql
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
SET check_function_bodies = false;
|
||||||
|
CREATE TABLE public.pages (
|
||||||
|
id integer NOT NULL,
|
||||||
|
content jsonb NOT NULL
|
||||||
|
);
|
||||||
|
CREATE SEQUENCE public.pages_id_seq
|
||||||
|
AS integer
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MINVALUE
|
||||||
|
NO MAXVALUE
|
||||||
|
CACHE 1;
|
||||||
|
ALTER SEQUENCE public.pages_id_seq OWNED BY public.pages.id;
|
||||||
|
ALTER TABLE ONLY public.pages ALTER COLUMN id SET DEFAULT nextval('public.pages_id_seq'::regclass);
|
||||||
|
ALTER TABLE ONLY public.pages
|
||||||
|
ADD CONSTRAINT pages_pkey PRIMARY KEY (id);
|
|
@ -19,6 +19,7 @@
|
||||||
構成としては下記の通りです。
|
構成としては下記の通りです。
|
||||||
|
|
||||||
- [Hasura Cloud](https://cloud.hasura.io/) - すぐに利用可能なHasuraの環境
|
- [Hasura Cloud](https://cloud.hasura.io/) - すぐに利用可能なHasuraの環境
|
||||||
|
- [Heroku Postgres](https://jp.heroku.com/postgres) - すぐに利用可能なデータベース
|
||||||
- [StackBlitz](https://stackblitz.com/) (あるいは、[CodeSandbox](https://codesandbox.io/)) - フロントエンドのオンライン開発環境
|
- [StackBlitz](https://stackblitz.com/) (あるいは、[CodeSandbox](https://codesandbox.io/)) - フロントエンドのオンライン開発環境
|
||||||
- [Vue 3](https://vuejs.org/) - プログレッシブWebフレームワーク
|
- [Vue 3](https://vuejs.org/) - プログレッシブWebフレームワーク
|
||||||
- [Quill](https://quilljs.com/) - リッチテキストエディター
|
- [Quill](https://quilljs.com/) - リッチテキストエディター
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# 目次
|
# 目次
|
||||||
|
|
||||||
- [Hasuraで作るREST API](README.md)
|
- [Hasuraで作るREST API](README.md)
|
||||||
- [Hasura Cloudアカウントの登録](signup-hasura-cloud.md)
|
- [事前準備](preparation.md)
|
||||||
|
- [Herokuのアカウント登録](signup-heroku.md)
|
||||||
|
- [Hasura Cloudのアカウント登録](signup-hasura-cloud.md)
|
||||||
- [Hasura Cloudプロジェクトの作成](create-project.md)
|
- [Hasura Cloudプロジェクトの作成](create-project.md)
|
||||||
- [新しいデータベースへの接続](connect-new-database.md)
|
- [Heroku Postgresへの接続](create-heroku-postgres.md)
|
||||||
- [テーブルの作成](create-table.md)
|
- [テーブルの作成](create-table.md)
|
||||||
- [GraphQLによるデータの挿入と取得](insert-and-select.md)
|
- [GraphQLによるデータの挿入と取得](insert-and-select.md)
|
||||||
- [REST APIエンドポイントの作成](create-rest-endpoint.md)
|
- [REST APIエンドポイントの作成](create-rest-endpoint.md)
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
# 新しいデータベースへの接続
|
|
||||||
|
|
||||||
Hasuraでデータの保存と検索を実現するためにデータベースを接続します。
|
|
||||||
|
|
||||||
このハンズオンでは、データベースとしてNeonを利用します。
|
|
||||||
|
|
||||||
Hasura Cloudのプロジェクトの[Launch Console]ボタンからHasuraのコンソール画面にアクセスして、データベースへの接続を行うことが可能です。
|
|
||||||
|
|
||||||
まず、コンソール > [Data Manager] にアクセスします。
|
|
||||||
|
|
||||||
![](https://lh3.googleusercontent.com/pw/AMWts8CoQ24HeTDkWEXgyNL2hpnvfFfA5yUzsZBMBhIxQ23NNurYBeRQHN6O0i0iNB9CC6dIIh6BvbEKXnJRtMFKjx9A_-Rphry-JdXqKT7RZnYjSVHO9TTPmFDxeil5OfR_TGBDju794zNlrlWLYjtza6pf=w1280)
|
|
||||||
|
|
||||||
[Create New Database]を選択し、データベース作成パネルを表示します。
|
|
||||||
|
|
||||||
![](https://lh3.googleusercontent.com/pw/AMWts8DiTjBZx1rkcFCiBo0CO1fd9IBBgZUeROvmFREer-CGwqGRNtHv-1QsTp87FbezI_t0IQqra_VVUvQKga5wW0FKXxHupWj-LYyZBCbFDhmhg_IkaggyfQL17tjbF4OqFiDFsnGKMPrwgjP8B14E7K3i=w1280)
|
|
||||||
|
|
||||||
[Connect Neon Database]ボタンを選択し、データベースを新たに作成します。
|
|
||||||
|
|
||||||
一連の手順でデータベースを作成すると、Hasuraは自動的にデータベースへの接続を開始します。
|
|
||||||
しばらく待つと、データベースへの接続が完了します。
|
|
||||||
|
|
||||||
これであなたはHasuraを利用可能になりました 🎉
|
|
||||||
|
|
||||||
![](https://lh3.googleusercontent.com/pw/AMWts8DDazdAGQGOMIDPSQzVcNZeEUVtDT9gLN8qgXxQzoZ-rPH2hwlIO3kXBXkzYKvtmkFcUmsQNWhmN2eer_PSQxXTOVDPdCvUX3Q5upxg5qDEcMIhjSspfqHRh0f9M_-edXvmuKm6HS-RnlPN2MIynXQA=w1280)
|
|
||||||
|
|
||||||
それでは実際にHasuraを使ってみましょう!
|
|
31
docs/create-heroku-postgres.md
Normal file
31
docs/create-heroku-postgres.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# Heroku Postgresへの接続
|
||||||
|
|
||||||
|
Hasuraでデータの保存と検索を実現するためにデータベースを接続します。
|
||||||
|
|
||||||
|
このハンズオンでは、データベースとしてHeroku Postgresを利用します。
|
||||||
|
|
||||||
|
Hasura Cloudのプロジェクトの[Launch Console]ボタンからHasuraのコンソール画面にアクセスして、Heroku Postgresへの接続を行うことが可能です。
|
||||||
|
|
||||||
|
まず、コンソール > [Data Manager] にアクセスします。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/ekEWHMTkf2qak5oItkay-scmzeiwiaUtNXBvBdCSVSJ3qG25oVc8O_25S4SEWZskj6NqWSfW2eENeEy3iJ94mTw1SmhnL7tONbS_qHHZsgI4l_6sEIdmMnXTEpmF34-aDS2I3Pi7EQ=w1280)
|
||||||
|
|
||||||
|
[Create Heroku Database]を選択し、データベース作成パネルを表示します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/46sywF2Hl5GGAEsXhAkhhni4_NHcB-kcHiqqJNkZs0HS7zvFy9FZmmWEGLtP-i6F-msLnuJlKPFst8j8_QTCnTcDi1B5diKByqOVDAeuZ_PL1Fo_pDl_DLOBscL-O8ucqZA05_xyjA=w1280)
|
||||||
|
|
||||||
|
[Create Database]ボタンを選択し、Heroku Postgresデータベースを新たに作成します。Herokuとの連携を行う際に、初回アクセス時にはHerokuの承認画面が表示されます。[Allow (許諾)]を選択するとHerokuとの連携が完了します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/RngvddZ704jKqqPfxGiSEdEkBemMwrz3jApRJQhRqL2Cr0MoV-SxVljdLaglM0XFwkcnIpWFD9zVyUtn9n55LGKG78gJPec6HRrWXrcLbNNnHztycmF-sphYYBkHaRT7Y87nzihdNg=w1280)
|
||||||
|
|
||||||
|
一連の手順でHeroku Postgresデータベースを作成すると、Hasuraは自動的にデータベースへの接続を開始します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/-0FkvEXZO0FQz0YvrNFdh8JmAMZPbIpaIRygkE4F8xb4Z3ZLMRH9y5pny48-bj-i2nnhbDuqcPKokbznD7X_APL-MkjDeHaxQsJjFyGEY6AxvMBsHwfNOjxPdjQA6S3dGrW1Cz4o0g=w1280)
|
||||||
|
|
||||||
|
しばらく待つと、データベースへの接続が完了します。
|
||||||
|
|
||||||
|
これであなたはHasuraを利用可能になりました 🎉
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/vJU-gDZJwSNJYAaoq4qu4lAnxhNYGE70rPxmtGct_GyPT9oH0FoZ8_2O8bcI9ocaWHaJsE0Rqv2WHZzO6Z0yGuMkaCtMYjdIKTHW2aREaCYid73GlT6FWLZH9JIQPp_P9QOez0EOBw=w1280)
|
||||||
|
|
||||||
|
それでは実際にHasuraを使ってみましょう!
|
|
@ -25,4 +25,4 @@ Hasuraを利用するためにHasura Cloudのプロジェクトを作成しま
|
||||||
|
|
||||||
![](https://lh3.googleusercontent.com/LL6dz4np-O19_runPMbCD5-d3kYc1_QUcc1bJif4Yx7dNr16SY4k6037kV82aqg1FrcYff3QGOFTqzyh9ReYyp-j43EtGJercr7dKxdBxcd1nDzPm9bbWFgJOYjhwNDUsGRWNV2d2g=w1280)
|
![](https://lh3.googleusercontent.com/LL6dz4np-O19_runPMbCD5-d3kYc1_QUcc1bJif4Yx7dNr16SY4k6037kV82aqg1FrcYff3QGOFTqzyh9ReYyp-j43EtGJercr7dKxdBxcd1nDzPm9bbWFgJOYjhwNDUsGRWNV2d2g=w1280)
|
||||||
|
|
||||||
プロジェクトの[Launch Console]ボタンからHasuraのコンソール画面にアクセスして、データベースへの接続を行いましょう。
|
プロジェクトの[Launch Console]ボタンからHasuraのコンソール画面にアクセスして、Heroku Postgresへの接続を行いましょう。
|
||||||
|
|
8
docs/preparation.md
Normal file
8
docs/preparation.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# 事前準備
|
||||||
|
|
||||||
|
まず、事前準備としてあらかじめ下記のアカウントに登録しておきましょう。
|
||||||
|
|
||||||
|
- [Herokuのアカウント登録](signup-heroku.md)
|
||||||
|
- [Hasura Cloudのアカウント登録](signup-hasura-cloud.md)
|
||||||
|
|
||||||
|
もし、すでにアカウント登録済みであれば、[Hasura Cloudプロジェクトの作成の章](create-project.md)まで読み飛ばしてください。
|
19
docs/signup-heroku.md
Normal file
19
docs/signup-heroku.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Herokuのアカウント登録
|
||||||
|
|
||||||
|
[Herokuの新規登録](https://signup.heroku.com/jp)からアカウントを作成します。
|
||||||
|
|
||||||
|
アカウントに必要な項目を入力します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/Wa1OrwezKqGADEq-TC1ErAMWRKfrKxr1FWqLXuwPyn2GiKQlIbvmA6tCbsPGA0NWwEwKePo2_574LPl7fdwX89mDE8gltPCBRPFQ24GSdpI4tXQsDU5mfk1o1oqMWrmZPxCOJkm64g=w1280)
|
||||||
|
|
||||||
|
入力したメールアドレスに登録用のメールが届くので確認します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/c4IrmzaCjk-SuJ4w9t_7esDEdOT1CGj7gLcWPBZxswSbbmvGyOgPz2rUzPlpkyGqGncId9bMHqDl0hya99s3QbEuWbi9CFMpP04A9Vi8txzdzhNpJxI0o2nxEY9SIcIWVmc1Ncqjrw=w1280)
|
||||||
|
|
||||||
|
メールに記載のリンクにアクセスし、パスワードを設定します。
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/oGniSBYOCGH3Zb56034x_tzQTGWuZF_81PkEEX68Xk5TCHYs_LmyyS0uZAgkBr5RHdZZVSpbxsZWlgyXeqfEp5NTFb4Ry3EV4I-Wxp07TK-9kpvmtuWLYddkJx4mPmEfuj283RZtJA=w1280)
|
||||||
|
|
||||||
|
Herokuにようこそ!
|
||||||
|
|
||||||
|
![](https://lh3.googleusercontent.com/klQnC0-tt3v_lcSGRSa_S6L1PvOxLl_e-BGhL75Lmi0Tei-zqJMtvab1GfcdhuwNqUcOqPjvsWUtzQLNMK_cGSrznFmLtFemCLfUnAQRHoKqdvpIsyshwDi7plwfGHM1y8R0gTyy-Q=w1280)
|
Loading…
Add table
Reference in a new issue