From 914471499430e970464f6eef42037865a653a624 Mon Sep 17 00:00:00 2001
From: hygienic-books <hygienic-books@tentic.net>
Date: Thu, 5 May 2022 02:59:23 +0200
Subject: [PATCH] feat(db): Expand database via alembic t include users and
 time budgets

---
 ...aeaa1_rename_tables_columns_to_be_more_.py | 100 +++++++++++++
 .../64bc9837edef_add_time_budgets_table.py    |  40 ++++++
 .../68d8f4d96043_add_kodi_instances_table.py  |  20 +--
 db/versions/7218e9517c00_add_users_table.py   |  30 ++++
 ...7_replace_dashes_in_column_table_names_.py | 136 ++++++++++++++++++
 5 files changed, 317 insertions(+), 9 deletions(-)
 create mode 100644 db/versions/2da14bfaeaa1_rename_tables_columns_to_be_more_.py
 create mode 100644 db/versions/64bc9837edef_add_time_budgets_table.py
 create mode 100644 db/versions/7218e9517c00_add_users_table.py
 create mode 100644 db/versions/954ded90cc97_replace_dashes_in_column_table_names_.py

diff --git a/db/versions/2da14bfaeaa1_rename_tables_columns_to_be_more_.py b/db/versions/2da14bfaeaa1_rename_tables_columns_to_be_more_.py
new file mode 100644
index 0000000..6e2d5b5
--- /dev/null
+++ b/db/versions/2da14bfaeaa1_rename_tables_columns_to_be_more_.py
@@ -0,0 +1,100 @@
+"""Rename tables, columns to be more descriptive
+
+Revision ID: 2da14bfaeaa1
+Revises: 954ded90cc97
+Create Date: 2022-05-05 02:36:43.563735
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '2da14bfaeaa1'
+down_revision = '954ded90cc97'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.rename_table(u"time_budget", u"time_budgets")
+
+    op.drop_constraint(u"FK_time-budget_users", "time_budgets", type_="foreignkey")
+    op.alter_column(
+        u"users",
+        u"id",
+        new_column_name=u"user_id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+    op.create_foreign_key(
+        u"FK__time_budgets__users",
+        u"time_budgets",
+        u"users",
+        [u"user_id"],
+        [u"user_id"],
+        onupdate="CASCADE",
+        ondelete="RESTRICT")
+
+    op.alter_column(
+        u"time_budgets",
+        u"time_budget_s",
+        new_column_name=u"time_budget",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+    op.alter_column(
+        u"time_budgets",
+        u"id",
+        new_column_name=u"budget_id",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+
+    op.alter_column(
+        u"kodi_instances",
+        u"id",
+        new_column_name=u"instance_id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+
+
+def downgrade():
+    op.alter_column(
+        u"kodi_instances",
+        u"instance_id",
+        new_column_name=u"id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+
+    op.alter_column(
+        u"time_budgets",
+        u"budget_id",
+        new_column_name=u"id",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+    op.alter_column(
+        u"time_budgets",
+        u"time_budget",
+        new_column_name=u"time_budget_s",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+
+    op.drop_constraint(u"FK__time_budgets__users", "time_budgets", type_="foreignkey")
+    op.alter_column(
+        u"users",
+        u"user_id",
+        new_column_name=u"id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+    op.create_foreign_key(
+        u"FK_time-budget_users",
+        u"time_budgets",
+        u"users",
+        [u"user_id"],
+        [u"id"],
+        onupdate="CASCADE",
+        ondelete="RESTRICT")
+
+    op.rename_table(u"time_budgets", u"time_budget")
diff --git a/db/versions/64bc9837edef_add_time_budgets_table.py b/db/versions/64bc9837edef_add_time_budgets_table.py
new file mode 100644
index 0000000..57695bc
--- /dev/null
+++ b/db/versions/64bc9837edef_add_time_budgets_table.py
@@ -0,0 +1,40 @@
+"""Add time budgets table
+
+Revision ID: 64bc9837edef
+Revises: 7218e9517c00
+Create Date: 2022-05-05 01:14:04.395901
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '64bc9837edef'
+down_revision = '7218e9517c00'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.create_table(
+        u"time-budget",
+        sa.Column(u"id", sa.Integer, primary_key=True),
+        sa.Column(u"user-id", sa.Integer, nullable=False),
+        sa.Column(u"time-budget-s", sa.Integer, nullable=False, server_default=u"0"),
+        mysql_charset="utf8",
+        mysql_collate="utf8_unicode_ci"
+    )
+    op.create_foreign_key(
+        u"FK_time-budget_users",
+        u"time-budget",
+        u"users",
+        [u"user-id"],
+        [u"id"],
+        onupdate="CASCADE",
+        ondelete="RESTRICT")
+
+
+def downgrade():
+    op.drop_constraint(u"FK_time-budget_users", "time-budget", type_="foreignkey")
+    op.drop_table(u"time-budget")
diff --git a/db/versions/68d8f4d96043_add_kodi_instances_table.py b/db/versions/68d8f4d96043_add_kodi_instances_table.py
index 8cc0fd5..67a92f7 100644
--- a/db/versions/68d8f4d96043_add_kodi_instances_table.py
+++ b/db/versions/68d8f4d96043_add_kodi_instances_table.py
@@ -18,16 +18,18 @@ depends_on = None
 
 def upgrade():
     op.create_table(
-        'kodi-instances',
-        sa.Column('id', sa.Integer, primary_key=True),
-        sa.Column('webserver-proto', sa.String(10), nullable=False, server_default="ws"),
-        sa.Column('webserver-addr', sa.String(40), nullable=False, server_default="localhost"),
-        sa.Column('webserver-port', sa.Integer, nullable=False, server_default="8080"),
-        sa.Column('webserver-jsonrpcpath', sa.String(10), nullable=False, server_default="/jsonrpc"),
-        sa.Column('webserver-username', sa.String(48)),
-        sa.Column('webserver-password', sa.String(48))
+        u"kodi-instances",
+        sa.Column(u"id", sa.Integer, primary_key=True),
+        sa.Column(u"webserver-proto", sa.String(10), nullable=False, server_default=u"ws"),
+        sa.Column(u"webserver-addr", sa.String(40), nullable=False, server_default=u"localhost"),
+        sa.Column(u"webserver-port", sa.Integer, nullable=False, server_default=u"8080"),
+        sa.Column(u"webserver-jsonrpcpath", sa.String(10), nullable=False, server_default=u"/jsonrpc"),
+        sa.Column(u"webserver-username", sa.String(48)),
+        sa.Column(u"webserver-password", sa.String(48)),
+        mysql_charset="utf8",
+        mysql_collate="utf8_unicode_ci"
     )
 
 
 def downgrade():
