701a919f4025_initial_schema.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ident "@(#)$Format:LocalFoodAI:app.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  2. """initial_schema
  3. Revision ID: 701a919f4025
  4. Revises:
  5. Create Date: 2026-04-24 16:19:19.739900
  6. """
  7. from typing import Sequence, Union
  8. from alembic import op
  9. import sqlalchemy as sa
  10. # revision identifiers, used by Alembic.
  11. revision: str = '701a919f4025'
  12. down_revision: Union[str, Sequence[str], None] = None
  13. branch_labels: Union[str, Sequence[str], None] = None
  14. depends_on: Union[str, Sequence[str], None] = None
  15. def upgrade() -> None:
  16. # 1. Users Table
  17. op.create_table(
  18. 'users',
  19. sa.Column('id', sa.Integer(), autoincrement=True, primary_key=True),
  20. sa.Column('username', sa.String(length=100), nullable=False, unique=True),
  21. sa.Column('password_hash', sa.String(length=255), nullable=False),
  22. sa.Column('email', sa.String(length=255), nullable=True),
  23. sa.Column('search_limit', sa.String(length=10), server_default='50'),
  24. sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP'))
  25. )
  26. # 2. Medical Profiles Table (EAV)
  27. op.create_table(
  28. 'user_health_profiles',
  29. sa.Column('id', sa.Integer(), autoincrement=True, primary_key=True),
  30. sa.Column('user_id', sa.Integer(), nullable=False),
  31. sa.Column('illness_health_condition_diet_dislikes_name', sa.String(length=100), nullable=False, server_default='None'),
  32. sa.Column('illness_health_condition_diet_dislikes_value', sa.String(length=255), nullable=False, server_default='None'),
  33. sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE')
  34. )
  35. # 3. Plates Table
  36. op.create_table(
  37. 'plates',
  38. sa.Column('id', sa.Integer(), autoincrement=True, primary_key=True),
  39. sa.Column('user_id', sa.Integer(), nullable=False),
  40. sa.Column('plate_name', sa.String(length=255), nullable=False),
  41. sa.Column('created_at', sa.TIMESTAMP(), server_default=sa.text('CURRENT_TIMESTAMP')),
  42. sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE')
  43. )
  44. # 4. Plate Items Table
  45. op.create_table(
  46. 'plate_items',
  47. sa.Column('id', sa.Integer(), autoincrement=True, primary_key=True),
  48. sa.Column('plate_id', sa.Integer(), nullable=False),
  49. sa.Column('product_code', sa.String(length=50), nullable=False),
  50. sa.Column('quantity_grams', sa.Float(), nullable=False),
  51. sa.ForeignKeyConstraint(['plate_id'], ['plates.id'], ondelete='CASCADE')
  52. )
  53. def downgrade() -> None:
  54. op.drop_table('plate_items')
  55. op.drop_table('plates')
  56. op.drop_table('user_health_profiles')
  57. op.drop_table('users')