
Some checks failed
Deploy to Production, build images and push to Gitea Registry / build_and_push (pull_request) Failing after 1m24s
This commit adds new guidelines for FastAPI and Vue.js development, emphasizing best practices for component structure, API performance, and data handling. It also introduces caching mechanisms using Redis for improved performance and updates the API structure to streamline authentication and user management. Additionally, new endpoints for categories and time entries are implemented, enhancing the overall functionality of the application.
92 lines
4.5 KiB
Python
92 lines
4.5 KiB
Python
"""feature_updates_phase1
|
|
|
|
Revision ID: bdf7427ccfa3
|
|
Revises: 05bf96a9e18b
|
|
Create Date: 2025-06-09 18:00:11.083651
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = 'bdf7427ccfa3'
|
|
down_revision: Union[str, None] = '05bf96a9e18b'
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
"""Upgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table('financial_audit_log',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('timestamp', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=True),
|
|
sa.Column('action_type', sa.String(), nullable=False),
|
|
sa.Column('entity_type', sa.String(), nullable=False),
|
|
sa.Column('entity_id', sa.Integer(), nullable=False),
|
|
sa.Column('details', postgresql.JSONB(astext_type=sa.Text()), nullable=True),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_financial_audit_log_action_type'), 'financial_audit_log', ['action_type'], unique=False)
|
|
op.create_index(op.f('ix_financial_audit_log_id'), 'financial_audit_log', ['id'], unique=False)
|
|
op.create_table('categories',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=True),
|
|
sa.Column('group_id', sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('name', 'user_id', 'group_id', name='uq_category_scope')
|
|
)
|
|
op.create_index(op.f('ix_categories_id'), 'categories', ['id'], unique=False)
|
|
op.create_index(op.f('ix_categories_name'), 'categories', ['name'], unique=False)
|
|
op.create_table('time_entries',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('chore_assignment_id', sa.Integer(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('start_time', sa.DateTime(timezone=True), nullable=False),
|
|
sa.Column('end_time', sa.DateTime(timezone=True), nullable=True),
|
|
sa.Column('duration_seconds', sa.Integer(), nullable=True),
|
|
sa.ForeignKeyConstraint(['chore_assignment_id'], ['chore_assignments.id'], ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_time_entries_id'), 'time_entries', ['id'], unique=False)
|
|
op.add_column('chores', sa.Column('parent_chore_id', sa.Integer(), nullable=True))
|
|
op.create_index(op.f('ix_chores_parent_chore_id'), 'chores', ['parent_chore_id'], unique=False)
|
|
op.create_foreign_key(None, 'chores', 'chores', ['parent_chore_id'], ['id'])
|
|
op.add_column('items', sa.Column('category_id', sa.Integer(), nullable=True))
|
|
op.create_foreign_key(None, 'items', 'categories', ['category_id'], ['id'])
|
|
op.add_column('lists', sa.Column('archived_at', sa.DateTime(timezone=True), nullable=True))
|
|
op.create_index(op.f('ix_lists_archived_at'), 'lists', ['archived_at'], unique=False)
|
|
op.add_column('users', sa.Column('is_guest', sa.Boolean(), nullable=False, server_default='f'))
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
"""Downgrade schema."""
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_column('users', 'is_guest')
|
|
op.drop_index(op.f('ix_lists_archived_at'), table_name='lists')
|
|
op.drop_column('lists', 'archived_at')
|
|
op.drop_constraint(None, 'items', type_='foreignkey')
|
|
op.drop_column('items', 'category_id')
|
|
op.drop_constraint(None, 'chores', type_='foreignkey')
|
|
op.drop_index(op.f('ix_chores_parent_chore_id'), table_name='chores')
|
|
op.drop_column('chores', 'parent_chore_id')
|
|
op.drop_index(op.f('ix_time_entries_id'), table_name='time_entries')
|
|
op.drop_table('time_entries')
|
|
op.drop_index(op.f('ix_categories_name'), table_name='categories')
|
|
op.drop_index(op.f('ix_categories_id'), table_name='categories')
|
|
op.drop_table('categories')
|
|
op.drop_index(op.f('ix_financial_audit_log_id'), table_name='financial_audit_log')
|
|
op.drop_index(op.f('ix_financial_audit_log_action_type'), table_name='financial_audit_log')
|
|
op.drop_table('financial_audit_log')
|
|
# ### end Alembic commands ###
|