diff --git a/migrations/versions/3fe66efb6088_.py b/migrations/versions/3fe66efb6088_.py new file mode 100644 index 0000000000000000000000000000000000000000..0a2fc98542eac5803cad4b0a37f34512a10c183b --- /dev/null +++ b/migrations/versions/3fe66efb6088_.py @@ -0,0 +1,73 @@ +""" empty message + +Revision ID: 3fe66efb6088 +Revises: +Create Date: 2019-09-14 12:13:37.847931 +""" +from alembic import op +import sqlalchemy as sa + + +revision = '3fe66efb6088' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('service', + sa.Column('protocol', sa.String(length=25), nullable=True), + sa.Column('name', sa.String(length=255), nullable=True), + sa.Column('description', sa.String(), nullable=True), + sa.Column('max_profiles', sa.Integer(), nullable=True), + sa.Column('config', sa.String(), nullable=True), + sa.Column('uuid', sa.String(length=36), nullable=False), + sa.Column('created_at', sa.Date(), nullable=False), + sa.Column('updated_at', sa.Date(), nullable=True), + sa.Column('comment', sa.String(length=255), nullable=True), + sa.PrimaryKeyConstraint('uuid') + ) + op.create_table('user', + sa.Column('username', sa.String(length=255), nullable=False), + sa.Column('uuid', sa.String(length=36), nullable=False), + sa.Column('created_at', sa.Date(), nullable=False), + sa.Column('updated_at', sa.Date(), nullable=True), + sa.Column('comment', sa.String(length=255), nullable=True), + sa.PrimaryKeyConstraint('uuid'), + sa.UniqueConstraint('username') + ) + op.create_table('auth', + sa.Column('user_uuid', sa.String(length=36), nullable=True), + sa.Column('value', sa.String(), nullable=True), + sa.Column('extra', sa.String(), nullable=True), + sa.Column('uuid', sa.String(length=36), nullable=False), + sa.Column('created_at', sa.Date(), nullable=False), + sa.Column('updated_at', sa.Date(), nullable=True), + sa.Column('comment', sa.String(length=255), nullable=True), + sa.ForeignKeyConstraint(['user_uuid'], ['user.uuid'], ), + sa.PrimaryKeyConstraint('uuid') + ) + op.create_table('profile', + sa.Column('user_uuid', sa.String(length=36), nullable=True), + sa.Column('service_uuid', sa.String(length=36), nullable=True), + sa.Column('username', sa.String(length=255), nullable=False), + sa.Column('status', sa.String(length=25), nullable=False), + sa.Column('uuid', sa.String(length=36), nullable=False), + sa.Column('created_at', sa.Date(), nullable=False), + sa.Column('updated_at', sa.Date(), nullable=True), + sa.Column('comment', sa.String(length=255), nullable=True), + sa.ForeignKeyConstraint(['service_uuid'], ['service.uuid'], ), + sa.ForeignKeyConstraint(['user_uuid'], ['user.uuid'], ), + sa.PrimaryKeyConstraint('uuid') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('profile') + op.drop_table('auth') + op.drop_table('user') + op.drop_table('service') + # ### end Alembic commands ### diff --git a/migrations/versions/546912a5c987_.py b/migrations/versions/546912a5c987_.py deleted file mode 100644 index 80e798d1ab4b7a9eb8b19a56d932243942a36447..0000000000000000000000000000000000000000 --- a/migrations/versions/546912a5c987_.py +++ /dev/null @@ -1,26 +0,0 @@ -""" Add a uuid per profile - -Revision ID: 546912a5c987 -Revises: a95b3a78f983 -Create Date: 2019-09-12 22:32:19.352747 -""" -from alembic import op -import sqlalchemy as sa - - -revision = '546912a5c987' -down_revision = 'a95b3a78f983' -branch_labels = None -depends_on = None - - -def upgrade(): - with op.batch_alter_table('profile') as batch: - batch.add_column(sa.Column('uuid', sa.String(length=36))) - batch.create_unique_constraint('profile_unique', ['uuid']) - - -def downgrade(): - with op.batch_alter_table('profile') as batch: - batch.drop_constraint('profile_unique', type_='unique') - batch.drop_column('uuid') diff --git a/migrations/versions/a95b3a78f983_.py b/migrations/versions/a95b3a78f983_.py deleted file mode 100644 index a53916a70feff5962d13bd10901aaafe7a281025..0000000000000000000000000000000000000000 --- a/migrations/versions/a95b3a78f983_.py +++ /dev/null @@ -1,68 +0,0 @@ -""" Create initial schemas - -Revision ID: a95b3a78f983 -Revises: -Create Date: 2019-09-10 21:33:43.332000 -""" - -from alembic import op -import sqlalchemy as sa - - -revision = 'a95b3a78f983' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - op.create_table('service', - sa.Column('spn', sa.String(length=255), nullable=True), - sa.Column('protocol', sa.String(length=25), nullable=True), - sa.Column('config', sa.String(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.Date(), nullable=False), - sa.Column('updated_at', sa.Date(), nullable=True), - sa.Column('comment', sa.String(length=255), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('spn') - ) - op.create_table('user', - sa.Column('username', sa.String(length=255), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.Date(), nullable=False), - sa.Column('updated_at', sa.Date(), nullable=True), - sa.Column('comment', sa.String(length=255), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('username') - ) - op.create_table('auth', - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('value', sa.String(), nullable=True), - sa.Column('extra', sa.String(), nullable=True), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.Date(), nullable=False), - sa.Column('updated_at', sa.Date(), nullable=True), - sa.Column('comment', sa.String(length=255), nullable=True), - sa.ForeignKeyConstraint(['user_id'], ['user.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('profile', - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('service_id', sa.Integer(), nullable=True), - sa.Column('username', sa.String(length=255), nullable=False), - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('created_at', sa.Date(), nullable=False), - sa.Column('updated_at', sa.Date(), nullable=True), - sa.Column('comment', sa.String(length=255), nullable=True), - sa.ForeignKeyConstraint(['service_id'], ['service.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['user.id'], ), - sa.PrimaryKeyConstraint('id') - ) - - -def downgrade(): - op.drop_table('profile') - op.drop_table('auth') - op.drop_table('user') - op.drop_table('service') diff --git a/trurt/models.py b/trurt/models.py index 57b3338017df75c3a61e1b7a29404a27299e17ab..b65fcac91b19fefc98c2ef7a3936be2aeba8e0c8 100644 --- a/trurt/models.py +++ b/trurt/models.py @@ -20,8 +20,9 @@ class Base(flask_sqlalchemy.Model): ) @declarative.declared_attr - def id(cls): - return sqlalchemy.Column(sqlalchemy.Integer(), primary_key=True) + def uuid(cls): + return sqlalchemy.Column(sqlalchemy.String(36), primary_key=True, + default=lambda: str(uuid.uuid4())) @declarative.declared_attr def created_at(cls): @@ -88,7 +89,8 @@ class User(db.Model): profile.service = service profile.user = self profile.username = self.username - profile.uuid = self.username + profile.uuid = self.uuid + profile.status = Profile.ACTIVE return profile @@ -97,7 +99,7 @@ class Auth(db.Model): """ __tablename__ = "auth" - user_id = db.Column(db.Integer(), db.ForeignKey(User.id)) + user_uuid = db.Column(db.String(36), db.ForeignKey(User.uuid)) user = db.relationship(User, backref=db.backref('auths', cascade='all, delete-orphan')) # TODO: support multiple authentication realms, therefore more than @@ -117,8 +119,10 @@ class Service(db.Model): """ __tablename__ = "service" - spn = db.Column(db.String(255), unique=True) protocol = db.Column(db.String(25)) + name = db.Column(db.String(255)) + description = db.Column(db.String()) + max_profiles = db.Column(db.Integer()) config = db.Column(JSONEncoded) @@ -127,15 +131,17 @@ class Profile(db.Model): """ __tablename__ = "profile" - user_id = db.Column(db.Integer(), db.ForeignKey(User.id)) - service_id = db.Column(db.Integer(), db.ForeignKey(Service.id)) + ACTIVE = "active" + + user_uuid = db.Column(db.String(36), db.ForeignKey(User.uuid)) + service_uuid = db.Column(db.String(36), db.ForeignKey(Service.uuid)) user = db.relationship(User, backref=db.backref('profiles', cascade='all, delete-orphan')) service = db.relationship(Service, backref=db.backref('profiles', cascade='all, delete-orphan')) - uuid = db.Column(db.String(36), unique=True, default=lambda: str(uuid.uuid4())) username = db.Column(db.String(255), nullable=False) + status = db.Column(db.String(25), nullable=False, default=ACTIVE) @property def email(self):