🧩
Serverpod 1.0.0覚え書き2
大きな目標
Serverpodについて理解し、活用できるようになる。
現状
CURDのbackendでの設定と、Flutter側からの読み込み、の2本のtutorial動画を2周した。
わかったこと
- まずDockerを立ち上げる。
- terminalで serverpod create PROJECT
- 自動的にPROJECT_server, PROJECT_client, PROJECT_flutterという三つのdirectoryができる。
- まずP_server内にendpointを設定する。
lib/src/endpoints/articool_endpoint.dart
import 'package:serverpod/serverpod.dart';
class ArticoolEndpoint extends Endpoint {
//Fetch article from DB
Future<List<Article>> getArticles(
Session session,
String? keyword,
) async {
return " ";
}
}
とりあえずこんな感じ。
申し訳ないけれど、Flutterなら(Key key)って書きそうなところが(Session session)になってるなあ、くらいの理解度。
でも、これはFlutterのmodelとかではなくて、serverに書いてるんだよ、という。
- protocolフオルダ(勝手にできてる)内にyaml fileを書く。
lib/src/protocol/article_class.yaml
class: Article
table: article
fields:
title: String
content: String
publishedOn: DateTime
isPrime: bool
とりあえずこんな感じ。
- terminalで serverpod generate と打つと、組み込まれているPostgreSQLにDBとtableとfieldsが生成される。
- ついでにアクセス用のpasswordなんかも全部、config/passwords.yaml内にできている。
- そのほか、あっちこっちに「関連のfile」ができているらしい。
ちなみに、 serverpod generate --watch と打っておくと、更新が自動であっちこっちに反映され、同期されていく。この「あっちこっちに勝手にできる」感が、便利というのか、わけわからんというか、もうまるっきり、自分でどうにかできる世界ではない、という気だけがひしひしとする。
それどころか「自動で生成されています、修正しないでください」というfileまである。
- endpointに戻って、さっき作ったDBに合わせて、CRUDの関数を書いていく。
import 'package:serverpod/serverpod.dart';
import '../generated/article_class.dart';
class ArticoolEndpoint extends Endpoint {
//Fetch article from DB
Future<List<Article>> getArticles(
Session session,
String? keyword,
) async {
return await Article.find(
session,
where: (t) =>
keyword != null ? t.title.like('%$keyword%') : Constant(true),
);
}
//Add article in DB
Future<bool> addArticle(Session session, Article article) async {
await Article.insert(session, article);
return true;
}
//Update article
Future<bool> updateArticle(Session session, Article article) async {
var result = await Article.update(session, article);
return result;
}
//Delete article
Future<bool> deleteArticle(Session session, int id) async {
var result = await Article.delete(session, where: (t) => t.id.equals(id));
return result == 1;
}
}
こんな感じ。
- terminalに docker-compose up --build --detach と打つ。
- さらにterminalで dart bin/main.dart と打つ。
- すると localhost:8080に ok と表示されて、これが「準備万端」という意味らしい。
- posticoというかわいいゾウさんを導入する。MySQLのWorkbenchに相当するヤツ。
- config/development.yamlに生成されている
# This is the database setup for your server.
database:
host: localhost
port: 8090
name: articool
user: postgres
や、config/passwords.yamlの
# These are passwords used when running the server locally in development mode
development:
database: 'd0_Uk8qYVUKW3xR_bAkNkTq0XUGZrdah'
redis: 'obyREhB-q00aPF5C2I31sYery4dSwTA9'
を見ながらposticoの接続をする。
ここが抜けていたので追加
server直下のgenerated (lib/src下のgeneratedではない)内の
table.pgsql を全部コピーして、
posticoの SQL query に貼り付け
全選択して Execute Selectionボタンを押すと tableができ、fieldも既にそこにある
- DBもtableもfieldもできているので、適当にいくつか情報を入れて、Flutter側からの呼び出しに備える。
Discussion