contentdb/migrations/versions/668167a0e2d8_.py

432 lines
21 KiB
Python

"""empty message
Revision ID: 668167a0e2d8
Revises:
Create Date: 2022-02-25 02:30:06.547144
"""
from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
# revision identifiers, used by Alembic.
revision = '668167a0e2d8'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
command = """
CREATE OR REPLACE FUNCTION parse_websearch(config regconfig, search_query text)
RETURNS tsquery AS $$
SELECT
string_agg(
(
CASE
WHEN position('''' IN words.word) > 0 THEN CONCAT(words.word, ':*')
ELSE words.word
END
),
' '
)::tsquery
FROM (
SELECT trim(
regexp_split_to_table(
websearch_to_tsquery(config, lower(search_query))::text,
' '
)
) AS word
) AS words
$$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE FUNCTION parse_websearch(search_query text)
RETURNS tsquery AS $$
SELECT parse_websearch('pg_catalog.simple', search_query);
$$ LANGUAGE SQL IMMUTABLE;"""
op.execute(command)
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('content_warning',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=100), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('description', sa.String(length=500), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('email_subscription',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('email', sa.String(length=100), nullable=False),
sa.Column('blacklisted', sa.Boolean(), nullable=False),
sa.Column('token', sa.String(length=32), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('email')
)
op.create_table('license',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=50), nullable=False),
sa.Column('is_foss', sa.Boolean(), nullable=False),
sa.Column('url', sa.String(length=128), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('meta_package',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=100), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('user',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=True),
sa.Column('username', sa.String(length=50), nullable=False),
sa.Column('password', sa.String(length=255), nullable=True),
sa.Column('reset_password_token', sa.String(length=100), server_default='', nullable=False),
sa.Column('rank', sa.Enum('BANNED', 'NOT_JOINED', 'NEW_MEMBER', 'MEMBER', 'TRUSTED_MEMBER', 'APPROVER', 'EDITOR', 'BOT', 'MODERATOR', 'ADMIN', name='userrank'), nullable=False),
sa.Column('github_username', sa.String(length=50), nullable=True),
sa.Column('forums_username', sa.String(length=50), nullable=True),
sa.Column('github_access_token', sa.String(length=50), nullable=True),
sa.Column('email', sa.String(length=255), nullable=True),
sa.Column('email_confirmed_at', sa.DateTime(), nullable=True),
sa.Column('locale', sa.String(length=10), nullable=True),
sa.Column('profile_pic', sa.String(length=255), nullable=True),
sa.Column('is_active', sa.Boolean(), server_default='0', nullable=False),
sa.Column('display_name', sa.String(length=100), nullable=False),
sa.Column('website_url', sa.String(length=255), nullable=True),
sa.Column('donate_url', sa.String(length=255), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('email'),
sa.UniqueConstraint('forums_username'),
sa.UniqueConstraint('github_username')
)
op.create_table('thread',
sa.Column('id', sa.Integer(), nullable=False),
# sa.Column('package_id', sa.Integer(), nullable=True),
# sa.Column('review_id', sa.Integer(), nullable=True),
sa.Column('author_id', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('private', sa.Boolean(), server_default='0', nullable=False),
sa.Column('locked', sa.Boolean(), server_default='0', nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
# sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
# sa.ForeignKeyConstraint(['review_id'], ['package_review.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('package',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('author_id', sa.Integer(), nullable=False),
sa.Column('name', sa.Unicode(length=100), nullable=False),
sa.Column('title', sa.Unicode(length=100), nullable=False),
sa.Column('short_desc', sa.Unicode(length=200), nullable=False),
sa.Column('desc', sa.UnicodeText(), nullable=True),
sa.Column('build_desc', sa.UnicodeText(), nullable=True),
sa.Column('install_desc', sa.UnicodeText(), nullable=True),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('approved_at', sa.DateTime(), nullable=True),
sa.Column('search_vector', sqlalchemy_utils.types.ts_vector.TSVectorType(), nullable=True),
sa.Column('license_id', sa.Integer(), nullable=False),
sa.Column('media_license_id', sa.Integer(), nullable=False),
sa.Column('state', sa.Enum('WIP', 'CHANGES_NEEDED', 'READY_FOR_REVIEW', 'APPROVED', 'DELETED', name='packagestate'), nullable=False),
sa.Column('dev_state', sa.Enum('WIP', 'BETA', 'ACTIVELY_DEVELOPED', 'MAINTENANCE_ONLY', 'AS_IS', 'DEPRECATED', 'LOOKING_FOR_MAINTAINER', name='packagedevstate'), nullable=True),
sa.Column('score', sa.Float(), nullable=False),
sa.Column('score_downloads', sa.Float(), nullable=False),
sa.Column('downloads', sa.Integer(), nullable=False),
sa.Column('review_thread_id', sa.Integer(), nullable=True),
sa.Column('repo', sa.String(length=200), nullable=True),
sa.Column('website', sa.String(length=200), nullable=True),
sa.Column('issueTracker', sa.String(length=200), nullable=True),
sa.Column('forums', sa.Integer(), nullable=True),
sa.Column('video_url', sa.String(length=200), nullable=True),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['license_id'], ['license.id'], ),
sa.ForeignKeyConstraint(['media_license_id'], ['license.id'], ),
sa.ForeignKeyConstraint(['review_thread_id'], ['thread.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('package_review',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('author_id', sa.Integer(), nullable=False),
sa.Column('recommends', sa.Boolean(), nullable=False),
sa.Column('score', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.add_column('thread', sa.Column('package_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'thread', 'package', ['package_id'], ['id'])
op.add_column('thread', sa.Column('review_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'thread', 'package_review', ['review_id'], ['id'] )
op.create_index('ix_package_search_vector', 'package', ['search_vector'], unique=False, postgresql_using='gin')
op.create_table('package_screenshot',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.Column('order', sa.Integer(), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('url', sa.String(length=100), nullable=False),
sa.Column('approved', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('width', sa.Integer(), nullable=False),
sa.Column('height', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id')
)
# sa.Column('cover_image_id', sa.Integer(), nullable=True),
# sa.ForeignKeyConstraint(['cover_image_id'], ['package_screenshot.id'], ),
op.add_column('package', sa.Column('cover_image_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'package', 'package_screenshot', ['cover_image_id'], ['id'])
op.create_table('tag',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=100), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('description', sa.String(length=500), nullable=True),
sa.Column('backgroundColor', sa.String(length=6), nullable=False),
sa.Column('textColor', sa.String(length=6), nullable=False),
sa.Column('views', sa.Integer(), nullable=False),
sa.Column('is_protected', sa.Boolean(), nullable=False),
sa.Column('is_toplevel', sa.Boolean(), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_index(op.f('ix_user_username'), 'user', ['username'], unique=True)
op.create_table('api_token',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('access_token', sa.String(length=34), nullable=False),
sa.Column('name', sa.String(length=100), nullable=False),
sa.Column('owner_id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['owner_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('access_token')
)
op.create_table('audit_log_entry',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('causer_id', sa.Integer(), nullable=True),
sa.Column('severity', sa.Enum('NORMAL', 'USER', 'EDITOR', 'MODERATION', name='auditseverity'), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('url', sa.String(length=200), nullable=True),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.Column('description', sa.Text(), nullable=True),
sa.ForeignKeyConstraint(['causer_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('content_warnings',
sa.Column('content_warning_id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['content_warning_id'], ['content_warning.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('content_warning_id', 'package_id')
)
op.create_table('dependency',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('depender_id', sa.Integer(), nullable=True),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.Column('meta_package_id', sa.Integer(), nullable=True),
sa.Column('optional', sa.Boolean(), nullable=False),
sa.ForeignKeyConstraint(['depender_id'], ['package.id'], ),
sa.ForeignKeyConstraint(['meta_package_id'], ['meta_package.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('depender_id', 'package_id', 'meta_package_id', name='_dependency_uc')
)
op.create_table('forum_topic',
sa.Column('topic_id', sa.Integer(), autoincrement=False, nullable=False),
sa.Column('author_id', sa.Integer(), nullable=False),
sa.Column('wip', sa.Boolean(), nullable=False),
sa.Column('discarded', sa.Boolean(), nullable=False),
sa.Column('type', sa.Enum('GAME', 'TOOL', 'ASSETPACK', name='packagetype'), nullable=False),
sa.Column('title', sa.String(length=200), nullable=False),
sa.Column('name', sa.String(length=30), nullable=True),
sa.Column('link', sa.String(length=200), nullable=True),
sa.Column('posts', sa.Integer(), nullable=False),
sa.Column('views', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('topic_id')
)
op.create_table('maintainers',
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('user_id', 'package_id')
)
op.create_table('notification',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('causer_id', sa.Integer(), nullable=False),
sa.Column('type', sa.Enum('PACKAGE_EDIT', 'PACKAGE_APPROVAL', 'NEW_THREAD', 'NEW_REVIEW', 'THREAD_REPLY', 'BOT', 'MAINTAINER', 'EDITOR_ALERT', 'EDITOR_MISC', 'OTHER', name='notificationtype'), nullable=False),
sa.Column('emailed', sa.Boolean(), nullable=False),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('url', sa.String(length=200), nullable=True),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['causer_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('package_alias',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.Column('author', sa.String(length=50), nullable=False),
sa.Column('name', sa.String(length=100), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('package_game_support',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.Column('game_id', sa.Integer(), nullable=False),
sa.Column('supports', sa.Boolean(), nullable=False),
sa.Column('confidence', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['game_id'], ['package.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('game_id', 'package_id', name='_package_game_support_uc')
)
op.create_table('package_release',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=True),
sa.Column('title', sa.String(length=100), nullable=False),
sa.Column('releaseDate', sa.DateTime(), nullable=False),
sa.Column('url', sa.String(length=200), nullable=False),
sa.Column('approved', sa.Boolean(), nullable=False),
sa.Column('task_id', sa.String(length=37), nullable=True),
sa.Column('commit_hash', sa.String(length=41), nullable=True),
sa.Column('downloads', sa.Integer(), nullable=False),
sa.Column('channel', sa.String(length=200), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('package_review_vote',
sa.Column('review_id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('is_positive', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['review_id'], ['package_review.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('review_id', 'user_id')
)
op.create_table('package_update_config',
sa.Column('package_id', sa.Integer(), nullable=False),
sa.Column('last_commit', sa.String(length=41), nullable=True),
sa.Column('last_tag', sa.String(length=41), nullable=True),
sa.Column('outdated_at', sa.DateTime(), nullable=True),
sa.Column('trigger', sa.Enum('COMMIT', 'TAG', name='packageupdatetrigger'), nullable=False),
sa.Column('ref', sa.String(length=41), nullable=True),
sa.Column('make_release', sa.Boolean(), nullable=False),
sa.Column('auto_created', sa.Boolean(), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('package_id')
)
op.create_table('provides',
sa.Column('package_id', sa.Integer(), nullable=False),
sa.Column('metapackage_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['metapackage_id'], ['meta_package.id'], ),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.PrimaryKeyConstraint('package_id', 'metapackage_id')
)
op.create_table('tags',
sa.Column('tag_id', sa.Integer(), nullable=False),
sa.Column('package_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['package_id'], ['package.id'], ),
sa.ForeignKeyConstraint(['tag_id'], ['tag.id'], ),
sa.PrimaryKeyConstraint('tag_id', 'package_id')
)
op.create_table('thread_reply',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('thread_id', sa.Integer(), nullable=False),
sa.Column('comment', sa.String(length=2000), nullable=False),
sa.Column('author_id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['author_id'], ['user.id'], ),
sa.ForeignKeyConstraint(['thread_id'], ['thread.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('user_email_verification',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('email', sa.String(length=100), nullable=False),
sa.Column('token', sa.String(length=32), nullable=True),
sa.Column('is_password_reset', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('user_notification_preferences',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('pref_package_edit', sa.Integer(), nullable=False),
sa.Column('pref_package_approval', sa.Integer(), nullable=False),
sa.Column('pref_new_thread', sa.Integer(), nullable=False),
sa.Column('pref_new_review', sa.Integer(), nullable=False),
sa.Column('pref_thread_reply', sa.Integer(), nullable=False),
sa.Column('pref_bot', sa.Integer(), nullable=False),
sa.Column('pref_maintainer', sa.Integer(), nullable=False),
sa.Column('pref_editor_alert', sa.Integer(), nullable=False),
sa.Column('pref_editor_misc', sa.Integer(), nullable=False),
sa.Column('pref_other', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('watchers',
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('thread_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['thread_id'], ['thread.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('user_id', 'thread_id')
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('watchers')
op.drop_table('user_notification_preferences')
op.drop_table('user_email_verification')
op.drop_table('thread_reply')
op.drop_table('tags')
op.drop_table('provides')
op.drop_table('package_update_config')
op.drop_table('package_review_vote')
op.drop_table('package_release')
op.drop_table('package_game_support')
op.drop_table('package_alias')
op.drop_table('notification')
op.drop_table('maintainers')
op.drop_table('forum_topic')
op.drop_table('dependency')
op.drop_table('content_warnings')
op.drop_table('audit_log_entry')
op.drop_table('api_token')
op.drop_index(op.f('ix_user_username'), table_name='user')
op.drop_table('user')
op.drop_table('thread')
op.drop_table('tag')
op.drop_table('package_screenshot')
op.drop_table('package_review')
op.drop_index('ix_package_search_vector', table_name='package', postgresql_using='gin')
op.drop_table('package')
op.drop_table('meta_package')
op.drop_table('license')
op.drop_table('email_subscription')
op.drop_table('content_warning')
# ### end Alembic commands ###