migrate<T extends Model> static method
Implementation
static Future<void> migrate<T extends Model>({required T Function(Map<String, dynamic>) constructor, Map<String, String>? columnDefinitions}) async {
_jsonConstructors[T] = constructor;
try {
if (columnDefinitions != null && columnDefinitions.isNotEmpty) {
final tableName = _getTableName<T>();
final allColumns = {..._columnDefinitions, ...columnDefinitions};
final columnsDef = allColumns.entries.map((e) => '${e.key} ${e.value}').join(', ');
await _database.execute('''
CREATE TABLE IF NOT EXISTS $tableName (
$columnsDef
)
''');
// Performance indexes
await _database.execute('''
CREATE INDEX IF NOT EXISTS idx_${tableName}_uuid
ON $tableName (uuid)
''');
await _database.execute('''
CREATE INDEX IF NOT EXISTS idx_${tableName}_created_at
ON $tableName (created_at)
''');
}
}catch(e, s) {
App().archeryLogger.error("Migration Error", {"origin": "PostgresModel.migrate", "error": e.toString(), "stack": s.toString()});
}
}