From d6f7b6c587ead35746c25a49989d18fb03981a5e Mon Sep 17 00:00:00 2001
From: Mart van Santen <mart@greenhost.nl>
Date: Thu, 18 Nov 2021 11:49:36 +0100
Subject: [PATCH] Make DB migrations

---
 helmchart/single-sign-on/values.yaml          | 20 +++++++------
 .../{207081778bb2_.py => 4cdc1d4ed8d1_.py}    | 27 +++++++++--------
 login/migrations/versions/9817fa267190_.py    | 28 -----------------
 login/migrations/versions/ca13699053b3_.py    | 30 -------------------
 login/models.py                               | 15 ++++------
 5 files changed, 32 insertions(+), 88 deletions(-)
 rename login/migrations/versions/{207081778bb2_.py => 4cdc1d4ed8d1_.py} (64%)
 delete mode 100644 login/migrations/versions/9817fa267190_.py
 delete mode 100644 login/migrations/versions/ca13699053b3_.py

diff --git a/helmchart/single-sign-on/values.yaml b/helmchart/single-sign-on/values.yaml
index 1d2b6a0..c308962 100644
--- a/helmchart/single-sign-on/values.yaml
+++ b/helmchart/single-sign-on/values.yaml
@@ -91,9 +91,19 @@ kratos:
       tag: v0.7.3-alpha.1
 
   kratos:
-    # TODO: This schema is not complete yet. This schema is 
+    # TODO: This schema is not complete yet. This schema is
     #       put on the config disk as a seperate file by the
     #       helm chart
+    #
+    #       Email verification for now disabled. This need to be changed
+    #       eventually. However, first the basic flow and sending out
+    #       email notifications need to be fixed.
+    #       This should be under "org.sh/kratos" in above schema
+    #
+    #                    "verification": {
+    #                     "via": "email"
+    #                  },
+
     identitySchemas:
       "identity.default.schema.json": | 
         {
@@ -136,14 +146,6 @@ kratos:
         }
 
 
-# TODO: Email verification for now disabled. This need to be changed
-#       eventually. However, first the basic flow and sending out
-#       email notifications need to be fixed. 
-#       This should be under "org.sh/kratos" in above schema
-#
-#                    "verification": {
-#                     "via": "email"
-#                  },
 
     # We included our own (forked) template to handle this job
     autoMigrate: false
diff --git a/login/migrations/versions/207081778bb2_.py b/login/migrations/versions/4cdc1d4ed8d1_.py
similarity index 64%
rename from login/migrations/versions/207081778bb2_.py
rename to login/migrations/versions/4cdc1d4ed8d1_.py
index b9e3c65..bfd4def 100644
--- a/login/migrations/versions/207081778bb2_.py
+++ b/login/migrations/versions/4cdc1d4ed8d1_.py
@@ -1,8 +1,8 @@
 """empty message
 
-Revision ID: 207081778bb2
+Revision ID: 4cdc1d4ed8d1
 Revises: 
-Create Date: 2021-11-16 08:18:27.697307
+Create Date: 2021-11-18 11:46:33.222668
 
 """
 from alembic import op
@@ -10,7 +10,7 @@ import sqlalchemy as sa
 
 
 # revision identifiers, used by Alembic.
-revision = '207081778bb2'
+revision = '4cdc1d4ed8d1'
 down_revision = None
 branch_labels = None
 depends_on = None
@@ -18,25 +18,28 @@ depends_on = None
 
 def upgrade():
     # ### commands auto generated by Alembic - please adjust! ###
