
- Fix code linting issues - Update README with detailed documentation - Configure database paths for the current environment - Create necessary directory structure The News Aggregation Service is now ready to use with FastAPI and SQLite.
143 lines
6.4 KiB
Python
143 lines
6.4 KiB
Python
"""initial migration
|
|
|
|
Revision ID: 39df02d3c7d5
|
|
Revises:
|
|
Create Date: 2023-11-01 12:00:00.000000
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '39df02d3c7d5'
|
|
down_revision = None
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
# Create user table
|
|
op.create_table(
|
|
'user',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('email', sa.String(), nullable=False),
|
|
sa.Column('username', sa.String(), nullable=False),
|
|
sa.Column('hashed_password', sa.String(), nullable=False),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('is_superuser', sa.Boolean(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_user_email'), 'user', ['email'], unique=True)
|
|
op.create_index(op.f('ix_user_id'), 'user', ['id'], unique=False)
|
|
op.create_index(op.f('ix_user_username'), 'user', ['username'], unique=True)
|
|
|
|
# Create news source table
|
|
op.create_table(
|
|
'newssource',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('source_id', sa.String(), nullable=False),
|
|
sa.Column('url', sa.String(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_newssource_id'), 'newssource', ['id'], unique=False)
|
|
op.create_index(op.f('ix_newssource_name'), 'newssource', ['name'], unique=False)
|
|
op.create_index(op.f('ix_newssource_source_id'), 'newssource', ['source_id'], unique=True)
|
|
|
|
# Create news category table
|
|
op.create_table(
|
|
'newscategory',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_newscategory_id'), 'newscategory', ['id'], unique=False)
|
|
op.create_index(op.f('ix_newscategory_name'), 'newscategory', ['name'], unique=True)
|
|
|
|
# Create news article table
|
|
op.create_table(
|
|
'newsarticle',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('title', sa.String(), nullable=False),
|
|
sa.Column('description', sa.Text(), nullable=True),
|
|
sa.Column('content', sa.Text(), nullable=True),
|
|
sa.Column('url', sa.String(), nullable=False),
|
|
sa.Column('image_url', sa.String(), nullable=True),
|
|
sa.Column('published_at', sa.DateTime(), nullable=False),
|
|
sa.Column('author', sa.String(), nullable=True),
|
|
sa.Column('language', sa.String(), nullable=True),
|
|
sa.Column('country', sa.String(), nullable=True),
|
|
sa.Column('source_id', sa.Integer(), nullable=True),
|
|
sa.Column('category_id', sa.Integer(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['category_id'], ['newscategory.id'], ),
|
|
sa.ForeignKeyConstraint(['source_id'], ['newssource.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_newsarticle_id'), 'newsarticle', ['id'], unique=False)
|
|
op.create_index(op.f('ix_newsarticle_published_at'), 'newsarticle', ['published_at'], unique=False)
|
|
op.create_index(op.f('ix_newsarticle_title'), 'newsarticle', ['title'], unique=False)
|
|
op.create_index(op.f('ix_newsarticle_url'), 'newsarticle', ['url'], unique=True)
|
|
|
|
# Create saved article table
|
|
op.create_table(
|
|
'savedarticle',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('article_id', sa.Integer(), nullable=False),
|
|
sa.Column('notes', sa.Text(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['article_id'], ['newsarticle.id'], ),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_savedarticle_id'), 'savedarticle', ['id'], unique=False)
|
|
|
|
# Create user preference table
|
|
op.create_table(
|
|
'userpreference',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('keywords', sa.String(), nullable=True),
|
|
sa.Column('sources', sa.String(), nullable=True),
|
|
sa.Column('categories', sa.String(), nullable=True),
|
|
sa.Column('countries', sa.String(), nullable=True),
|
|
sa.Column('languages', sa.String(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
)
|
|
op.create_index(op.f('ix_userpreference_id'), 'userpreference', ['id'], unique=False)
|
|
|
|
|
|
def downgrade():
|
|
op.drop_index(op.f('ix_userpreference_id'), table_name='userpreference')
|
|
op.drop_table('userpreference')
|
|
op.drop_index(op.f('ix_savedarticle_id'), table_name='savedarticle')
|
|
op.drop_table('savedarticle')
|
|
op.drop_index(op.f('ix_newsarticle_url'), table_name='newsarticle')
|
|
op.drop_index(op.f('ix_newsarticle_title'), table_name='newsarticle')
|
|
op.drop_index(op.f('ix_newsarticle_published_at'), table_name='newsarticle')
|
|
op.drop_index(op.f('ix_newsarticle_id'), table_name='newsarticle')
|
|
op.drop_table('newsarticle')
|
|
op.drop_index(op.f('ix_newscategory_name'), table_name='newscategory')
|
|
op.drop_index(op.f('ix_newscategory_id'), table_name='newscategory')
|
|
op.drop_table('newscategory')
|
|
op.drop_index(op.f('ix_newssource_source_id'), table_name='newssource')
|
|
op.drop_index(op.f('ix_newssource_name'), table_name='newssource')
|
|
op.drop_index(op.f('ix_newssource_id'), table_name='newssource')
|
|
op.drop_table('newssource')
|
|
op.drop_index(op.f('ix_user_username'), table_name='user')
|
|
op.drop_index(op.f('ix_user_id'), table_name='user')
|
|
op.drop_index(op.f('ix_user_email'), table_name='user')
|
|
op.drop_table('user') |