成果物

sample

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/818b32ae-bd66-4fab-b1e4-1385df36e288/630e7bd87a882d2cebfed00515df1c24.gif

repository

https://github.com/somen440/flutter-go-todo

技術スタック

ディレクトリ構成

.
├── client
│   ├── lib
│   │   ├── api
│   │   │   ├── grpc_client
│   │   │   │   └── todo_client
│   │   │   └── pb
│   │   │       └── todo
│   │   ├── config
│   │   ├── models
│   │   │   ├── controllers
│   │   │   │   └── todo_list_controller
│   │   │   ├── entities
│   │   │   │   └── todo
│   │   │   └── repositories
│   │   │       └── todo_repository
│   │   ├── pages
│   │   │   └── todo_list_page
│   │   │       └── todo_tile
│   │   ├── util
│   │   └── widget
│   │       └── error_popup
│   └── test
│       └── model
│           ├── controllers
│           │   └── todo
│           └── entities
│               └── todo
├── protos
│   └── todo
└── server
    ├── cmd
    │   ├── app
    │   └── batch-n
    ├── internal
    │   ├── adapter
    │   │   └── todo
    │   ├── config
    │   ├── di
    │   ├── domain
    │   │   ├── entity
    │   │   │   └── todo
    │   │   ├── repository
    │   │   │   └── todo
    │   │   └── service
    │   │       └── todo
    │   ├── infrastructure
    │   │   ├── grpc
    │   │   └── inmemory
    │   │       └── todo
    │   ├── pb
    │   │   └── todo
    │   ├── usecase
    │   │   └── todo
    │   └── util
    └── test
        └── e2e
            └── util

詳細

gRPC

timestamp について, 厳密に ecosystem の流儀に乗っ取る場合, https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto を使うのが正しそう。今回は省略して, RFC3339 形式の文字列を timestamp として扱ってる。

Makefile などタスクランナーに自動生成ファイルスクリプトをおいて置くと便利。あとは protoc がバージョンによって挙動がかなり変わることがあるので, バージョンを明記しておくなりしておかないとすぐ壊れそう。