What is a lot of fucking work!

This commit is contained in:
Andrew 2023-04-23 16:35:02 +07:00
parent 85c07ed4f3
commit 3414b5c334
8 changed files with 586 additions and 216 deletions

107
utils.py
View file

@ -1,17 +1,12 @@
from based.db import DBConnector
from based.columns import (
ColumnDefinition,
make_column_unique,
PrimarySerialColumnDefinition,
PrimaryUUIDColumnDefinition,
TextColumnDefinition,
BigintColumnDefinition,
BooleanColumnDefinition,
DateColumnDefinition,
TimestampColumnDefinition,
DoubleColumnDefinition,
IntegerColumnDefinition,
UUIDColumnDefinition,
)
from dba import get_user_by_access_token
@ -34,82 +29,40 @@ def get_column_from_definition(definition: str) -> ColumnDefinition | None:
case [name, "serial", "primary"]:
return PrimarySerialColumnDefinition(name)
case [name, "uuid", "primary"]:
return PrimaryUUIDColumnDefinition(name)
case [name, "str", *rest]:
is_unique = "unique" in rest
has_default = "default" in rest
td = TextColumnDefinition(name, unique=is_unique)
td.has_default = has_default
return td
case [name, "str"]:
return TextColumnDefinition(name)
case [name, "str", "unique"]:
return make_column_unique(TextColumnDefinition(name))
case [name, "str", "default", default]:
return TextColumnDefinition(name, default=default)
case [name, "str", "default", default, "unique"]:
return make_column_unique(TextColumnDefinition(name, default=default))
case [name, "bool", *rest]:
is_unique = "unique" in rest
has_default = "default" in rest
td = BooleanColumnDefinition(name, unique=is_unique)
td.has_default = has_default
return td
case [name, "bigint"]:
return BigintColumnDefinition(name)
case [name, "bigint", "unique"]:
return make_column_unique(BigintColumnDefinition(name))
case [name, "bigint", "default", default]:
return BigintColumnDefinition(name, default=int(default))
case [name, "bigint", "default", default, "unique"]:
return make_column_unique(
BigintColumnDefinition(name, default=int(default))
)
case [name, "datetime", *rest]:
is_unique = "unique" in rest
has_default = "default" in rest
td = TimestampColumnDefinition(name, unique=is_unique)
td.has_default = has_default
return td
case [name, "bool"]:
return BooleanColumnDefinition(name)
case [name, "bool", "unique"]:
return make_column_unique(BooleanColumnDefinition(name))
case [name, "bool", "default", default]:
return BooleanColumnDefinition(name, default=bool(default))
case [name, "bool", "default", default, "unique"]:
return make_column_unique(
BooleanColumnDefinition(name, default=bool(default))
)
case [name, "float", *rest]:
is_unique = "unique" in rest
has_default = "default" in rest
td = DoubleColumnDefinition(name, unique=is_unique)
td.has_default = has_default
return td
case [name, "date"]:
return DateColumnDefinition(name)
case [name, "date", "unique"]:
return make_column_unique(DateColumnDefinition(name))
# TODO: Add default value for date
case [name, "datetime"]:
return TimestampColumnDefinition(name)
case [name, "datetime", "unique"]:
return make_column_unique(TimestampColumnDefinition(name))
# TODO: Add default value for timestamp
case [name, "float"]:
return DoubleColumnDefinition(name)
case [name, "float", "unique"]:
return make_column_unique(DoubleColumnDefinition(name))
case [name, "float", "default", default]:
return DoubleColumnDefinition(name, default=float(default))
case [name, "float", "default", default, "unique"]:
return make_column_unique(
DoubleColumnDefinition(name, default=float(default))
)
case [name, "int"]:
return IntegerColumnDefinition(name)
case [name, "int", "unique"]:
return make_column_unique(IntegerColumnDefinition(name))
case [name, "int", "default", default]:
return IntegerColumnDefinition(name, default=int(default))
case [name, "int", "default", default, "unique"]:
return make_column_unique(
IntegerColumnDefinition(name, default=int(default))
)
case [name, "uuid"]:
return UUIDColumnDefinition(name)
case [name, "uuid", "unique"]:
return make_column_unique(UUIDColumnDefinition(name))
case [name, "uuid", "default", default]:
return UUIDColumnDefinition(name, default=default)
case [name, "uuid", "default", default, "unique"]:
return make_column_unique(UUIDColumnDefinition(name, default=default))
case [name, "int", *rest]:
is_unique = "unique" in rest
has_default = "default" in rest
td = IntegerColumnDefinition(name, unique=is_unique)
td.has_default = has_default
return td
return None