tuuli_app/lib/models/db_column_definition.dart

106 lines
3.3 KiB
Dart

import 'package:tuuli_api/tuuli_api.dart';
extension ColumnsParser on TableDefinition {
List<DBColumnDefinition> get parsedColumns {
return columns
.split(",")
.map((e) {
final parts = e.split(":");
final name = parts[0];
switch (parts[1]) {
case "serial":
return PrimarySerialColumnDefinition(name);
case "str":
return TextColumnDefinition(
name,
parts.contains("unique"),
parts.contains("default"),
);
case "bool":
return BooleanColumnDefinition(
name,
parts.contains("unique"),
parts.contains("default"),
);
case "datetime":
return TimestampColumnDefinition(
name,
parts.contains("unique"),
parts.contains("default"),
);
case "float":
return DoubleColumnDefinition(
name,
parts.contains("unique"),
parts.contains("default"),
);
case "int":
return IntegerColumnDefinition(
name,
parts.contains("unique"),
parts.contains("default"),
);
case "int-user":
return UserRefColumnDefinition(name);
case "int-asset":
return AssetRefColumnDefinition(name);
}
return null;
})
.whereType<DBColumnDefinition>()
.toList(growable: false);
}
}
abstract class DBColumnDefinition {
final String name;
final bool unique;
final bool hasDefault;
DBColumnDefinition({
required this.name,
required this.unique,
required this.hasDefault,
});
}
class PrimarySerialColumnDefinition extends DBColumnDefinition {
PrimarySerialColumnDefinition(String name)
: super(name: name, unique: false, hasDefault: false);
}
class TextColumnDefinition extends DBColumnDefinition {
TextColumnDefinition(String name, bool unique, bool hasDefault)
: super(name: name, unique: unique, hasDefault: hasDefault);
}
class BooleanColumnDefinition extends DBColumnDefinition {
BooleanColumnDefinition(String name, bool unique, bool hasDefault)
: super(name: name, unique: unique, hasDefault: hasDefault);
}
class TimestampColumnDefinition extends DBColumnDefinition {
TimestampColumnDefinition(String name, bool unique, bool hasDefault)
: super(name: name, unique: unique, hasDefault: hasDefault);
}
class DoubleColumnDefinition extends DBColumnDefinition {
DoubleColumnDefinition(String name, bool unique, bool hasDefault)
: super(name: name, unique: unique, hasDefault: hasDefault);
}
class IntegerColumnDefinition extends DBColumnDefinition {
IntegerColumnDefinition(String name, bool unique, bool hasDefault)
: super(name: name, unique: unique, hasDefault: hasDefault);
}
class UserRefColumnDefinition extends DBColumnDefinition {
UserRefColumnDefinition(String name)
: super(name: name, unique: false, hasDefault: false);
}
class AssetRefColumnDefinition extends DBColumnDefinition {
AssetRefColumnDefinition(String name)
: super(name: name, unique: false, hasDefault: false);
}