Automated Action 90c1cdef34 Setup News Aggregation Service
- 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.
2025-05-27 18:50:11 +00:00

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')