Dartマイグレーションツール構想
欲しい機能
- モデルのリビジョン作成
- データ移行関数(
dryrun あり)
流れ
path/to/models/ から @Migratable() がついたモデルを path/to/migrations/ または model.migration.dart にコピー
- 移動したモデルをリネーム (
User -> UserV2)
- マイグレータに一つ前から最新のモデルへの変換ヘルパー関数が実装される
最新のモデル
part of 'user.g.dart';
@Migratable(prev: 'v3')
class User {
String name;
factory fromV2(UserV2 user) {
throw NotImplementedException();
}
}
マイグレータ
- どれかのスキーマが1ミリでも変わるとバージョンが上がる :thinking_face:
- バージョン間でモデル同士が独立しているわけではないので, 一つ前のバージョンからのデータ移行関数を生成.
- 特定のバージョンから最新バージョンにデータ移行するためには連鎖的にマイグレーションする
- 一つ前のバージョンからデータを取得 -> 変換関数を使って新しいデータに変換
class SchemaVersion {
static const v0 = 'v0';
static const v1 = 'v1';
}
class Migrator {
Future<void> _migrateFromV0ToV1() {...}
Future<void> _migrateFromV1ToV2() {...}
Future<void> migrate(String currentVersion) {
}
}