diff --git a/app/forms/collection.py b/app/forms/collection.py index d6d5aea..9308672 100644 --- a/app/forms/collection.py +++ b/app/forms/collection.py @@ -4,14 +4,14 @@ from wtforms.validators import DataRequired, Length class CreateCollectionForm(FlaskForm): - label = StringField("Label", [DataRequired(), Length(6, 256)]) + label = StringField("Label", [DataRequired(), Length(3, 256)]) about = StringField("About") submit = SubmitField("Create") class EditCollectionForm(FlaskForm): - label = StringField("Label", [Length(6, 256)]) + label = StringField("Label", [Length(3, 256)]) about = StringField("About") submit = SubmitField("Edit") diff --git a/migrations/versions/02000d4f9eea_.py b/migrations/versions/02000d4f9eea_.py deleted file mode 100644 index 338737b..0000000 --- a/migrations/versions/02000d4f9eea_.py +++ /dev/null @@ -1,36 +0,0 @@ -"""empty message - -Revision ID: 02000d4f9eea -Revises: e96f96cb7d02 -Create Date: 2023-04-27 17:17:27.670334 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '02000d4f9eea' -down_revision = 'e96f96cb7d02' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('collections', schema=None) as batch_op: - batch_op.alter_column('about', - existing_type=sa.TEXT(), - nullable=True) - - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - with op.batch_alter_table('collections', schema=None) as batch_op: - batch_op.alter_column('about', - existing_type=sa.TEXT(), - nullable=False) - - # ### end Alembic commands ### diff --git a/migrations/versions/bbc4b55246ba_init.py b/migrations/versions/bbc4b55246ba_init.py new file mode 100644 index 0000000..9cd5d85 --- /dev/null +++ b/migrations/versions/bbc4b55246ba_init.py @@ -0,0 +1,200 @@ +"""init + +Revision ID: bbc4b55246ba +Revises: +Create Date: 2023-04-28 10:13:52.011272 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'bbc4b55246ba' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('tags', + sa.Column('name', sa.String(length=32), nullable=False), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('name') + ) + op.create_table('users', + sa.Column('username', sa.String(length=60), nullable=False), + sa.Column('password_hash', sa.String(length=255), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + op.create_table('books', + sa.Column('label', sa.String(length=256), nullable=False), + sa.Column('about', sa.Text(), nullable=True), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('book_contributors', + sa.Column('role', sa.Enum('UNKNOWN', 'MODERATOR', 'EDITOR', name='roles'), nullable=True), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('book_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['book_id'], ['books.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('book_versions', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('semver', sa.String(length=16), nullable=False), + sa.Column('exported', sa.Boolean(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.Column('derivative_id', sa.Integer(), nullable=True), + sa.Column('book_id', sa.Integer(), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['book_id'], ['books.id'], ), + sa.ForeignKeyConstraint(['derivative_id'], ['book_versions.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('books_stars', + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('book_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['book_id'], ['books.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('collections', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('label', sa.String(length=256), nullable=False), + sa.Column('about', sa.Text(), nullable=True), + sa.Column('is_root', sa.Boolean(), nullable=True), + sa.Column('is_leaf', sa.Boolean(), nullable=True), + sa.Column('version_id', sa.Integer(), nullable=True), + sa.Column('parent_id', sa.Integer(), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['parent_id'], ['collections.id'], ), + sa.ForeignKeyConstraint(['version_id'], ['book_versions.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('sections', + sa.Column('label', sa.String(length=256), nullable=False), + sa.Column('about', sa.Text(), nullable=True), + sa.Column('collection_id', sa.Integer(), nullable=True), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('version_id', sa.Integer(), nullable=True), + sa.Column('selected_interpretation_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['collection_id'], ['collections.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.ForeignKeyConstraint(['version_id'], ['book_versions.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('interpretations', + sa.Column('label', sa.String(length=256), nullable=False), + sa.Column('text', sa.Text(), nullable=False), + sa.Column('marked', sa.Boolean(), nullable=True), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('section_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['section_id'], ['sections.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('comments', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('text', sa.Text(), nullable=False), + sa.Column('marked', sa.Boolean(), nullable=True), + sa.Column('included_with_interpretation', sa.Boolean(), nullable=True), + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('parent_id', sa.Integer(), nullable=True), + sa.Column('interpretation_id', sa.Integer(), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['interpretation_id'], ['interpretations.id'], ), + sa.ForeignKeyConstraint(['parent_id'], ['comments.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('interpretation_tags', + sa.Column('tag_id', sa.Integer(), nullable=True), + sa.Column('interpretation_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['interpretation_id'], ['interpretations.id'], ), + sa.ForeignKeyConstraint(['tag_id'], ['tags.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('interpretation_votes', + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('interpretation_id', sa.Integer(), nullable=True), + sa.Column('positive', sa.Boolean(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['interpretation_id'], ['interpretations.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('comment_tags', + sa.Column('tag_id', sa.Integer(), nullable=True), + sa.Column('comment_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['comment_id'], ['comments.id'], ), + sa.ForeignKeyConstraint(['tag_id'], ['tags.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('comment_votes', + sa.Column('user_id', sa.Integer(), nullable=True), + sa.Column('comment_id', sa.Integer(), nullable=True), + sa.Column('positive', sa.Boolean(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('is_deleted', sa.Boolean(), nullable=True), + sa.ForeignKeyConstraint(['comment_id'], ['comments.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('comment_votes') + op.drop_table('comment_tags') + op.drop_table('interpretation_votes') + op.drop_table('interpretation_tags') + op.drop_table('comments') + op.drop_table('interpretations') + op.drop_table('sections') + op.drop_table('collections') + op.drop_table('books_stars') + op.drop_table('book_versions') + op.drop_table('book_contributors') + op.drop_table('books') + op.drop_table('users') + op.drop_table('tags') + # ### end Alembic commands ### diff --git a/migrations/versions/febf8dfa148f_init.py b/migrations/versions/febf8dfa148f_init.py deleted file mode 100644 index f12b843..0000000 --- a/migrations/versions/febf8dfa148f_init.py +++ /dev/null @@ -1,293 +0,0 @@ -"""empty message - -Revision ID: febf8dfa148f -Revises: -Create Date: 2023-04-27 16:07:14.727110 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = "febf8dfa148f" -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table( - "tags", - sa.Column("name", sa.String(length=32), nullable=False), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("name"), - ) - op.create_table( - "users", - sa.Column("username", sa.String(length=60), nullable=False), - sa.Column("password_hash", sa.String(length=255), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.PrimaryKeyConstraint("id"), - sa.UniqueConstraint("username"), - ) - op.create_table( - "books", - sa.Column("label", sa.String(length=256), nullable=False), - sa.Column("about", sa.Text(), nullable=True), - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "book_contributors", - sa.Column( - "role", - sa.Enum("UNKNOWN", "MODERATOR", "EDITOR", name="roles"), - nullable=True, - ), - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("book_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["book_id"], - ["books.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "book_versions", - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("semver", sa.String(length=16), nullable=False), - sa.Column("exported", sa.Boolean(), nullable=True), - sa.Column("updated_at", sa.DateTime(), nullable=True), - sa.Column("derivative_id", sa.Integer(), nullable=True), - sa.Column("book_id", sa.Integer(), nullable=True), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["book_id"], - ["books.id"], - ), - sa.ForeignKeyConstraint( - ["derivative_id"], - ["book_versions.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "books_stars", - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("book_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["book_id"], - ["books.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "collections", - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("label", sa.String(length=256), nullable=False), - sa.Column("about", sa.Text(), nullable=True), - sa.Column("is_root", sa.Boolean(), nullable=True), - sa.Column("is_leaf", sa.Boolean(), nullable=True), - sa.Column("version_id", sa.Integer(), nullable=True), - sa.Column("parent_id", sa.Integer(), nullable=True), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["parent_id"], - ["collections.id"], - ), - sa.ForeignKeyConstraint( - ["version_id"], - ["book_versions.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "sections", - sa.Column("label", sa.String(length=256), nullable=False), - sa.Column("about", sa.Text(), nullable=True), - sa.Column("collection_id", sa.Integer(), nullable=True), - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("version_id", sa.Integer(), nullable=True), - sa.Column("selected_interpretation_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["collection_id"], - ["collections.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.ForeignKeyConstraint( - ["version_id"], - ["book_versions.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "interpretations", - sa.Column("label", sa.String(length=256), nullable=False), - sa.Column("text", sa.Text(), nullable=False), - sa.Column("marked", sa.Boolean(), nullable=True), - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("section_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["section_id"], - ["sections.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "comments", - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("text", sa.Text(), nullable=False), - sa.Column("marked", sa.Boolean(), nullable=True), - sa.Column("included_with_interpretation", sa.Boolean(), nullable=True), - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("parent_id", sa.Integer(), nullable=True), - sa.Column("interpretation_id", sa.Integer(), nullable=True), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["interpretation_id"], - ["interpretations.id"], - ), - sa.ForeignKeyConstraint( - ["parent_id"], - ["comments.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "interpretation_tags", - sa.Column("tag_id", sa.Integer(), nullable=True), - sa.Column("interpretation_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["interpretation_id"], - ["interpretations.id"], - ), - sa.ForeignKeyConstraint( - ["tag_id"], - ["tags.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "interpretation_votes", - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("interpretation_id", sa.Integer(), nullable=True), - sa.Column("positive", sa.Boolean(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["interpretation_id"], - ["interpretations.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "comment_tags", - sa.Column("tag_id", sa.Integer(), nullable=True), - sa.Column("comment_id", sa.Integer(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["comment_id"], - ["comments.id"], - ), - sa.ForeignKeyConstraint( - ["tag_id"], - ["tags.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - op.create_table( - "comment_votes", - sa.Column("user_id", sa.Integer(), nullable=True), - sa.Column("comment_id", sa.Integer(), nullable=True), - sa.Column("positive", sa.Boolean(), nullable=True), - sa.Column("id", sa.Integer(), nullable=False), - sa.Column("created_at", sa.DateTime(), nullable=True), - sa.Column("is_deleted", sa.Boolean(), nullable=True), - sa.ForeignKeyConstraint( - ["comment_id"], - ["comments.id"], - ), - sa.ForeignKeyConstraint( - ["user_id"], - ["users.id"], - ), - sa.PrimaryKeyConstraint("id"), - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table("comment_votes") - op.drop_table("comment_tags") - op.drop_table("interpretation_votes") - op.drop_table("interpretation_tags") - op.drop_table("comments") - op.drop_table("interpretations") - op.drop_table("sections") - op.drop_table("collections") - op.drop_table("books_stars") - op.drop_table("book_versions") - op.drop_table("book_contributors") - op.drop_table("books") - op.drop_table("users") - op.drop_table("tags") - # ### end Alembic commands ###