-    op.drop_table('kodi-instances')
+    op.drop_table(u"kodi-instances")
diff --git a/db/versions/7218e9517c00_add_users_table.py b/db/versions/7218e9517c00_add_users_table.py
new file mode 100644
index 0000000..ad107e7
--- /dev/null
+++ b/db/versions/7218e9517c00_add_users_table.py
@@ -0,0 +1,30 @@
+"""Add users table
+
+Revision ID: 7218e9517c00
+Revises: 68d8f4d96043
+Create Date: 2022-05-04 22:49:36.690140
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '7218e9517c00'
+down_revision = '68d8f4d96043'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.create_table(
+        u"users",
+        sa.Column(u"id", sa.Integer, primary_key=True),
+        sa.Column(u"username", sa.String(48), nullable=False),
+        mysql_charset="utf8",
+        mysql_collate="utf8_unicode_ci"
+    )
+
+
+def downgrade():
+    op.drop_table(u"users")
diff --git a/db/versions/954ded90cc97_replace_dashes_in_column_table_names_.py b/db/versions/954ded90cc97_replace_dashes_in_column_table_names_.py
new file mode 100644
index 0000000..a3fa4c1
--- /dev/null
+++ b/db/versions/954ded90cc97_replace_dashes_in_column_table_names_.py
@@ -0,0 +1,136 @@
+"""Replace dashes in column, table names with underscores
+
+Revision ID: 954ded90cc97
+Revises: 64bc9837edef
+Create Date: 2022-05-05 01:43:15.068725
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '954ded90cc97'
+down_revision = '64bc9837edef'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    op.rename_table(u"kodi-instances", u"kodi_instances")
+    op.rename_table(u"time-budget", u"time_budget")
+
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-proto",
+        new_column_name=u"webserver_proto",
+        existing_type=sa.String(10),
+        existing_nullable=False,
+        existing_server_default=u"ws")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-addr",
+        new_column_name=u"webserver_addr",
+        existing_type=sa.String(40),
+        existing_nullable=False,
+        existing_server_default=u"localhost")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-port",
+        new_column_name=u"webserver_port",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"8080")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-jsonrpcpath",
+        new_column_name=u"webserver_jsonrpcpath",
+        existing_type=sa.String(10),
+        existing_nullable=False,
+        existing_server_default=u"/jsonrpc")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-username",
+        new_column_name=u"webserver_username",
+        existing_type=sa.String(48),
+        existing_nullable=True)
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver-password",
+        new_column_name=u"webserver_password",
+        existing_type=sa.String(48),
+        existing_nullable=True)
+
+    op.alter_column(
+        u"time_budget",
+        u"user-id",
+        new_column_name=u"user_id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+    op.alter_column(
+        u"time_budget",
+        u"time-budget-s",
+        new_column_name=u"time_budget_s",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+
+
+def downgrade():
+    op.alter_column(
+        u"time_budget",
+        u"user_id",
+        new_column_name=u"user-id",
+        existing_type=sa.Integer,
+        existing_nullable=False)
+    op.alter_column(
+        u"time_budget",
+        u"time_budget_s",
+        new_column_name=u"time-budget-s",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"0")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_proto",
+        new_column_name=u"webserver-proto",
+        existing_type=sa.String(10),
+        existing_nullable=False,
+        existing_server_default=u"ws")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_addr",
+        new_column_name=u"webserver-addr",
+        existing_type=sa.String(40),
+        existing_nullable=False,
+        existing_server_default=u"localhost")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_port",
+        new_column_name=u"webserver-port",
+        existing_type=sa.Integer,
+        existing_nullable=False,
+        existing_server_default=u"8080")
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_jsonrpcpath",
+        new_column_name=u"webserver-jsonrpcpath",
+        existing_type=sa.String(10),
+        existing_nullable=False,
+        existing_server_default=u"/jsonrpc")
+
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_username",
+        new_column_name=u"webserver-username",
+        existing_type=sa.String(48),
+        existing_nullable=True)
+    op.alter_column(
+        u"kodi_instances",
+        u"webserver_password",
+        new_column_name=u"webserver-password",
+        existing_type=sa.String(48),
+        existing_nullable=True)
+
+    op.rename_table(u"time_budget", u"time-budget")
+    op.rename_table(u"kodi_instances", u"kodi-instances")