-    op.create_table('apps',
+    op.create_table('app',
     sa.Column('id', sa.Integer(), nullable=False),
     sa.Column('name', sa.String(), nullable=True),
     sa.Column('slug', sa.String(), nullable=True),
     sa.PrimaryKeyConstraint('id'),
     sa.UniqueConstraint('slug')
     )
-    op.create_table('users',
+    op.create_table('user',
     sa.Column('id', sa.Integer(), nullable=False),
     sa.Column('email', sa.String(), nullable=True),
+    sa.Column('kratos_id', sa.String(), nullable=True),
+    sa.Column('admin', sa.Boolean(), nullable=True),
     sa.PrimaryKeyConstraint('id'),
-    sa.UniqueConstraint('email')
+    sa.UniqueConstraint('email'),
+    sa.UniqueConstraint('kratos_id')
     )
-    op.create_table('user_app_roles',
+    op.create_table('app_role',
     sa.Column('user_id', sa.Integer(), nullable=False),
     sa.Column('app_id', sa.Integer(), nullable=False),
     sa.Column('role', sa.String(), nullable=True),
-    sa.ForeignKeyConstraint(['app_id'], ['apps.id'], ),
-    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
+    sa.ForeignKeyConstraint(['app_id'], ['app.id'], ),
+    sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
     sa.PrimaryKeyConstraint('user_id', 'app_id')
     )
     # ### end Alembic commands ###
@@ -44,7 +47,7 @@ def upgrade():
 
 def downgrade():
     # ### commands auto generated by Alembic - please adjust! ###
-    op.drop_table('user_app_roles')
-    op.drop_table('users')
-    op.drop_table('apps')
+    op.drop_table('app_role')
+    op.drop_table('user')
+    op.drop_table('app')
     # ### end Alembic commands ###
diff --git a/login/migrations/versions/9817fa267190_.py b/login/migrations/versions/9817fa267190_.py
deleted file mode 100644
index 821b442..0000000
--- a/login/migrations/versions/9817fa267190_.py
+++ /dev/null
@@ -1,28 +0,0 @@
-"""empty message
-
-Revision ID: 9817fa267190
-Revises: 207081778bb2
-Create Date: 2021-11-16 08:41:26.106815
-
-"""
-from alembic import op
-import sqlalchemy as sa
-
-
-# revision identifiers, used by Alembic.
-revision = '9817fa267190'
-down_revision = '207081778bb2'
-branch_labels = None
-depends_on = None
-
-
-def upgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.add_column('users', sa.Column('admin', sa.Boolean(), nullable=True))
-    # ### end Alembic commands ###
-
-
-def downgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.drop_column('users', 'admin')
-    # ### end Alembic commands ###
diff --git a/login/migrations/versions/ca13699053b3_.py b/login/migrations/versions/ca13699053b3_.py
deleted file mode 100644
index deb1b34..0000000
--- a/login/migrations/versions/ca13699053b3_.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""empty message
-
-Revision ID: ca13699053b3
-Revises: 9817fa267190
-Create Date: 2021-11-16 10:34:23.890576
-
-"""
-from alembic import op
-import sqlalchemy as sa
-
-
-# revision identifiers, used by Alembic.
-revision = 'ca13699053b3'
-down_revision = '9817fa267190'
-branch_labels = None
-depends_on = None
-
-
-def upgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.add_column('users', sa.Column('kratos_id', sa.String(), nullable=True))
-    op.create_unique_constraint(None, 'users', ['kratos_id'])
-    # ### end Alembic commands ###
-
-
-def downgrade():
-    # ### commands auto generated by Alembic - please adjust! ###
-    op.drop_constraint(None, 'users', type_='unique')
-    op.drop_column('users', 'kratos_id')
-    # ### end Alembic commands ###
diff --git a/login/models.py b/login/models.py
index c4caa00..a14b6b6 100644
--- a/login/models.py
+++ b/login/models.py
@@ -8,14 +8,13 @@ from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
 
 # User model
 class User(db.Model):
-    __tablename__ = 'users'
 
     id = db.Column(Integer, primary_key=True)
     email = db.Column(String, unique=True)
     kratos_id = db.Column(String, unique=True)
     admin = db.Column(Boolean, default=False)
 
-    app_roles = relationship('AppRole', back_populates="user")
+#    app_roles = relationship('AppRole', back_populates="users")
 
     def __repr__(self):
         return f"{self.id} <{self.email}>"
@@ -23,7 +22,6 @@ class User(db.Model):
 
 # App model
 class App(db.Model):
-    __tablename__ = 'apps'
 
     id = db.Column(Integer, primary_key=True)
     name = db.Column(String())
@@ -35,14 +33,13 @@ class App(db.Model):
 
 # App role
 class AppRole(db.Model):
-    __tablename__ = 'user_app_roles'
 
-    user_id = db.Column(Integer, ForeignKey('users.id'), primary_key=True)
-    user = relationship("User", back_populates="app_roles")
-
-    app_id = db.Column(Integer, ForeignKey('apps.id'),
+    user_id = db.Column(Integer, ForeignKey('user.id'), primary_key=True)
+    app_id = db.Column(Integer, ForeignKey('app.id'),
                              primary_key=True)
-    app = relationship("App")
+
+#    user = relationship("User", back_populates="approle")
+#    app = relationship("App")
 
     role = db.Column(String)
 
-- 
GitLab