diff --git a/alembic/versions/1746d35187a2_tcg_product_update_again.py b/alembic/versions/1746d35187a2_tcg_product_update_again.py new file mode 100644 index 0000000..be79470 --- /dev/null +++ b/alembic/versions/1746d35187a2_tcg_product_update_again.py @@ -0,0 +1,42 @@ +"""tcg product update again + +Revision ID: 1746d35187a2 +Revises: 9775314e337b +Create Date: 2025-04-17 22:02:35.492726 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '1746d35187a2' +down_revision: Union[str, None] = '9775314e337b' +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.add_column('tcgplayer_products', sa.Column('ext_subtype', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_oracle_text', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_flavor_text', sa.String(), nullable=True)) + op.drop_column('tcgplayer_products', 'ext_mana_cost') + op.drop_column('tcgplayer_products', 'ext_loyalty') + op.drop_column('tcgplayer_products', 'ext_mana_value') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('tcgplayer_products', sa.Column('ext_mana_value', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_loyalty', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_mana_cost', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.drop_column('tcgplayer_products', 'ext_flavor_text') + op.drop_column('tcgplayer_products', 'ext_oracle_text') + op.drop_column('tcgplayer_products', 'ext_subtype') + # ### end Alembic commands ### diff --git a/alembic/versions/2fcce9c8883a_tcg_prices_again.py b/alembic/versions/2fcce9c8883a_tcg_prices_again.py new file mode 100644 index 0000000..197c67c --- /dev/null +++ b/alembic/versions/2fcce9c8883a_tcg_prices_again.py @@ -0,0 +1,32 @@ +"""tcg prices again + +Revision ID: 2fcce9c8883a +Revises: b45c43900b56 +Create Date: 2025-04-17 22:48:53.378544 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '2fcce9c8883a' +down_revision: Union[str, None] = 'b45c43900b56' +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! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/alembic/versions/493b2cb724d0_tcg_prices_again_2.py b/alembic/versions/493b2cb724d0_tcg_prices_again_2.py new file mode 100644 index 0000000..abbc15c --- /dev/null +++ b/alembic/versions/493b2cb724d0_tcg_prices_again_2.py @@ -0,0 +1,51 @@ +"""tcg prices again 2 + +Revision ID: 493b2cb724d0 +Revises: 2fcce9c8883a +Create Date: 2025-04-17 23:05:11.919652 + +""" +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 = '493b2cb724d0' +down_revision: Union[str, None] = '2fcce9c8883a' +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.drop_index('ix_tcgplayer_prices_date', table_name='tcgplayer_prices') + op.drop_index('ix_tcgplayer_prices_id', table_name='tcgplayer_prices') + op.drop_index('ix_tcgplayer_prices_product_id', table_name='tcgplayer_prices') + op.drop_table('tcgplayer_prices') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('tcgplayer_prices', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('product_id', sa.INTEGER(), autoincrement=False, nullable=True), + sa.Column('date', postgresql.TIMESTAMP(), autoincrement=False, nullable=True), + sa.Column('low_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('mid_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('high_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('market_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('direct_low_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('sub_type_name', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=True), + sa.Column('updated_at', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=True), + sa.PrimaryKeyConstraint('id', name='tcgplayer_prices_pkey') + ) + op.create_index('ix_tcgplayer_prices_product_id', 'tcgplayer_prices', ['product_id'], unique=False) + op.create_index('ix_tcgplayer_prices_id', 'tcgplayer_prices', ['id'], unique=False) + op.create_index('ix_tcgplayer_prices_date', 'tcgplayer_prices', ['date'], unique=False) + # ### end Alembic commands ### diff --git a/alembic/versions/54cd251d13a3_fuck_foreign_keys_for_real_dog.py b/alembic/versions/54cd251d13a3_fuck_foreign_keys_for_real_dog.py new file mode 100644 index 0000000..7cfc34e --- /dev/null +++ b/alembic/versions/54cd251d13a3_fuck_foreign_keys_for_real_dog.py @@ -0,0 +1,53 @@ +"""fuck foreign keys for real dog + +Revision ID: 54cd251d13a3 +Revises: e34bfa37db00 +Create Date: 2025-04-17 23:10:59.010644 + +""" +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 = '54cd251d13a3' +down_revision: Union[str, None] = 'e34bfa37db00' +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.drop_index('ix_tcgplayer_price_history_date', table_name='tcgplayer_price_history') + op.drop_index('ix_tcgplayer_price_history_id', table_name='tcgplayer_price_history') + op.drop_index('ix_tcgplayer_price_history_product_id', table_name='tcgplayer_price_history') + op.drop_table('tcgplayer_price_history') + op.drop_constraint('tcgplayer_products_group_id_fkey', 'tcgplayer_products', type_='foreignkey') + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_foreign_key('tcgplayer_products_group_id_fkey', 'tcgplayer_products', 'tcgplayer_groups', ['group_id'], ['group_id']) + op.create_table('tcgplayer_price_history', + sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False), + sa.Column('product_id', sa.INTEGER(), autoincrement=False, nullable=True), + sa.Column('date', postgresql.TIMESTAMP(), autoincrement=False, nullable=True), + sa.Column('low_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('mid_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('high_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('market_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('direct_low_price', sa.DOUBLE_PRECISION(precision=53), autoincrement=False, nullable=True), + sa.Column('sub_type_name', sa.VARCHAR(), autoincrement=False, nullable=True), + sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('now()'), autoincrement=False, nullable=True), + sa.Column('updated_at', postgresql.TIMESTAMP(timezone=True), autoincrement=False, nullable=True), + sa.PrimaryKeyConstraint('id', name='tcgplayer_price_history_pkey') + ) + op.create_index('ix_tcgplayer_price_history_product_id', 'tcgplayer_price_history', ['product_id'], unique=False) + op.create_index('ix_tcgplayer_price_history_id', 'tcgplayer_price_history', ['id'], unique=False) + op.create_index('ix_tcgplayer_price_history_date', 'tcgplayer_price_history', ['date'], unique=False) + # ### end Alembic commands ### diff --git a/alembic/versions/7f309a891094_fuck_foreign_keys_for_real_dog.py b/alembic/versions/7f309a891094_fuck_foreign_keys_for_real_dog.py new file mode 100644 index 0000000..374f0e3 --- /dev/null +++ b/alembic/versions/7f309a891094_fuck_foreign_keys_for_real_dog.py @@ -0,0 +1,32 @@ +"""fuck foreign keys for real dog + +Revision ID: 7f309a891094 +Revises: 54cd251d13a3 +Create Date: 2025-04-17 23:11:55.027126 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '7f309a891094' +down_revision: Union[str, None] = '54cd251d13a3' +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! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/alembic/versions/9775314e337b_tcg_product_update.py b/alembic/versions/9775314e337b_tcg_product_update.py new file mode 100644 index 0000000..c03fe2f --- /dev/null +++ b/alembic/versions/9775314e337b_tcg_product_update.py @@ -0,0 +1,40 @@ +"""tcg product update + +Revision ID: 9775314e337b +Revises: 479003fbead7 +Create Date: 2025-04-17 21:58:17.637210 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '9775314e337b' +down_revision: Union[str, None] = '479003fbead7' +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.add_column('tcgplayer_products', sa.Column('ext_power', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_toughness', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_loyalty', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_mana_cost', sa.String(), nullable=True)) + op.add_column('tcgplayer_products', sa.Column('ext_mana_value', sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('tcgplayer_products', 'ext_mana_value') + op.drop_column('tcgplayer_products', 'ext_mana_cost') + op.drop_column('tcgplayer_products', 'ext_loyalty') + op.drop_column('tcgplayer_products', 'ext_toughness') + op.drop_column('tcgplayer_products', 'ext_power') + # ### end Alembic commands ### diff --git a/alembic/versions/9fb73424598c_recreate_tcgplayer_price_history.py b/alembic/versions/9fb73424598c_recreate_tcgplayer_price_history.py new file mode 100644 index 0000000..dff93c0 --- /dev/null +++ b/alembic/versions/9fb73424598c_recreate_tcgplayer_price_history.py @@ -0,0 +1,51 @@ +"""recreate tcgplayer price history + +Revision ID: 9fb73424598c +Revises: 7f309a891094 +Create Date: 2025-04-17 23:13:55.027126 + +""" +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 = '9fb73424598c' +down_revision: Union[str, None] = '7f309a891094' +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('tcgplayer_price_history', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('product_id', sa.Integer(), nullable=True), + sa.Column('date', sa.DateTime(), nullable=True), + sa.Column('low_price', sa.Float(), nullable=True), + sa.Column('mid_price', sa.Float(), nullable=True), + sa.Column('high_price', sa.Float(), nullable=True), + sa.Column('market_price', sa.Float(), nullable=True), + sa.Column('direct_low_price', sa.Float(), nullable=True), + sa.Column('sub_type_name', sa.String(), nullable=True), + sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), + sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_tcgplayer_price_history_id'), 'tcgplayer_price_history', ['id'], unique=False) + op.create_index(op.f('ix_tcgplayer_price_history_product_id'), 'tcgplayer_price_history', ['product_id'], unique=False) + op.create_index(op.f('ix_tcgplayer_price_history_date'), 'tcgplayer_price_history', ['date'], unique=False) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('ix_tcgplayer_price_history_date'), table_name='tcgplayer_price_history') + op.drop_index(op.f('ix_tcgplayer_price_history_product_id'), table_name='tcgplayer_price_history') + op.drop_index(op.f('ix_tcgplayer_price_history_id'), table_name='tcgplayer_price_history') + op.drop_table('tcgplayer_price_history') + # ### end Alembic commands ### diff --git a/alembic/versions/b45c43900b56_tcg_prices.py b/alembic/versions/b45c43900b56_tcg_prices.py new file mode 100644 index 0000000..674bebe --- /dev/null +++ b/alembic/versions/b45c43900b56_tcg_prices.py @@ -0,0 +1,32 @@ +"""tcg prices + +Revision ID: b45c43900b56 +Revises: 1746d35187a2 +Create Date: 2025-04-17 22:47:44.405906 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'b45c43900b56' +down_revision: Union[str, None] = '1746d35187a2' +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! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/alembic/versions/e34bfa37db00_tcg_prices_again_3.py b/alembic/versions/e34bfa37db00_tcg_prices_again_3.py new file mode 100644 index 0000000..d70f1ae --- /dev/null +++ b/alembic/versions/e34bfa37db00_tcg_prices_again_3.py @@ -0,0 +1,32 @@ +"""tcg prices again 3 + +Revision ID: e34bfa37db00 +Revises: 493b2cb724d0 +Create Date: 2025-04-17 23:05:40.805511 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'e34bfa37db00' +down_revision: Union[str, None] = '493b2cb724d0' +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! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/app.log b/app.log index bd43957..9a61ffd 100644 --- a/app.log +++ b/app.log @@ -1,33 +1,1760 @@ -2025-04-17 13:27:20,268 - INFO - app.main - Application starting up... -2025-04-17 13:27:20,319 - INFO - app.main - Database initialized successfully -2025-04-17 13:27:20,366 - INFO - app.services.service_manager - Service OrderManagementService registered -2025-04-17 13:27:20,366 - INFO - app.services.service_manager - Service TCGPlayerInventoryService registered -2025-04-17 13:27:20,369 - INFO - app.services.service_manager - Service LabelPrinterService registered -2025-04-17 13:27:20,372 - INFO - app.services.service_manager - Service RegularPrinterService registered -2025-04-17 13:27:20,387 - INFO - app.services.service_manager - Service AddressLabelService registered -2025-04-17 13:27:20,592 - INFO - app.services.service_manager - Service PullSheetService registered -2025-04-17 13:27:20,592 - INFO - app.services.service_manager - Service SetLabelService registered -2025-04-17 13:27:20,634 - INFO - app.services.service_manager - Service DataInitializationService registered -2025-04-17 13:27:20,652 - INFO - app.services.service_manager - Service SchedulerService registered -2025-04-17 13:27:20,652 - INFO - app.services.service_manager - Service FileService registered -2025-04-17 13:27:20,653 - INFO - app.services.service_manager - All services initialized successfully -2025-04-17 13:27:20,653 - INFO - apscheduler.scheduler - Adding job tentatively -- it will be properly scheduled when the scheduler starts -2025-04-17 13:27:20,653 - INFO - app.services.scheduler.base_scheduler - Scheduled task update_open_orders_hourly to run every 3600 seconds -2025-04-17 13:27:20,653 - INFO - apscheduler.scheduler - Adding job tentatively -- it will be properly scheduled when the scheduler starts -2025-04-17 13:27:20,653 - INFO - app.services.scheduler.base_scheduler - Scheduled task update_all_orders_daily to run every 86400 seconds -2025-04-17 13:27:20,653 - INFO - apscheduler.scheduler - Added job "SchedulerService.update_open_orders_hourly" to job store "default" -2025-04-17 13:27:20,653 - INFO - apscheduler.scheduler - Added job "SchedulerService.update_all_orders_daily" to job store "default" -2025-04-17 13:27:20,653 - INFO - apscheduler.scheduler - Scheduler started -2025-04-17 13:27:20,653 - INFO - app.services.scheduler.base_scheduler - Scheduler started -2025-04-17 13:27:20,653 - INFO - app.services.scheduler.scheduler_service - All scheduled tasks started -2025-04-17 13:27:20,653 - INFO - app.main - Scheduler started successfully -2025-04-17 13:27:24,285 - INFO - app.services.regular_printer_service - Print job 85 submitted to printer MFCL2750DW-3 -2025-04-17 13:28:05,282 - INFO - app.services.external_api.base_external_service - Making request to https://order-management-api.tcgplayer.com/orders/packing-slips/export?api-version=2.0 -2025-04-17 13:28:05,417 - INFO - app.services.label_printer_service - Converting PDF app/data/cache/tcgplayer/packing_slips/pdf/packing_slip_2025-04-17_13-28-05.pdf to images -2025-04-17 13:28:05,489 - INFO - app.services.label_printer_service - Successfully converted PDF to 2 images -2025-04-17 13:28:05,489 - INFO - app.services.label_printer_service - Processing page 1 with dimensions (1700, 2200) -2025-04-17 13:28:09,731 - INFO - app.services.label_printer_service - Processing page 2 with dimensions (1700, 2200) -2025-04-17 13:28:15,097 - INFO - app.services.label_printer_service - Converting PDF app/data/cache/tcgplayer/packing_slips/pdf/packing_slip_2025-04-17_13-28-05.pdf to images -2025-04-17 13:28:15,167 - INFO - app.services.label_printer_service - Successfully converted PDF to 2 images -2025-04-17 13:28:15,167 - INFO - app.services.label_printer_service - Processing page 1 with dimensions (1700, 2200) -2025-04-17 13:28:19,411 - INFO - app.services.label_printer_service - Processing page 2 with dimensions (1700, 2200) +2025-04-18 15:17:22,635 - INFO - app.main - Application starting up... +2025-04-18 15:17:22,679 - INFO - app.main - Database initialized successfully +2025-04-18 15:17:22,680 - INFO - app.services.service_manager - Service OrderManagementService registered +2025-04-18 15:17:22,680 - INFO - app.services.service_manager - Service TCGPlayerInventoryService registered +2025-04-18 15:17:22,680 - INFO - app.services.service_manager - Service LabelPrinterService registered +2025-04-18 15:17:22,680 - INFO - app.services.service_manager - Service RegularPrinterService registered +2025-04-18 15:17:22,683 - INFO - app.services.service_manager - Service AddressLabelService registered +2025-04-18 15:17:22,685 - INFO - app.services.service_manager - Service PullSheetService registered +2025-04-18 15:17:22,685 - INFO - app.services.service_manager - Service SetLabelService registered +2025-04-18 15:17:22,685 - INFO - app.services.service_manager - Service DataInitializationService registered +2025-04-18 15:17:22,686 - INFO - app.services.service_manager - Service SchedulerService registered +2025-04-18 15:17:22,686 - INFO - app.services.service_manager - Service FileService registered +2025-04-18 15:17:22,686 - INFO - app.services.service_manager - Service TCGCSVService registered +2025-04-18 15:17:22,686 - INFO - app.services.service_manager - Service MTGJSONService registered +2025-04-18 15:17:22,687 - INFO - app.services.service_manager - All services initialized successfully +2025-04-18 15:17:22,687 - INFO - app.services.data_initialization - Starting data initialization process +2025-04-18 15:17:22,687 - INFO - app.services.data_initialization - Initializing archived prices... +2025-04-18 15:17:22,687 - INFO - app.services.data_initialization - Starting archived prices initialization from 2024-03-05 to 2025-04-17 +2025-04-18 15:17:22,688 - INFO - app.services.data_initialization - Processing 409 dates +2025-04-18 15:17:22,688 - INFO - app.services.data_initialization - Downloading and processing archived prices for 2024-03-05 +2025-04-18 15:17:22,864 - INFO - app.services.external_api.base_external_service - Making request to https://tcgcsv.com/archive/tcgplayer/prices-2024-03-05.ppmd.7z +2025-04-18 15:17:27,182 - INFO - app.services.data_initialization - Processed prices for category 1, group 23319 on 2024-03-05 +2025-04-18 15:17:27,182 - INFO - app.services.data_initialization - Processed prices for category 1, group 1687 on 2024-03-05 +2025-04-18 15:17:27,193 - INFO - app.services.data_initialization - Processed prices for category 1, group 2326 on 2024-03-05 +2025-04-18 15:17:27,210 - INFO - app.services.data_initialization - Processed prices for category 1, group 117 on 2024-03-05 +2025-04-18 15:17:27,225 - INFO - app.services.data_initialization - Processed prices for category 1, group 1277 on 2024-03-05 +2025-04-18 15:17:27,242 - INFO - app.services.data_initialization - Processed prices for category 1, group 1476 on 2024-03-05 +2025-04-18 15:17:27,261 - INFO - app.services.data_initialization - Processed prices for category 1, group 82 on 2024-03-05 +2025-04-18 15:17:27,285 - INFO - app.services.data_initialization - Processed prices for category 1, group 80 on 2024-03-05 +2025-04-18 15:17:27,299 - INFO - app.services.data_initialization - Processed prices for category 1, group 2771 on 2024-03-05 +2025-04-18 15:17:27,314 - INFO - app.services.data_initialization - Processed prices for category 1, group 1163 on 2024-03-05 +2025-04-18 15:17:27,325 - INFO - app.services.data_initialization - Processed prices for category 1, group 16 on 2024-03-05 +2025-04-18 15:17:27,337 - INFO - app.services.data_initialization - Processed prices for category 1, group 57 on 2024-03-05 +2025-04-18 15:17:27,347 - INFO - app.services.data_initialization - Processed prices for category 1, group 30 on 2024-03-05 +2025-04-18 15:17:27,366 - INFO - app.services.data_initialization - Processed prices for category 1, group 2245 on 2024-03-05 +2025-04-18 15:17:27,383 - INFO - app.services.data_initialization - Processed prices for category 1, group 23316 on 2024-03-05 +2025-04-18 15:17:27,397 - INFO - app.services.data_initialization - Processed prices for category 1, group 1490 on 2024-03-05 +2025-04-18 15:17:27,417 - INFO - app.services.data_initialization - Processed prices for category 1, group 1144 on 2024-03-05 +2025-04-18 15:17:27,449 - INFO - app.services.data_initialization - Processed prices for category 1, group 3070 on 2024-03-05 +2025-04-18 15:17:27,479 - INFO - app.services.data_initialization - Processed prices for category 1, group 2655 on 2024-03-05 +2025-04-18 15:17:27,489 - INFO - app.services.data_initialization - Processed prices for category 1, group 31 on 2024-03-05 +2025-04-18 15:17:27,500 - INFO - app.services.data_initialization - Processed prices for category 1, group 3158 on 2024-03-05 +2025-04-18 15:17:27,517 - INFO - app.services.data_initialization - Processed prices for category 1, group 39 on 2024-03-05 +2025-04-18 15:17:27,529 - INFO - app.services.data_initialization - Processed prices for category 1, group 2966 on 2024-03-05 +2025-04-18 15:17:27,554 - INFO - app.services.data_initialization - Processed prices for category 1, group 67 on 2024-03-05 +2025-04-18 15:17:27,579 - INFO - app.services.data_initialization - Processed prices for category 1, group 2568 on 2024-03-05 +2025-04-18 15:17:27,607 - INFO - app.services.data_initialization - Processed prices for category 1, group 22875 on 2024-03-05 +2025-04-18 15:17:27,617 - INFO - app.services.data_initialization - Processed prices for category 1, group 2067 on 2024-03-05 +2025-04-18 15:17:27,629 - INFO - app.services.data_initialization - Processed prices for category 1, group 1904 on 2024-03-05 +2025-04-18 15:17:27,636 - INFO - app.services.data_initialization - Processed prices for category 1, group 2546 on 2024-03-05 +2025-04-18 15:17:27,646 - INFO - app.services.data_initialization - Processed prices for category 1, group 17667 on 2024-03-05 +2025-04-18 15:17:27,668 - INFO - app.services.data_initialization - Processed prices for category 1, group 20 on 2024-03-05 +2025-04-18 15:17:27,670 - INFO - app.services.data_initialization - Processed prices for category 1, group 2552 on 2024-03-05 +2025-04-18 15:17:27,680 - INFO - app.services.data_initialization - Processed prices for category 1, group 2463 on 2024-03-05 +2025-04-18 15:17:27,695 - INFO - app.services.data_initialization - Processed prices for category 1, group 1276 on 2024-03-05 +2025-04-18 15:17:27,710 - INFO - app.services.data_initialization - Processed prices for category 1, group 72 on 2024-03-05 +2025-04-18 15:17:27,720 - INFO - app.services.data_initialization - Processed prices for category 1, group 37 on 2024-03-05 +2025-04-18 15:17:27,731 - INFO - app.services.data_initialization - Processed prices for category 1, group 2361 on 2024-03-05 +2025-04-18 15:17:27,750 - INFO - app.services.data_initialization - Processed prices for category 1, group 70 on 2024-03-05 +2025-04-18 15:17:27,760 - INFO - app.services.data_initialization - Processed prices for category 1, group 2084 on 2024-03-05 +2025-04-18 15:17:27,788 - INFO - app.services.data_initialization - Processed prices for category 1, group 3185 on 2024-03-05 +2025-04-18 15:17:27,806 - INFO - app.services.data_initialization - Processed prices for category 1, group 1673 on 2024-03-05 +2025-04-18 15:17:27,834 - INFO - app.services.data_initialization - Processed prices for category 1, group 17670 on 2024-03-05 +2025-04-18 15:17:27,850 - INFO - app.services.data_initialization - Processed prices for category 1, group 2481 on 2024-03-05 +2025-04-18 15:17:27,862 - INFO - app.services.data_initialization - Processed prices for category 1, group 3169 on 2024-03-05 +2025-04-18 15:17:27,872 - INFO - app.services.data_initialization - Processed prices for category 1, group 2598 on 2024-03-05 +2025-04-18 15:17:27,900 - INFO - app.services.data_initialization - Processed prices for category 1, group 2773 on 2024-03-05 +2025-04-18 15:17:27,913 - INFO - app.services.data_initialization - Processed prices for category 1, group 2770 on 2024-03-05 +2025-04-18 15:17:27,922 - INFO - app.services.data_initialization - Processed prices for category 1, group 22970 on 2024-03-05 +2025-04-18 15:17:27,942 - INFO - app.services.data_initialization - Processed prices for category 1, group 44 on 2024-03-05 +2025-04-18 15:17:27,954 - INFO - app.services.data_initialization - Processed prices for category 1, group 3160 on 2024-03-05 +2025-04-18 15:17:27,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 45 on 2024-03-05 +2025-04-18 15:17:27,983 - INFO - app.services.data_initialization - Processed prices for category 1, group 17665 on 2024-03-05 +2025-04-18 15:17:28,001 - INFO - app.services.data_initialization - Processed prices for category 1, group 103 on 2024-03-05 +2025-04-18 15:17:28,015 - INFO - app.services.data_initialization - Processed prices for category 1, group 125 on 2024-03-05 +2025-04-18 15:17:28,025 - INFO - app.services.data_initialization - Processed prices for category 1, group 2562 on 2024-03-05 +2025-04-18 15:17:28,034 - INFO - app.services.data_initialization - Processed prices for category 1, group 54 on 2024-03-05 +2025-04-18 15:17:28,050 - INFO - app.services.data_initialization - Processed prices for category 1, group 2634 on 2024-03-05 +2025-04-18 15:17:28,113 - INFO - app.services.data_initialization - Processed prices for category 1, group 69 on 2024-03-05 +2025-04-18 15:17:28,123 - INFO - app.services.data_initialization - Processed prices for category 1, group 2633 on 2024-03-05 +2025-04-18 15:17:28,137 - INFO - app.services.data_initialization - Processed prices for category 1, group 88 on 2024-03-05 +2025-04-18 15:17:28,149 - INFO - app.services.data_initialization - Processed prices for category 1, group 3175 on 2024-03-05 +2025-04-18 15:17:28,159 - INFO - app.services.data_initialization - Processed prices for category 1, group 36 on 2024-03-05 +2025-04-18 15:17:28,171 - INFO - app.services.data_initialization - Processed prices for category 1, group 2891 on 2024-03-05 +2025-04-18 15:17:28,197 - INFO - app.services.data_initialization - Processed prices for category 1, group 1512 on 2024-03-05 +2025-04-18 15:17:28,212 - INFO - app.services.data_initialization - Processed prices for category 1, group 11 on 2024-03-05 +2025-04-18 15:17:28,224 - INFO - app.services.data_initialization - Processed prices for category 1, group 40 on 2024-03-05 +2025-04-18 15:17:28,233 - INFO - app.services.data_initialization - Processed prices for category 1, group 2220 on 2024-03-05 +2025-04-18 15:17:28,241 - INFO - app.services.data_initialization - Processed prices for category 1, group 2386 on 2024-03-05 +2025-04-18 15:17:28,269 - INFO - app.services.data_initialization - Processed prices for category 1, group 2864 on 2024-03-05 +2025-04-18 15:17:28,287 - INFO - app.services.data_initialization - Processed prices for category 1, group 24 on 2024-03-05 +2025-04-18 15:17:28,298 - INFO - app.services.data_initialization - Processed prices for category 1, group 1348 on 2024-03-05 +2025-04-18 15:17:28,319 - INFO - app.services.data_initialization - Processed prices for category 1, group 2043 on 2024-03-05 +2025-04-18 15:17:28,336 - INFO - app.services.data_initialization - Processed prices for category 1, group 108 on 2024-03-05 +2025-04-18 15:17:28,354 - INFO - app.services.data_initialization - Processed prices for category 1, group 124 on 2024-03-05 +2025-04-18 15:17:28,367 - INFO - app.services.data_initialization - Processed prices for category 1, group 23164 on 2024-03-05 +2025-04-18 15:17:28,400 - INFO - app.services.data_initialization - Processed prices for category 1, group 2942 on 2024-03-05 +2025-04-18 15:17:28,453 - INFO - app.services.data_initialization - Processed prices for category 1, group 23019 on 2024-03-05 +2025-04-18 15:17:28,466 - INFO - app.services.data_initialization - Processed prices for category 1, group 2334 on 2024-03-05 +2025-04-18 15:17:28,480 - INFO - app.services.data_initialization - Processed prices for category 1, group 122 on 2024-03-05 +2025-04-18 15:17:28,491 - INFO - app.services.data_initialization - Processed prices for category 1, group 365 on 2024-03-05 +2025-04-18 15:17:28,500 - INFO - app.services.data_initialization - Processed prices for category 1, group 2247 on 2024-03-05 +2025-04-18 15:17:28,508 - INFO - app.services.data_initialization - Processed prices for category 1, group 2447 on 2024-03-05 +2025-04-18 15:17:28,520 - INFO - app.services.data_initialization - Processed prices for category 1, group 121 on 2024-03-05 +2025-04-18 15:17:28,532 - INFO - app.services.data_initialization - Processed prices for category 1, group 22922 on 2024-03-05 +2025-04-18 15:17:28,548 - INFO - app.services.data_initialization - Processed prices for category 1, group 23 on 2024-03-05 +2025-04-18 15:17:28,564 - INFO - app.services.data_initialization - Processed prices for category 1, group 25 on 2024-03-05 +2025-04-18 15:17:28,584 - INFO - app.services.data_initialization - Processed prices for category 1, group 1293 on 2024-03-05 +2025-04-18 15:17:28,601 - INFO - app.services.data_initialization - Processed prices for category 1, group 362 on 2024-03-05 +2025-04-18 15:17:28,616 - INFO - app.services.data_initialization - Processed prices for category 1, group 83 on 2024-03-05 +2025-04-18 15:17:28,628 - INFO - app.services.data_initialization - Processed prices for category 1, group 107 on 2024-03-05 +2025-04-18 15:17:28,650 - INFO - app.services.data_initialization - Processed prices for category 1, group 23337 on 2024-03-05 +2025-04-18 15:17:28,673 - INFO - app.services.data_initialization - Processed prices for category 1, group 1 on 2024-03-05 +2025-04-18 15:17:28,689 - INFO - app.services.data_initialization - Processed prices for category 1, group 7 on 2024-03-05 +2025-04-18 15:17:28,707 - INFO - app.services.data_initialization - Processed prices for category 1, group 569 on 2024-03-05 +2025-04-18 15:17:28,719 - INFO - app.services.data_initialization - Processed prices for category 1, group 2156 on 2024-03-05 +2025-04-18 15:17:28,739 - INFO - app.services.data_initialization - Processed prices for category 1, group 110 on 2024-03-05 +2025-04-18 15:17:28,759 - INFO - app.services.data_initialization - Processed prices for category 1, group 1791 on 2024-03-05 +2025-04-18 15:17:28,790 - INFO - app.services.data_initialization - Processed prices for category 1, group 2958 on 2024-03-05 +2025-04-18 15:17:28,793 - INFO - app.services.data_initialization - Processed prices for category 1, group 1520 on 2024-03-05 +2025-04-18 15:17:28,814 - INFO - app.services.data_initialization - Processed prices for category 1, group 95 on 2024-03-05 +2025-04-18 15:17:28,816 - INFO - app.services.data_initialization - Processed prices for category 1, group 23440 on 2024-03-05 +2025-04-18 15:17:28,826 - INFO - app.services.data_initialization - Processed prices for category 1, group 2076 on 2024-03-05 +2025-04-18 15:17:28,844 - INFO - app.services.data_initialization - Processed prices for category 1, group 2098 on 2024-03-05 +2025-04-18 15:17:28,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 1726 on 2024-03-05 +2025-04-18 15:17:28,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 23167 on 2024-03-05 +2025-04-18 15:17:28,865 - INFO - app.services.data_initialization - Processed prices for category 1, group 2713 on 2024-03-05 +2025-04-18 15:17:28,883 - INFO - app.services.data_initialization - Processed prices for category 1, group 1934 on 2024-03-05 +2025-04-18 15:17:28,980 - INFO - app.services.data_initialization - Processed prices for category 1, group 2715 on 2024-03-05 +2025-04-18 15:17:28,991 - INFO - app.services.data_initialization - Processed prices for category 1, group 1524 on 2024-03-05 +2025-04-18 15:17:29,006 - INFO - app.services.data_initialization - Processed prices for category 1, group 1792 on 2024-03-05 +2025-04-18 15:17:29,021 - INFO - app.services.data_initialization - Processed prices for category 1, group 23420 on 2024-03-05 +2025-04-18 15:17:29,040 - INFO - app.services.data_initialization - Processed prices for category 1, group 2360 on 2024-03-05 +2025-04-18 15:17:29,041 - INFO - app.services.data_initialization - Processed prices for category 1, group 23445 on 2024-03-05 +2025-04-18 15:17:29,052 - INFO - app.services.data_initialization - Processed prices for category 1, group 3129 on 2024-03-05 +2025-04-18 15:17:29,081 - INFO - app.services.data_initialization - Processed prices for category 1, group 2648 on 2024-03-05 +2025-04-18 15:17:29,093 - INFO - app.services.data_initialization - Processed prices for category 1, group 2087 on 2024-03-05 +2025-04-18 15:17:29,110 - INFO - app.services.data_initialization - Processed prices for category 1, group 22876 on 2024-03-05 +2025-04-18 15:17:29,129 - INFO - app.services.data_initialization - Processed prices for category 1, group 1503 on 2024-03-05 +2025-04-18 15:17:29,145 - INFO - app.services.data_initialization - Processed prices for category 1, group 17662 on 2024-03-05 +2025-04-18 15:17:29,155 - INFO - app.services.data_initialization - Processed prices for category 1, group 113 on 2024-03-05 +2025-04-18 15:17:29,155 - INFO - app.services.data_initialization - Processed prices for category 1, group 29 on 2024-03-05 +2025-04-18 15:17:29,167 - INFO - app.services.data_initialization - Processed prices for category 1, group 2643 on 2024-03-05 +2025-04-18 15:17:29,190 - INFO - app.services.data_initialization - Processed prices for category 1, group 81 on 2024-03-05 +2025-04-18 15:17:29,200 - INFO - app.services.data_initialization - Processed prices for category 1, group 1930 on 2024-03-05 +2025-04-18 15:17:29,200 - INFO - app.services.data_initialization - Processed prices for category 1, group 2988 on 2024-03-05 +2025-04-18 15:17:29,202 - INFO - app.services.data_initialization - Processed prices for category 1, group 2989 on 2024-03-05 +2025-04-18 15:17:29,232 - INFO - app.services.data_initialization - Processed prices for category 1, group 3157 on 2024-03-05 +2025-04-18 15:17:29,245 - INFO - app.services.data_initialization - Processed prices for category 1, group 87 on 2024-03-05 +2025-04-18 15:17:29,381 - INFO - app.services.data_initialization - Processed prices for category 1, group 92 on 2024-03-05 +2025-04-18 15:17:29,396 - INFO - app.services.data_initialization - Processed prices for category 1, group 2665 on 2024-03-05 +2025-04-18 15:17:29,408 - INFO - app.services.data_initialization - Processed prices for category 1, group 23345 on 2024-03-05 +2025-04-18 15:17:29,419 - INFO - app.services.data_initialization - Processed prices for category 1, group 93 on 2024-03-05 +2025-04-18 15:17:29,434 - INFO - app.services.data_initialization - Processed prices for category 1, group 63 on 2024-03-05 +2025-04-18 15:17:29,435 - INFO - app.services.data_initialization - Processed prices for category 1, group 23444 on 2024-03-05 +2025-04-18 15:17:29,482 - INFO - app.services.data_initialization - Processed prices for category 1, group 3047 on 2024-03-05 +2025-04-18 15:17:29,500 - INFO - app.services.data_initialization - Processed prices for category 1, group 2791 on 2024-03-05 +2025-04-18 15:17:29,515 - INFO - app.services.data_initialization - Processed prices for category 1, group 76 on 2024-03-05 +2025-04-18 15:17:29,534 - INFO - app.services.data_initialization - Processed prices for category 1, group 2092 on 2024-03-05 +2025-04-18 15:17:29,546 - INFO - app.services.data_initialization - Processed prices for category 1, group 3032 on 2024-03-05 +2025-04-18 15:17:29,557 - INFO - app.services.data_initialization - Processed prices for category 1, group 52 on 2024-03-05 +2025-04-18 15:17:29,566 - INFO - app.services.data_initialization - Processed prices for category 1, group 2207 on 2024-03-05 +2025-04-18 15:17:29,588 - INFO - app.services.data_initialization - Processed prices for category 1, group 60 on 2024-03-05 +2025-04-18 15:17:29,611 - INFO - app.services.data_initialization - Processed prices for category 1, group 2441 on 2024-03-05 +2025-04-18 15:17:29,620 - INFO - app.services.data_initialization - Processed prices for category 1, group 89 on 2024-03-05 +2025-04-18 15:17:29,629 - INFO - app.services.data_initialization - Processed prices for category 1, group 1577 on 2024-03-05 +2025-04-18 15:17:29,660 - INFO - app.services.data_initialization - Processed prices for category 1, group 17684 on 2024-03-05 +2025-04-18 15:17:29,672 - INFO - app.services.data_initialization - Processed prices for category 1, group 1905 on 2024-03-05 +2025-04-18 15:17:29,687 - INFO - app.services.data_initialization - Processed prices for category 1, group 26 on 2024-03-05 +2025-04-18 15:17:29,705 - INFO - app.services.data_initialization - Processed prices for category 1, group 1790 on 2024-03-05 +2025-04-18 15:17:29,705 - INFO - app.services.data_initialization - Processed prices for category 1, group 1688 on 2024-03-05 +2025-04-18 15:17:29,714 - INFO - app.services.data_initialization - Processed prices for category 1, group 21 on 2024-03-05 +2025-04-18 15:17:29,727 - INFO - app.services.data_initialization - Processed prices for category 1, group 23273 on 2024-03-05 +2025-04-18 15:17:29,740 - INFO - app.services.data_initialization - Processed prices for category 1, group 1641 on 2024-03-05 +2025-04-18 15:17:29,752 - INFO - app.services.data_initialization - Processed prices for category 1, group 23421 on 2024-03-05 +2025-04-18 15:17:29,768 - INFO - app.services.data_initialization - Processed prices for category 1, group 28 on 2024-03-05 +2025-04-18 15:17:29,779 - INFO - app.services.data_initialization - Processed prices for category 1, group 23270 on 2024-03-05 +2025-04-18 15:17:29,790 - INFO - app.services.data_initialization - Processed prices for category 1, group 369 on 2024-03-05 +2025-04-18 15:17:29,810 - INFO - app.services.data_initialization - Processed prices for category 1, group 2366 on 2024-03-05 +2025-04-18 15:17:29,825 - INFO - app.services.data_initialization - Processed prices for category 1, group 55 on 2024-03-05 +2025-04-18 15:17:29,838 - INFO - app.services.data_initialization - Processed prices for category 1, group 2570 on 2024-03-05 +2025-04-18 15:17:29,859 - INFO - app.services.data_initialization - Processed prices for category 1, group 1645 on 2024-03-05 +2025-04-18 15:17:29,871 - INFO - app.services.data_initialization - Processed prices for category 1, group 23224 on 2024-03-05 +2025-04-18 15:17:29,881 - INFO - app.services.data_initialization - Processed prices for category 1, group 32 on 2024-03-05 +2025-04-18 15:17:29,904 - INFO - app.services.data_initialization - Processed prices for category 1, group 73 on 2024-03-05 +2025-04-18 15:17:29,919 - INFO - app.services.data_initialization - Processed prices for category 1, group 3033 on 2024-03-05 +2025-04-18 15:17:29,949 - INFO - app.services.data_initialization - Processed prices for category 1, group 2965 on 2024-03-05 +2025-04-18 15:17:29,960 - INFO - app.services.data_initialization - Processed prices for category 1, group 1874 on 2024-03-05 +2025-04-18 15:17:29,982 - INFO - app.services.data_initialization - Processed prices for category 1, group 3 on 2024-03-05 +2025-04-18 15:17:29,992 - INFO - app.services.data_initialization - Processed prices for category 1, group 53 on 2024-03-05 +2025-04-18 15:17:30,002 - INFO - app.services.data_initialization - Processed prices for category 1, group 1835 on 2024-03-05 +2025-04-18 15:17:30,016 - INFO - app.services.data_initialization - Processed prices for category 1, group 94 on 2024-03-05 +2025-04-18 15:17:30,043 - INFO - app.services.data_initialization - Processed prices for category 1, group 75 on 2024-03-05 +2025-04-18 15:17:30,098 - INFO - app.services.data_initialization - Processed prices for category 1, group 23020 on 2024-03-05 +2025-04-18 15:17:30,116 - INFO - app.services.data_initialization - Processed prices for category 1, group 1693 on 2024-03-05 +2025-04-18 15:17:30,128 - INFO - app.services.data_initialization - Processed prices for category 1, group 2892 on 2024-03-05 +2025-04-18 15:17:30,146 - INFO - app.services.data_initialization - Processed prices for category 1, group 23363 on 2024-03-05 +2025-04-18 15:17:30,165 - INFO - app.services.data_initialization - Processed prices for category 1, group 59 on 2024-03-05 +2025-04-18 15:17:30,180 - INFO - app.services.data_initialization - Processed prices for category 1, group 2009 on 2024-03-05 +2025-04-18 15:17:30,200 - INFO - app.services.data_initialization - Processed prices for category 1, group 1708 on 2024-03-05 +2025-04-18 15:17:30,209 - INFO - app.services.data_initialization - Processed prices for category 1, group 1475 on 2024-03-05 +2025-04-18 15:17:30,209 - INFO - app.services.data_initialization - Processed prices for category 1, group 14 on 2024-03-05 +2025-04-18 15:17:30,237 - INFO - app.services.data_initialization - Processed prices for category 1, group 2750 on 2024-03-05 +2025-04-18 15:17:30,250 - INFO - app.services.data_initialization - Processed prices for category 1, group 6 on 2024-03-05 +2025-04-18 15:17:30,270 - INFO - app.services.data_initialization - Processed prices for category 1, group 1164 on 2024-03-05 +2025-04-18 15:17:30,336 - INFO - app.services.data_initialization - Processed prices for category 1, group 2576 on 2024-03-05 +2025-04-18 15:17:30,338 - INFO - app.services.data_initialization - Processed prices for category 1, group 3176 on 2024-03-05 +2025-04-18 15:17:30,357 - INFO - app.services.data_initialization - Processed prices for category 1, group 22979 on 2024-03-05 +2025-04-18 15:17:30,370 - INFO - app.services.data_initialization - Processed prices for category 1, group 2967 on 2024-03-05 +2025-04-18 15:17:30,382 - INFO - app.services.data_initialization - Processed prices for category 1, group 2900 on 2024-03-05 +2025-04-18 15:17:30,391 - INFO - app.services.data_initialization - Processed prices for category 1, group 47 on 2024-03-05 +2025-04-18 15:17:30,409 - INFO - app.services.data_initialization - Processed prices for category 1, group 1111 on 2024-03-05 +2025-04-18 15:17:30,427 - INFO - app.services.data_initialization - Processed prices for category 1, group 2050 on 2024-03-05 +2025-04-18 15:17:30,455 - INFO - app.services.data_initialization - Processed prices for category 1, group 23312 on 2024-03-05 +2025-04-18 15:17:30,464 - INFO - app.services.data_initialization - Processed prices for category 1, group 2632 on 2024-03-05 +2025-04-18 15:17:30,478 - INFO - app.services.data_initialization - Processed prices for category 1, group 78 on 2024-03-05 +2025-04-18 15:17:30,480 - INFO - app.services.data_initialization - Processed prices for category 1, group 23448 on 2024-03-05 +2025-04-18 15:17:30,489 - INFO - app.services.data_initialization - Processed prices for category 1, group 119 on 2024-03-05 +2025-04-18 15:17:30,501 - INFO - app.services.data_initialization - Processed prices for category 1, group 2599 on 2024-03-05 +2025-04-18 15:17:30,513 - INFO - app.services.data_initialization - Processed prices for category 1, group 84 on 2024-03-05 +2025-04-18 15:17:30,567 - INFO - app.services.data_initialization - Processed prices for category 1, group 23165 on 2024-03-05 +2025-04-18 15:17:30,585 - INFO - app.services.data_initialization - Processed prices for category 1, group 51 on 2024-03-05 +2025-04-18 15:17:30,596 - INFO - app.services.data_initialization - Processed prices for category 1, group 363 on 2024-03-05 +2025-04-18 15:17:30,604 - INFO - app.services.data_initialization - Processed prices for category 1, group 23447 on 2024-03-05 +2025-04-18 15:17:30,623 - INFO - app.services.data_initialization - Processed prices for category 1, group 1113 on 2024-03-05 +2025-04-18 15:17:30,638 - INFO - app.services.data_initialization - Processed prices for category 1, group 115 on 2024-03-05 +2025-04-18 15:17:30,640 - INFO - app.services.data_initialization - Processed prices for category 1, group 2379 on 2024-03-05 +2025-04-18 15:17:30,660 - INFO - app.services.data_initialization - Processed prices for category 1, group 1879 on 2024-03-05 +2025-04-18 15:17:30,668 - INFO - app.services.data_initialization - Processed prices for category 1, group 2078 on 2024-03-05 +2025-04-18 15:17:30,679 - INFO - app.services.data_initialization - Processed prices for category 1, group 109 on 2024-03-05 +2025-04-18 15:17:30,690 - INFO - app.services.data_initialization - Processed prices for category 1, group 23317 on 2024-03-05 +2025-04-18 15:17:30,708 - INFO - app.services.data_initialization - Processed prices for category 1, group 1497 on 2024-03-05 +2025-04-18 15:17:30,722 - INFO - app.services.data_initialization - Processed prices for category 1, group 10 on 2024-03-05 +2025-04-18 15:17:30,732 - INFO - app.services.data_initialization - Processed prices for category 1, group 568 on 2024-03-05 +2025-04-18 15:17:30,741 - INFO - app.services.data_initialization - Processed prices for category 1, group 1837 on 2024-03-05 +2025-04-18 15:17:30,750 - INFO - app.services.data_initialization - Processed prices for category 1, group 2905 on 2024-03-05 +2025-04-18 15:17:30,751 - INFO - app.services.data_initialization - Processed prices for category 1, group 56 on 2024-03-05 +2025-04-18 15:17:30,752 - INFO - app.services.data_initialization - Processed prices for category 1, group 2712 on 2024-03-05 +2025-04-18 15:17:30,810 - INFO - app.services.data_initialization - Processed prices for category 1, group 1356 on 2024-03-05 +2025-04-18 15:17:30,830 - INFO - app.services.data_initialization - Processed prices for category 1, group 2189 on 2024-03-05 +2025-04-18 15:17:30,839 - INFO - app.services.data_initialization - Processed prices for category 1, group 3054 on 2024-03-05 +2025-04-18 15:17:30,848 - INFO - app.services.data_initialization - Processed prices for category 1, group 1311 on 2024-03-05 +2025-04-18 15:17:30,869 - INFO - app.services.data_initialization - Processed prices for category 1, group 2199 on 2024-03-05 +2025-04-18 15:17:30,883 - INFO - app.services.data_initialization - Processed prices for category 1, group 97 on 2024-03-05 +2025-04-18 15:17:30,892 - INFO - app.services.data_initialization - Processed prices for category 1, group 34 on 2024-03-05 +2025-04-18 15:17:30,893 - INFO - app.services.data_initialization - Processed prices for category 1, group 2572 on 2024-03-05 +2025-04-18 15:17:30,904 - INFO - app.services.data_initialization - Processed prices for category 1, group 1166 on 2024-03-05 +2025-04-18 15:17:30,922 - INFO - app.services.data_initialization - Processed prices for category 1, group 98 on 2024-03-05 +2025-04-18 15:17:30,942 - INFO - app.services.data_initialization - Processed prices for category 1, group 2 on 2024-03-05 +2025-04-18 15:17:30,957 - INFO - app.services.data_initialization - Processed prices for category 1, group 74 on 2024-03-05 +2025-04-18 15:17:30,967 - INFO - app.services.data_initialization - Processed prices for category 1, group 1477 on 2024-03-05 +2025-04-18 15:17:30,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 19 on 2024-03-05 +2025-04-18 15:17:30,978 - INFO - app.services.data_initialization - Processed prices for category 1, group 23099 on 2024-03-05 +2025-04-18 15:17:30,994 - INFO - app.services.data_initialization - Processed prices for category 1, group 1857 on 2024-03-05 +2025-04-18 15:17:31,006 - INFO - app.services.data_initialization - Processed prices for category 1, group 23288 on 2024-03-05 +2025-04-18 15:17:31,018 - INFO - app.services.data_initialization - Processed prices for category 1, group 2802 on 2024-03-05 +2025-04-18 15:17:31,033 - INFO - app.services.data_initialization - Processed prices for category 1, group 65 on 2024-03-05 +2025-04-18 15:17:31,044 - INFO - app.services.data_initialization - Processed prices for category 1, group 23102 on 2024-03-05 +2025-04-18 15:17:31,061 - INFO - app.services.data_initialization - Processed prices for category 1, group 1312 on 2024-03-05 +2025-04-18 15:17:31,074 - INFO - app.services.data_initialization - Processed prices for category 1, group 2822 on 2024-03-05 +2025-04-18 15:17:31,088 - INFO - app.services.data_initialization - Processed prices for category 1, group 5 on 2024-03-05 +2025-04-18 15:17:31,108 - INFO - app.services.data_initialization - Processed prices for category 1, group 2290 on 2024-03-05 +2025-04-18 15:17:31,124 - INFO - app.services.data_initialization - Processed prices for category 1, group 112 on 2024-03-05 +2025-04-18 15:17:31,139 - INFO - app.services.data_initialization - Processed prices for category 1, group 23362 on 2024-03-05 +2025-04-18 15:17:31,154 - INFO - app.services.data_initialization - Processed prices for category 1, group 2893 on 2024-03-05 +2025-04-18 15:17:31,175 - INFO - app.services.data_initialization - Processed prices for category 1, group 1515 on 2024-03-05 +2025-04-18 15:17:31,188 - INFO - app.services.data_initialization - Processed prices for category 1, group 114 on 2024-03-05 +2025-04-18 15:17:31,196 - INFO - app.services.data_initialization - Processed prices for category 1, group 1821 on 2024-03-05 +2025-04-18 15:17:31,204 - INFO - app.services.data_initialization - Processed prices for category 1, group 38 on 2024-03-05 +2025-04-18 15:17:31,214 - INFO - app.services.data_initialization - Processed prices for category 1, group 1145 on 2024-03-05 +2025-04-18 15:17:31,242 - INFO - app.services.data_initialization - Processed prices for category 1, group 2862 on 2024-03-05 +2025-04-18 15:17:31,252 - INFO - app.services.data_initialization - Processed prices for category 1, group 71 on 2024-03-05 +2025-04-18 15:17:31,265 - INFO - app.services.data_initialization - Processed prices for category 1, group 86 on 2024-03-05 +2025-04-18 15:17:31,281 - INFO - app.services.data_initialization - Processed prices for category 1, group 58 on 2024-03-05 +2025-04-18 15:17:31,296 - INFO - app.services.data_initialization - Processed prices for category 1, group 66 on 2024-03-05 +2025-04-18 15:17:31,305 - INFO - app.services.data_initialization - Processed prices for category 1, group 1507 on 2024-03-05 +2025-04-18 15:17:31,317 - INFO - app.services.data_initialization - Processed prices for category 1, group 105 on 2024-03-05 +2025-04-18 15:17:31,329 - INFO - app.services.data_initialization - Processed prices for category 1, group 2714 on 2024-03-05 +2025-04-18 15:17:31,329 - INFO - app.services.data_initialization - Processed prices for category 1, group 2351 on 2024-03-05 +2025-04-18 15:17:31,332 - INFO - app.services.data_initialization - Processed prices for category 1, group 2571 on 2024-03-05 +2025-04-18 15:17:31,342 - INFO - app.services.data_initialization - Processed prices for category 1, group 3178 on 2024-03-05 +2025-04-18 15:17:31,362 - INFO - app.services.data_initialization - Processed prices for category 1, group 2801 on 2024-03-05 +2025-04-18 15:17:31,372 - INFO - app.services.data_initialization - Processed prices for category 1, group 15 on 2024-03-05 +2025-04-18 15:17:31,382 - INFO - app.services.data_initialization - Processed prices for category 1, group 35 on 2024-03-05 +2025-04-18 15:17:31,396 - INFO - app.services.data_initialization - Processed prices for category 1, group 2543 on 2024-03-05 +2025-04-18 15:17:31,418 - INFO - app.services.data_initialization - Processed prices for category 1, group 3031 on 2024-03-05 +2025-04-18 15:17:31,429 - INFO - app.services.data_initialization - Processed prices for category 1, group 1274 on 2024-03-05 +2025-04-18 15:17:31,439 - INFO - app.services.data_initialization - Processed prices for category 1, group 1765 on 2024-03-05 +2025-04-18 15:17:31,458 - INFO - app.services.data_initialization - Processed prices for category 1, group 100 on 2024-03-05 +2025-04-18 15:17:31,477 - INFO - app.services.data_initialization - Processed prices for category 1, group 1740 on 2024-03-05 +2025-04-18 15:17:31,488 - INFO - app.services.data_initialization - Processed prices for category 1, group 106 on 2024-03-05 +2025-04-18 15:17:31,533 - INFO - app.services.data_initialization - Processed prices for category 1, group 2198 on 2024-03-05 +2025-04-18 15:17:31,548 - INFO - app.services.data_initialization - Processed prices for category 1, group 3048 on 2024-03-05 +2025-04-18 15:17:31,570 - INFO - app.services.data_initialization - Processed prices for category 1, group 102 on 2024-03-05 +2025-04-18 15:17:31,578 - INFO - app.services.data_initialization - Processed prices for category 1, group 50 on 2024-03-05 +2025-04-18 15:17:31,601 - INFO - app.services.data_initialization - Processed prices for category 1, group 1882 on 2024-03-05 +2025-04-18 15:17:31,613 - INFO - app.services.data_initialization - Processed prices for category 1, group 601 on 2024-03-05 +2025-04-18 15:17:31,630 - INFO - app.services.data_initialization - Processed prices for category 1, group 43 on 2024-03-05 +2025-04-18 15:17:31,638 - INFO - app.services.data_initialization - Processed prices for category 1, group 368 on 2024-03-05 +2025-04-18 15:17:31,648 - INFO - app.services.data_initialization - Processed prices for category 1, group 1649 on 2024-03-05 +2025-04-18 15:17:31,662 - INFO - app.services.data_initialization - Processed prices for category 1, group 22933 on 2024-03-05 +2025-04-18 15:17:31,690 - INFO - app.services.data_initialization - Processed prices for category 1, group 2653 on 2024-03-05 +2025-04-18 15:17:31,722 - INFO - app.services.data_initialization - Processed prices for category 1, group 3102 on 2024-03-05 +2025-04-18 15:17:31,731 - INFO - app.services.data_initialization - Processed prices for category 1, group 49 on 2024-03-05 +2025-04-18 15:17:31,742 - INFO - app.services.data_initialization - Processed prices for category 1, group 13 on 2024-03-05 +2025-04-18 15:17:31,759 - INFO - app.services.data_initialization - Processed prices for category 1, group 68 on 2024-03-05 +2025-04-18 15:17:31,775 - INFO - app.services.data_initialization - Processed prices for category 1, group 2870 on 2024-03-05 +2025-04-18 15:17:31,785 - INFO - app.services.data_initialization - Processed prices for category 1, group 12 on 2024-03-05 +2025-04-18 15:17:31,813 - INFO - app.services.data_initialization - Processed prices for category 1, group 2494 on 2024-03-05 +2025-04-18 15:17:31,826 - INFO - app.services.data_initialization - Processed prices for category 1, group 111 on 2024-03-05 +2025-04-18 15:17:31,840 - INFO - app.services.data_initialization - Processed prices for category 1, group 27 on 2024-03-05 +2025-04-18 15:17:31,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 2968 on 2024-03-05 +2025-04-18 15:17:31,881 - INFO - app.services.data_initialization - Processed prices for category 1, group 23361 on 2024-03-05 +2025-04-18 15:17:31,891 - INFO - app.services.data_initialization - Processed prices for category 1, group 1909 on 2024-03-05 +2025-04-18 15:17:31,905 - INFO - app.services.data_initialization - Processed prices for category 1, group 2717 on 2024-03-05 +2025-04-18 15:17:31,905 - INFO - app.services.data_initialization - Processed prices for category 1, group 1689 on 2024-03-05 +2025-04-18 15:17:31,928 - INFO - app.services.data_initialization - Processed prices for category 1, group 17666 on 2024-03-05 +2025-04-18 15:17:31,942 - INFO - app.services.data_initialization - Processed prices for category 1, group 18 on 2024-03-05 +2025-04-18 15:17:31,956 - INFO - app.services.data_initialization - Processed prices for category 1, group 101 on 2024-03-05 +2025-04-18 15:17:31,969 - INFO - app.services.data_initialization - Processed prices for category 1, group 3159 on 2024-03-05 +2025-04-18 15:17:31,971 - INFO - app.services.data_initialization - Processed prices for category 1, group 1832 on 2024-03-05 +2025-04-18 15:17:31,987 - INFO - app.services.data_initialization - Processed prices for category 1, group 2246 on 2024-03-05 +2025-04-18 15:17:31,998 - INFO - app.services.data_initialization - Processed prices for category 1, group 2716 on 2024-03-05 +2025-04-18 15:17:32,013 - INFO - app.services.data_initialization - Processed prices for category 1, group 570 on 2024-03-05 +2025-04-18 15:17:32,027 - INFO - app.services.data_initialization - Processed prices for category 1, group 118 on 2024-03-05 +2025-04-18 15:17:32,044 - INFO - app.services.data_initialization - Processed prices for category 1, group 22989 on 2024-03-05 +2025-04-18 15:17:32,062 - INFO - app.services.data_initialization - Processed prices for category 1, group 1794 on 2024-03-05 +2025-04-18 15:17:32,072 - INFO - app.services.data_initialization - Processed prices for category 1, group 23025 on 2024-03-05 +2025-04-18 15:17:32,083 - INFO - app.services.data_initialization - Processed prices for category 1, group 120 on 2024-03-05 +2025-04-18 15:17:32,103 - INFO - app.services.data_initialization - Processed prices for category 1, group 370 on 2024-03-05 +2025-04-18 15:17:32,118 - INFO - app.services.data_initialization - Processed prices for category 1, group 77 on 2024-03-05 +2025-04-18 15:17:32,128 - INFO - app.services.data_initialization - Processed prices for category 1, group 2444 on 2024-03-05 +2025-04-18 15:17:32,128 - INFO - app.services.data_initialization - Processed prices for category 1, group 3100 on 2024-03-05 +2025-04-18 15:17:32,137 - INFO - app.services.data_initialization - Processed prices for category 1, group 2376 on 2024-03-05 +2025-04-18 15:17:32,149 - INFO - app.services.data_initialization - Processed prices for category 1, group 23223 on 2024-03-05 +2025-04-18 15:17:32,165 - INFO - app.services.data_initialization - Processed prices for category 1, group 46 on 2024-03-05 +2025-04-18 15:17:32,175 - INFO - app.services.data_initialization - Processed prices for category 1, group 104 on 2024-03-05 +2025-04-18 15:17:32,187 - INFO - app.services.data_initialization - Processed prices for category 1, group 2766 on 2024-03-05 +2025-04-18 15:17:32,209 - INFO - app.services.data_initialization - Processed prices for category 1, group 2654 on 2024-03-05 +2025-04-18 15:17:32,233 - INFO - app.services.data_initialization - Processed prices for category 1, group 3079 on 2024-03-05 +2025-04-18 15:17:32,245 - INFO - app.services.data_initialization - Processed prices for category 1, group 1793 on 2024-03-05 +2025-04-18 15:17:32,259 - INFO - app.services.data_initialization - Processed prices for category 1, group 3140 on 2024-03-05 +2025-04-18 15:17:32,268 - INFO - app.services.data_initialization - Processed prices for category 1, group 2699 on 2024-03-05 +2025-04-18 15:17:32,295 - INFO - app.services.data_initialization - Processed prices for category 1, group 2772 on 2024-03-05 +2025-04-18 15:17:32,315 - INFO - app.services.data_initialization - Processed prices for category 1, group 364 on 2024-03-05 +2025-04-18 15:17:32,329 - INFO - app.services.data_initialization - Processed prices for category 1, group 85 on 2024-03-05 +2025-04-18 15:17:32,355 - INFO - app.services.data_initialization - Processed prices for category 1, group 2603 on 2024-03-05 +2025-04-18 15:17:32,367 - INFO - app.services.data_initialization - Processed prices for category 1, group 1141 on 2024-03-05 +2025-04-18 15:17:32,377 - INFO - app.services.data_initialization - Processed prices for category 1, group 1275 on 2024-03-05 +2025-04-18 15:17:32,420 - INFO - app.services.data_initialization - Processed prices for category 1, group 2708 on 2024-03-05 +2025-04-18 15:17:32,433 - INFO - app.services.data_initialization - Processed prices for category 1, group 22 on 2024-03-05 +2025-04-18 15:17:32,435 - INFO - app.services.data_initialization - Processed prices for category 1, group 23446 on 2024-03-05 +2025-04-18 15:17:32,444 - INFO - app.services.data_initialization - Processed prices for category 1, group 48 on 2024-03-05 +2025-04-18 15:17:32,471 - INFO - app.services.data_initialization - Processed prices for category 1, group 23163 on 2024-03-05 +2025-04-18 15:17:32,480 - INFO - app.services.data_initialization - Processed prices for category 1, group 23439 on 2024-03-05 +2025-04-18 15:17:32,496 - INFO - app.services.data_initialization - Processed prices for category 1, group 116 on 2024-03-05 +2025-04-18 15:17:32,498 - INFO - app.services.data_initialization - Processed prices for category 1, group 23443 on 2024-03-05 +2025-04-18 15:17:32,516 - INFO - app.services.data_initialization - Processed prices for category 1, group 1527 on 2024-03-05 +2025-04-18 15:17:32,532 - INFO - app.services.data_initialization - Processed prices for category 1, group 2251 on 2024-03-05 +2025-04-18 15:17:32,534 - INFO - app.services.data_initialization - Processed prices for category 1, group 23442 on 2024-03-05 +2025-04-18 15:17:32,546 - INFO - app.services.data_initialization - Processed prices for category 1, group 2898 on 2024-03-05 +2025-04-18 15:17:32,574 - INFO - app.services.data_initialization - Processed prices for category 1, group 3026 on 2024-03-05 +2025-04-18 15:17:32,585 - INFO - app.services.data_initialization - Processed prices for category 1, group 2806 on 2024-03-05 +2025-04-18 15:17:32,600 - INFO - app.services.data_initialization - Processed prices for category 1, group 1526 on 2024-03-05 +2025-04-18 15:17:32,611 - INFO - app.services.data_initialization - Processed prices for category 1, group 367 on 2024-03-05 +2025-04-18 15:17:32,622 - INFO - app.services.data_initialization - Processed prices for category 1, group 1511 on 2024-03-05 +2025-04-18 15:17:32,630 - INFO - app.services.data_initialization - Processed prices for category 1, group 2742 on 2024-03-05 +2025-04-18 15:17:32,640 - INFO - app.services.data_initialization - Processed prices for category 1, group 23318 on 2024-03-05 +2025-04-18 15:17:32,656 - INFO - app.services.data_initialization - Processed prices for category 1, group 79 on 2024-03-05 +2025-04-18 15:17:32,656 - INFO - app.services.data_initialization - Processed prices for category 1, group 2778 on 2024-03-05 +2025-04-18 15:17:32,659 - INFO - app.services.data_initialization - Processed prices for category 1, group 2642 on 2024-03-05 +2025-04-18 15:17:32,688 - INFO - app.services.data_initialization - Processed prices for category 1, group 2823 on 2024-03-05 +2025-04-18 15:17:32,697 - INFO - app.services.data_initialization - Processed prices for category 1, group 2203 on 2024-03-05 +2025-04-18 15:17:32,700 - INFO - app.services.data_initialization - Processed prices for category 1, group 2899 on 2024-03-05 +2025-04-18 15:17:32,723 - INFO - app.services.data_initialization - Processed prices for category 1, group 2250 on 2024-03-05 +2025-04-18 15:17:32,738 - INFO - app.services.data_initialization - Processed prices for category 1, group 2477 on 2024-03-05 +2025-04-18 15:17:32,753 - INFO - app.services.data_initialization - Processed prices for category 1, group 99 on 2024-03-05 +2025-04-18 15:17:32,764 - INFO - app.services.data_initialization - Processed prices for category 1, group 2359 on 2024-03-05 +2025-04-18 15:17:32,764 - INFO - app.services.data_initialization - Processed prices for category 1, group 1690 on 2024-03-05 +2025-04-18 15:17:32,776 - INFO - app.services.data_initialization - Processed prices for category 1, group 41 on 2024-03-05 +2025-04-18 15:17:32,786 - INFO - app.services.data_initialization - Processed prices for category 1, group 61 on 2024-03-05 +2025-04-18 15:17:32,811 - INFO - app.services.data_initialization - Processed prices for category 1, group 23071 on 2024-03-05 +2025-04-18 15:17:32,823 - INFO - app.services.data_initialization - Processed prices for category 1, group 17664 on 2024-03-05 +2025-04-18 15:17:32,833 - INFO - app.services.data_initialization - Processed prices for category 1, group 8 on 2024-03-05 +2025-04-18 15:17:32,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 4 on 2024-03-05 +2025-04-18 15:17:32,887 - INFO - app.services.data_initialization - Processed prices for category 1, group 2809 on 2024-03-05 +2025-04-18 15:17:32,899 - INFO - app.services.data_initialization - Processed prices for category 1, group 2388 on 2024-03-05 +2025-04-18 15:17:32,913 - INFO - app.services.data_initialization - Processed prices for category 1, group 17 on 2024-03-05 +2025-04-18 15:17:32,922 - INFO - app.services.data_initialization - Processed prices for category 1, group 91 on 2024-03-05 +2025-04-18 15:17:32,937 - INFO - app.services.data_initialization - Processed prices for category 1, group 1933 on 2024-03-05 +2025-04-18 15:17:32,960 - INFO - app.services.data_initialization - Processed prices for category 1, group 2422 on 2024-03-05 +2025-04-18 15:17:32,972 - INFO - app.services.data_initialization - Processed prices for category 1, group 23342 on 2024-03-05 +2025-04-18 15:17:32,984 - INFO - app.services.data_initialization - Processed prices for category 1, group 17685 on 2024-03-05 +2025-04-18 15:17:32,997 - INFO - app.services.data_initialization - Processed prices for category 1, group 2868 on 2024-03-05 +2025-04-18 15:17:33,005 - INFO - app.services.data_initialization - Processed prices for category 1, group 23166 on 2024-03-05 +2025-04-18 15:17:33,015 - INFO - app.services.data_initialization - Processed prices for category 1, group 2077 on 2024-03-05 +2025-04-18 15:17:33,024 - INFO - app.services.data_initialization - Processed prices for category 1, group 2902 on 2024-03-05 +2025-04-18 15:17:33,034 - INFO - app.services.data_initialization - Processed prices for category 1, group 33 on 2024-03-05 +2025-04-18 15:17:33,043 - INFO - app.services.data_initialization - Processed prices for category 1, group 9 on 2024-03-05 +2025-04-18 15:17:33,051 - INFO - app.services.data_initialization - Processed prices for category 1, group 1346 on 2024-03-05 +2025-04-18 15:17:33,060 - INFO - app.services.data_initialization - Processed prices for category 1, group 90 on 2024-03-05 +2025-04-18 15:17:33,069 - INFO - app.services.data_initialization - Processed prices for category 1, group 23109 on 2024-03-05 +2025-04-18 15:17:33,142 - INFO - app.services.data_initialization - Processed prices for category 1, group 2045 on 2024-03-05 +2025-04-18 15:17:33,162 - INFO - app.services.data_initialization - Processed prices for category 1, group 2418 on 2024-03-05 +2025-04-18 15:17:33,173 - INFO - app.services.data_initialization - Processed prices for category 1, group 2869 on 2024-03-05 +2025-04-18 15:17:33,212 - INFO - app.services.data_initialization - Processed prices for category 1, group 2307 on 2024-03-05 +2025-04-18 15:17:33,224 - INFO - app.services.data_initialization - Processed prices for category 1, group 62 on 2024-03-05 +2025-04-18 15:17:33,243 - INFO - app.services.data_initialization - Processed prices for category 3, group 2420 on 2024-03-05 +2025-04-18 15:17:33,256 - INFO - app.services.data_initialization - Processed prices for category 3, group 1390 on 2024-03-05 +2025-04-18 15:17:33,270 - INFO - app.services.data_initialization - Processed prices for category 3, group 1444 on 2024-03-05 +2025-04-18 15:17:33,280 - INFO - app.services.data_initialization - Processed prices for category 3, group 3068 on 2024-03-05 +2025-04-18 15:17:33,289 - INFO - app.services.data_initialization - Processed prices for category 3, group 2069 on 2024-03-05 +2025-04-18 15:17:33,306 - INFO - app.services.data_initialization - Processed prices for category 3, group 23237 on 2024-03-05 +2025-04-18 15:17:33,317 - INFO - app.services.data_initialization - Processed prices for category 3, group 1796 on 2024-03-05 +2025-04-18 15:17:33,383 - INFO - app.services.data_initialization - Processed prices for category 3, group 1399 on 2024-03-05 +2025-04-18 15:17:33,392 - INFO - app.services.data_initialization - Processed prices for category 3, group 1522 on 2024-03-05 +2025-04-18 15:17:33,401 - INFO - app.services.data_initialization - Processed prices for category 3, group 1453 on 2024-03-05 +2025-04-18 15:17:33,411 - INFO - app.services.data_initialization - Processed prices for category 3, group 1434 on 2024-03-05 +2025-04-18 15:17:33,421 - INFO - app.services.data_initialization - Processed prices for category 3, group 2594 on 2024-03-05 +2025-04-18 15:17:33,434 - INFO - app.services.data_initialization - Processed prices for category 3, group 1404 on 2024-03-05 +2025-04-18 15:17:33,451 - INFO - app.services.data_initialization - Processed prices for category 3, group 2948 on 2024-03-05 +2025-04-18 15:17:33,463 - INFO - app.services.data_initialization - Processed prices for category 3, group 1392 on 2024-03-05 +2025-04-18 15:17:33,472 - INFO - app.services.data_initialization - Processed prices for category 3, group 1450 on 2024-03-05 +2025-04-18 15:17:33,495 - INFO - app.services.data_initialization - Processed prices for category 3, group 1509 on 2024-03-05 +2025-04-18 15:17:33,505 - INFO - app.services.data_initialization - Processed prices for category 3, group 1418 on 2024-03-05 +2025-04-18 15:17:33,514 - INFO - app.services.data_initialization - Processed prices for category 3, group 23095 on 2024-03-05 +2025-04-18 15:17:33,527 - INFO - app.services.data_initialization - Processed prices for category 3, group 1386 on 2024-03-05 +2025-04-18 15:17:33,539 - INFO - app.services.data_initialization - Processed prices for category 3, group 1433 on 2024-03-05 +2025-04-18 15:17:33,548 - INFO - app.services.data_initialization - Processed prices for category 3, group 1439 on 2024-03-05 +2025-04-18 15:17:33,562 - INFO - app.services.data_initialization - Processed prices for category 3, group 1441 on 2024-03-05 +2025-04-18 15:17:33,575 - INFO - app.services.data_initialization - Processed prices for category 3, group 1370 on 2024-03-05 +2025-04-18 15:17:33,593 - INFO - app.services.data_initialization - Processed prices for category 3, group 1368 on 2024-03-05 +2025-04-18 15:17:33,605 - INFO - app.services.data_initialization - Processed prices for category 3, group 1391 on 2024-03-05 +2025-04-18 15:17:33,621 - INFO - app.services.data_initialization - Processed prices for category 3, group 2545 on 2024-03-05 +2025-04-18 15:17:33,634 - INFO - app.services.data_initialization - Processed prices for category 3, group 1464 on 2024-03-05 +2025-04-18 15:17:33,643 - INFO - app.services.data_initialization - Processed prices for category 3, group 3150 on 2024-03-05 +2025-04-18 15:17:33,652 - INFO - app.services.data_initialization - Processed prices for category 3, group 1455 on 2024-03-05 +2025-04-18 15:17:33,662 - INFO - app.services.data_initialization - Processed prices for category 3, group 1442 on 2024-03-05 +2025-04-18 15:17:33,676 - INFO - app.services.data_initialization - Processed prices for category 3, group 1417 on 2024-03-05 +2025-04-18 15:17:33,693 - INFO - app.services.data_initialization - Processed prices for category 3, group 1957 on 2024-03-05 +2025-04-18 15:17:33,709 - INFO - app.services.data_initialization - Processed prices for category 3, group 23353 on 2024-03-05 +2025-04-18 15:17:33,725 - INFO - app.services.data_initialization - Processed prices for category 3, group 1397 on 2024-03-05 +2025-04-18 15:17:33,734 - INFO - app.services.data_initialization - Processed prices for category 3, group 2208 on 2024-03-05 +2025-04-18 15:17:33,745 - INFO - app.services.data_initialization - Processed prices for category 3, group 2295 on 2024-03-05 +2025-04-18 15:17:33,756 - INFO - app.services.data_initialization - Processed prices for category 3, group 1532 on 2024-03-05 +2025-04-18 15:17:33,772 - INFO - app.services.data_initialization - Processed prices for category 3, group 1387 on 2024-03-05 +2025-04-18 15:17:33,786 - INFO - app.services.data_initialization - Processed prices for category 3, group 1451 on 2024-03-05 +2025-04-18 15:17:33,797 - INFO - app.services.data_initialization - Processed prices for category 3, group 1465 on 2024-03-05 +2025-04-18 15:17:33,805 - INFO - app.services.data_initialization - Processed prices for category 3, group 2205 on 2024-03-05 +2025-04-18 15:17:33,820 - INFO - app.services.data_initialization - Processed prices for category 3, group 17688 on 2024-03-05 +2025-04-18 15:17:33,835 - INFO - app.services.data_initialization - Processed prices for category 3, group 2377 on 2024-03-05 +2025-04-18 15:17:33,852 - INFO - app.services.data_initialization - Processed prices for category 3, group 1840 on 2024-03-05 +2025-04-18 15:17:33,865 - INFO - app.services.data_initialization - Processed prices for category 3, group 1402 on 2024-03-05 +2025-04-18 15:17:33,879 - INFO - app.services.data_initialization - Processed prices for category 3, group 1393 on 2024-03-05 +2025-04-18 15:17:33,891 - INFO - app.services.data_initialization - Processed prices for category 3, group 2781 on 2024-03-05 +2025-04-18 15:17:33,903 - INFO - app.services.data_initialization - Processed prices for category 3, group 604 on 2024-03-05 +2025-04-18 15:17:33,914 - INFO - app.services.data_initialization - Processed prices for category 3, group 2289 on 2024-03-05 +2025-04-18 15:17:33,928 - INFO - app.services.data_initialization - Processed prices for category 3, group 1494 on 2024-03-05 +2025-04-18 15:17:33,928 - INFO - app.services.data_initialization - Processed prices for category 3, group 610 on 2024-03-05 +2025-04-18 15:17:33,937 - INFO - app.services.data_initialization - Processed prices for category 3, group 23381 on 2024-03-05 +2025-04-18 15:17:33,947 - INFO - app.services.data_initialization - Processed prices for category 3, group 1533 on 2024-03-05 +2025-04-18 15:17:33,959 - INFO - app.services.data_initialization - Processed prices for category 3, group 1381 on 2024-03-05 +2025-04-18 15:17:33,972 - INFO - app.services.data_initialization - Processed prices for category 3, group 1701 on 2024-03-05 +2025-04-18 15:17:33,983 - INFO - app.services.data_initialization - Processed prices for category 3, group 2054 on 2024-03-05 +2025-04-18 15:17:33,996 - INFO - app.services.data_initialization - Processed prices for category 3, group 1411 on 2024-03-05 +2025-04-18 15:17:34,011 - INFO - app.services.data_initialization - Processed prices for category 3, group 1396 on 2024-03-05 +2025-04-18 15:17:34,024 - INFO - app.services.data_initialization - Processed prices for category 3, group 1410 on 2024-03-05 +2025-04-18 15:17:34,042 - INFO - app.services.data_initialization - Processed prices for category 3, group 2534 on 2024-03-05 +2025-04-18 15:17:34,062 - INFO - app.services.data_initialization - Processed prices for category 3, group 22880 on 2024-03-05 +2025-04-18 15:17:34,074 - INFO - app.services.data_initialization - Processed prices for category 3, group 1540 on 2024-03-05 +2025-04-18 15:17:34,089 - INFO - app.services.data_initialization - Processed prices for category 3, group 1408 on 2024-03-05 +2025-04-18 15:17:34,099 - INFO - app.services.data_initialization - Processed prices for category 3, group 1538 on 2024-03-05 +2025-04-18 15:17:34,110 - INFO - app.services.data_initialization - Processed prices for category 3, group 2754 on 2024-03-05 +2025-04-18 15:17:34,127 - INFO - app.services.data_initialization - Processed prices for category 3, group 1440 on 2024-03-05 +2025-04-18 15:17:34,143 - INFO - app.services.data_initialization - Processed prices for category 3, group 2675 on 2024-03-05 +2025-04-18 15:17:34,156 - INFO - app.services.data_initialization - Processed prices for category 3, group 1815 on 2024-03-05 +2025-04-18 15:17:34,169 - INFO - app.services.data_initialization - Processed prices for category 3, group 1412 on 2024-03-05 +2025-04-18 15:17:34,180 - INFO - app.services.data_initialization - Processed prices for category 3, group 1389 on 2024-03-05 +2025-04-18 15:17:34,190 - INFO - app.services.data_initialization - Processed prices for category 3, group 1536 on 2024-03-05 +2025-04-18 15:17:34,203 - INFO - app.services.data_initialization - Processed prices for category 3, group 1378 on 2024-03-05 +2025-04-18 15:17:34,216 - INFO - app.services.data_initialization - Processed prices for category 3, group 1395 on 2024-03-05 +2025-04-18 15:17:34,231 - INFO - app.services.data_initialization - Processed prices for category 3, group 1919 on 2024-03-05 +2025-04-18 15:17:34,244 - INFO - app.services.data_initialization - Processed prices for category 3, group 1528 on 2024-03-05 +2025-04-18 15:17:34,263 - INFO - app.services.data_initialization - Processed prices for category 3, group 2464 on 2024-03-05 +2025-04-18 15:17:34,272 - INFO - app.services.data_initialization - Processed prices for category 3, group 17674 on 2024-03-05 +2025-04-18 15:17:34,292 - INFO - app.services.data_initialization - Processed prices for category 3, group 2906 on 2024-03-05 +2025-04-18 15:17:34,304 - INFO - app.services.data_initialization - Processed prices for category 3, group 1383 on 2024-03-05 +2025-04-18 15:17:34,318 - INFO - app.services.data_initialization - Processed prices for category 3, group 605 on 2024-03-05 +2025-04-18 15:17:34,328 - INFO - app.services.data_initialization - Processed prices for category 3, group 635 on 2024-03-05 +2025-04-18 15:17:34,346 - INFO - app.services.data_initialization - Processed prices for category 3, group 2278 on 2024-03-05 +2025-04-18 15:17:34,356 - INFO - app.services.data_initialization - Processed prices for category 3, group 2782 on 2024-03-05 +2025-04-18 15:17:34,356 - INFO - app.services.data_initialization - Processed prices for category 3, group 609 on 2024-03-05 +2025-04-18 15:17:34,364 - INFO - app.services.data_initialization - Processed prices for category 3, group 2148 on 2024-03-05 +2025-04-18 15:17:34,375 - INFO - app.services.data_initialization - Processed prices for category 3, group 1421 on 2024-03-05 +2025-04-18 15:17:34,388 - INFO - app.services.data_initialization - Processed prices for category 3, group 2209 on 2024-03-05 +2025-04-18 15:17:34,400 - INFO - app.services.data_initialization - Processed prices for category 3, group 22872 on 2024-03-05 +2025-04-18 15:17:34,409 - INFO - app.services.data_initialization - Processed prices for category 3, group 2931 on 2024-03-05 +2025-04-18 15:17:34,417 - INFO - app.services.data_initialization - Processed prices for category 3, group 1427 on 2024-03-05 +2025-04-18 15:17:34,432 - INFO - app.services.data_initialization - Processed prices for category 3, group 1661 on 2024-03-05 +2025-04-18 15:17:34,447 - INFO - app.services.data_initialization - Processed prices for category 3, group 1780 on 2024-03-05 +2025-04-18 15:17:34,459 - INFO - app.services.data_initialization - Processed prices for category 3, group 1379 on 2024-03-05 +2025-04-18 15:17:34,471 - INFO - app.services.data_initialization - Processed prices for category 3, group 1728 on 2024-03-05 +2025-04-18 15:17:34,489 - INFO - app.services.data_initialization - Processed prices for category 3, group 2328 on 2024-03-05 +2025-04-18 15:17:34,501 - INFO - app.services.data_initialization - Processed prices for category 3, group 23266 on 2024-03-05 +2025-04-18 15:17:34,513 - INFO - app.services.data_initialization - Processed prices for category 3, group 1405 on 2024-03-05 +2025-04-18 15:17:34,526 - INFO - app.services.data_initialization - Processed prices for category 3, group 1385 on 2024-03-05 +2025-04-18 15:17:34,548 - INFO - app.services.data_initialization - Processed prices for category 3, group 23120 on 2024-03-05 +2025-04-18 15:17:34,558 - INFO - app.services.data_initialization - Processed prices for category 3, group 648 on 2024-03-05 +2025-04-18 15:17:34,571 - INFO - app.services.data_initialization - Processed prices for category 3, group 2685 on 2024-03-05 +2025-04-18 15:17:34,587 - INFO - app.services.data_initialization - Processed prices for category 3, group 2626 on 2024-03-05 +2025-04-18 15:17:34,596 - INFO - app.services.data_initialization - Processed prices for category 3, group 1432 on 2024-03-05 +2025-04-18 15:17:34,608 - INFO - app.services.data_initialization - Processed prices for category 3, group 1424 on 2024-03-05 +2025-04-18 15:17:34,619 - INFO - app.services.data_initialization - Processed prices for category 3, group 3051 on 2024-03-05 +2025-04-18 15:17:34,631 - INFO - app.services.data_initialization - Processed prices for category 3, group 2686 on 2024-03-05 +2025-04-18 15:17:34,643 - INFO - app.services.data_initialization - Processed prices for category 3, group 1525 on 2024-03-05 +2025-04-18 15:17:34,651 - INFO - app.services.data_initialization - Processed prices for category 3, group 23306 on 2024-03-05 +2025-04-18 15:17:34,668 - INFO - app.services.data_initialization - Processed prices for category 3, group 23286 on 2024-03-05 +2025-04-18 15:17:34,682 - INFO - app.services.data_initialization - Processed prices for category 3, group 1380 on 2024-03-05 +2025-04-18 15:17:34,692 - INFO - app.services.data_initialization - Processed prices for category 3, group 1729 on 2024-03-05 +2025-04-18 15:17:34,741 - INFO - app.services.data_initialization - Processed prices for category 3, group 1429 on 2024-03-05 +2025-04-18 15:17:34,751 - INFO - app.services.data_initialization - Processed prices for category 3, group 1543 on 2024-03-05 +2025-04-18 15:17:34,764 - INFO - app.services.data_initialization - Processed prices for category 3, group 1374 on 2024-03-05 +2025-04-18 15:17:34,777 - INFO - app.services.data_initialization - Processed prices for category 3, group 1481 on 2024-03-05 +2025-04-18 15:17:34,916 - INFO - app.services.data_initialization - Processed prices for category 3, group 1400 on 2024-03-05 +2025-04-18 15:17:34,995 - INFO - app.services.data_initialization - Processed prices for category 3, group 1416 on 2024-03-05 +2025-04-18 15:17:35,005 - INFO - app.services.data_initialization - Processed prices for category 3, group 1414 on 2024-03-05 +2025-04-18 15:17:35,186 - INFO - app.services.data_initialization - Processed prices for category 3, group 1419 on 2024-03-05 +2025-04-18 15:17:35,228 - INFO - app.services.data_initialization - Processed prices for category 3, group 1415 on 2024-03-05 +2025-04-18 15:17:35,286 - INFO - app.services.data_initialization - Processed prices for category 3, group 2848 on 2024-03-05 +2025-04-18 15:17:35,296 - INFO - app.services.data_initialization - Processed prices for category 3, group 2364 on 2024-03-05 +2025-04-18 15:17:35,315 - INFO - app.services.data_initialization - Processed prices for category 3, group 2585 on 2024-03-05 +2025-04-18 15:17:35,363 - INFO - app.services.data_initialization - Processed prices for category 3, group 1372 on 2024-03-05 +2025-04-18 15:17:35,379 - INFO - app.services.data_initialization - Processed prices for category 3, group 1369 on 2024-03-05 +2025-04-18 15:17:35,398 - INFO - app.services.data_initialization - Processed prices for category 3, group 1842 on 2024-03-05 +2025-04-18 15:17:35,491 - INFO - app.services.data_initialization - Processed prices for category 3, group 1534 on 2024-03-05 +2025-04-18 15:17:35,501 - INFO - app.services.data_initialization - Processed prices for category 3, group 2867 on 2024-03-05 +2025-04-18 15:17:35,594 - INFO - app.services.data_initialization - Processed prices for category 3, group 1375 on 2024-03-05 +2025-04-18 15:17:35,635 - INFO - app.services.data_initialization - Processed prices for category 3, group 1377 on 2024-03-05 +2025-04-18 15:17:35,648 - INFO - app.services.data_initialization - Processed prices for category 3, group 1398 on 2024-03-05 +2025-04-18 15:17:35,661 - INFO - app.services.data_initialization - Processed prices for category 3, group 1382 on 2024-03-05 +2025-04-18 15:17:35,675 - INFO - app.services.data_initialization - Processed prices for category 3, group 1376 on 2024-03-05 +2025-04-18 15:17:35,695 - INFO - app.services.data_initialization - Processed prices for category 3, group 1428 on 2024-03-05 +2025-04-18 15:17:35,705 - INFO - app.services.data_initialization - Processed prices for category 3, group 3179 on 2024-03-05 +2025-04-18 15:17:35,740 - INFO - app.services.data_initialization - Processed prices for category 3, group 1863 on 2024-03-05 +2025-04-18 15:17:35,756 - INFO - app.services.data_initialization - Processed prices for category 3, group 1426 on 2024-03-05 +2025-04-18 15:17:35,804 - INFO - app.services.data_initialization - Processed prices for category 3, group 2282 on 2024-03-05 +2025-04-18 15:17:35,814 - INFO - app.services.data_initialization - Processed prices for category 3, group 23330 on 2024-03-05 +2025-04-18 15:17:35,826 - INFO - app.services.data_initialization - Processed prices for category 3, group 1576 on 2024-03-05 +2025-04-18 15:17:35,834 - INFO - app.services.data_initialization - Processed prices for category 3, group 2175 on 2024-03-05 +2025-04-18 15:17:35,843 - INFO - app.services.data_initialization - Processed prices for category 3, group 1853 on 2024-03-05 +2025-04-18 15:17:35,851 - INFO - app.services.data_initialization - Processed prices for category 3, group 1542 on 2024-03-05 +2025-04-18 15:17:35,862 - INFO - app.services.data_initialization - Processed prices for category 3, group 1403 on 2024-03-05 +2025-04-18 15:17:35,876 - INFO - app.services.data_initialization - Processed prices for category 3, group 1394 on 2024-03-05 +2025-04-18 15:17:35,894 - INFO - app.services.data_initialization - Processed prices for category 3, group 2701 on 2024-03-05 +2025-04-18 15:17:35,911 - INFO - app.services.data_initialization - Processed prices for category 3, group 1409 on 2024-03-05 +2025-04-18 15:17:35,925 - INFO - app.services.data_initialization - Processed prices for category 3, group 1446 on 2024-03-05 +2025-04-18 15:17:35,934 - INFO - app.services.data_initialization - Processed prices for category 3, group 1422 on 2024-03-05 +2025-04-18 15:17:35,946 - INFO - app.services.data_initialization - Processed prices for category 3, group 1373 on 2024-03-05 +2025-04-18 15:17:35,962 - INFO - app.services.data_initialization - Processed prices for category 3, group 2178 on 2024-03-05 +2025-04-18 15:17:35,977 - INFO - app.services.data_initialization - Processed prices for category 3, group 3040 on 2024-03-05 +2025-04-18 15:17:35,990 - INFO - app.services.data_initialization - Processed prices for category 3, group 2071 on 2024-03-05 +2025-04-18 15:17:35,999 - INFO - app.services.data_initialization - Processed prices for category 3, group 2776 on 2024-03-05 +2025-04-18 15:17:36,013 - INFO - app.services.data_initialization - Processed prices for category 3, group 1413 on 2024-03-05 +2025-04-18 15:17:36,031 - INFO - app.services.data_initialization - Processed prices for category 3, group 22873 on 2024-03-05 +2025-04-18 15:17:36,043 - INFO - app.services.data_initialization - Processed prices for category 3, group 23323 on 2024-03-05 +2025-04-18 15:17:36,052 - INFO - app.services.data_initialization - Processed prices for category 3, group 3172 on 2024-03-05 +2025-04-18 15:17:36,054 - INFO - app.services.data_initialization - Processed prices for category 3, group 2214 on 2024-03-05 +2025-04-18 15:17:36,067 - INFO - app.services.data_initialization - Processed prices for category 3, group 1663 on 2024-03-05 +2025-04-18 15:17:36,081 - INFO - app.services.data_initialization - Processed prices for category 3, group 1367 on 2024-03-05 +2025-04-18 15:17:36,095 - INFO - app.services.data_initialization - Processed prices for category 3, group 1384 on 2024-03-05 +2025-04-18 15:17:36,105 - INFO - app.services.data_initialization - Processed prices for category 3, group 2155 on 2024-03-05 +2025-04-18 15:17:36,117 - INFO - app.services.data_initialization - Processed prices for category 3, group 1423 on 2024-03-05 +2025-04-18 15:17:36,137 - INFO - app.services.data_initialization - Processed prices for category 3, group 1539 on 2024-03-05 +2025-04-18 15:17:36,148 - INFO - app.services.data_initialization - Processed prices for category 3, group 2480 on 2024-03-05 +2025-04-18 15:17:36,165 - INFO - app.services.data_initialization - Processed prices for category 3, group 3118 on 2024-03-05 +2025-04-18 15:17:36,173 - INFO - app.services.data_initialization - Processed prices for category 3, group 3020 on 2024-03-05 +2025-04-18 15:17:36,188 - INFO - app.services.data_initialization - Processed prices for category 3, group 1406 on 2024-03-05 +2025-04-18 15:17:36,200 - INFO - app.services.data_initialization - Processed prices for category 3, group 1938 on 2024-03-05 +2025-04-18 15:17:36,209 - INFO - app.services.data_initialization - Processed prices for category 3, group 2555 on 2024-03-05 +2025-04-18 15:17:36,220 - INFO - app.services.data_initialization - Processed prices for category 3, group 1407 on 2024-03-05 +2025-04-18 15:17:36,231 - INFO - app.services.data_initialization - Processed prices for category 3, group 1541 on 2024-03-05 +2025-04-18 15:17:36,248 - INFO - app.services.data_initialization - Processed prices for category 3, group 2765 on 2024-03-05 +2025-04-18 15:17:36,258 - INFO - app.services.data_initialization - Processed prices for category 3, group 2332 on 2024-03-05 +2025-04-18 15:17:36,275 - INFO - app.services.data_initialization - Processed prices for category 3, group 1861 on 2024-03-05 +2025-04-18 15:17:36,282 - INFO - app.services.data_initialization - Processed prices for category 3, group 1694 on 2024-03-05 +2025-04-18 15:17:36,290 - INFO - app.services.data_initialization - Processed prices for category 3, group 1401 on 2024-03-05 +2025-04-18 15:17:36,309 - INFO - app.services.data_initialization - Processed prices for category 3, group 2807 on 2024-03-05 +2025-04-18 15:17:36,311 - INFO - app.services.data_initialization - Processed prices for category 3, group 3087 on 2024-03-05 +2025-04-18 15:17:36,322 - INFO - app.services.data_initialization - Processed prices for category 3, group 3064 on 2024-03-05 +2025-04-18 15:17:36,334 - INFO - app.services.data_initialization - Processed prices for category 3, group 630 on 2024-03-05 +2025-04-18 15:17:36,343 - INFO - app.services.data_initialization - Processed prices for category 3, group 2409 on 2024-03-05 +2025-04-18 15:17:36,359 - INFO - app.services.data_initialization - Processed prices for category 3, group 3170 on 2024-03-05 +2025-04-18 15:17:36,372 - INFO - app.services.data_initialization - Processed prices for category 3, group 1430 on 2024-03-05 +2025-04-18 15:17:36,390 - INFO - app.services.data_initialization - Processed prices for category 3, group 23228 on 2024-03-05 +2025-04-18 15:17:36,414 - INFO - app.services.data_initialization - Processed prices for category 3, group 2374 on 2024-03-05 +2025-04-18 15:17:36,422 - INFO - app.services.data_initialization - Processed prices for category 3, group 1447 on 2024-03-05 +2025-04-18 15:17:36,431 - INFO - app.services.data_initialization - Processed prices for category 3, group 1452 on 2024-03-05 +2025-04-18 15:17:36,441 - INFO - app.services.data_initialization - Processed prices for category 3, group 1692 on 2024-03-05 +2025-04-18 15:17:36,451 - INFO - app.services.data_initialization - Processed prices for category 3, group 17689 on 2024-03-05 +2025-04-18 15:17:36,451 - INFO - app.services.data_initialization - Downloading and processing archived prices for 2024-03-06 +2025-04-18 15:17:36,467 - INFO - app.services.external_api.base_external_service - Making request to https://tcgcsv.com/archive/tcgplayer/prices-2024-03-06.ppmd.7z +2025-04-18 15:17:40,730 - INFO - app.services.data_initialization - Processed prices for category 1, group 23319 on 2024-03-06 +2025-04-18 15:17:40,730 - INFO - app.services.data_initialization - Processed prices for category 1, group 1687 on 2024-03-06 +2025-04-18 15:17:40,739 - INFO - app.services.data_initialization - Processed prices for category 1, group 2326 on 2024-03-06 +2025-04-18 15:17:40,754 - INFO - app.services.data_initialization - Processed prices for category 1, group 117 on 2024-03-06 +2025-04-18 15:17:40,768 - INFO - app.services.data_initialization - Processed prices for category 1, group 1277 on 2024-03-06 +2025-04-18 15:17:40,784 - INFO - app.services.data_initialization - Processed prices for category 1, group 1476 on 2024-03-06 +2025-04-18 15:17:40,802 - INFO - app.services.data_initialization - Processed prices for category 1, group 82 on 2024-03-06 +2025-04-18 15:17:40,828 - INFO - app.services.data_initialization - Processed prices for category 1, group 80 on 2024-03-06 +2025-04-18 15:17:40,841 - INFO - app.services.data_initialization - Processed prices for category 1, group 2771 on 2024-03-06 +2025-04-18 15:17:40,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 1163 on 2024-03-06 +2025-04-18 15:17:40,866 - INFO - app.services.data_initialization - Processed prices for category 1, group 16 on 2024-03-06 +2025-04-18 15:17:40,878 - INFO - app.services.data_initialization - Processed prices for category 1, group 57 on 2024-03-06 +2025-04-18 15:17:40,888 - INFO - app.services.data_initialization - Processed prices for category 1, group 30 on 2024-03-06 +2025-04-18 15:17:40,907 - INFO - app.services.data_initialization - Processed prices for category 1, group 2245 on 2024-03-06 +2025-04-18 15:17:40,926 - INFO - app.services.data_initialization - Processed prices for category 1, group 23316 on 2024-03-06 +2025-04-18 15:17:40,943 - INFO - app.services.data_initialization - Processed prices for category 1, group 1490 on 2024-03-06 +2025-04-18 15:17:40,963 - INFO - app.services.data_initialization - Processed prices for category 1, group 1144 on 2024-03-06 +2025-04-18 15:17:40,993 - INFO - app.services.data_initialization - Processed prices for category 1, group 3070 on 2024-03-06 +2025-04-18 15:17:41,021 - INFO - app.services.data_initialization - Processed prices for category 1, group 2655 on 2024-03-06 +2025-04-18 15:17:41,030 - INFO - app.services.data_initialization - Processed prices for category 1, group 31 on 2024-03-06 +2025-04-18 15:17:41,042 - INFO - app.services.data_initialization - Processed prices for category 1, group 3158 on 2024-03-06 +2025-04-18 15:17:41,060 - INFO - app.services.data_initialization - Processed prices for category 1, group 39 on 2024-03-06 +2025-04-18 15:17:41,080 - INFO - app.services.data_initialization - Processed prices for category 1, group 2966 on 2024-03-06 +2025-04-18 15:17:41,113 - INFO - app.services.data_initialization - Processed prices for category 1, group 67 on 2024-03-06 +2025-04-18 15:17:41,196 - INFO - app.services.data_initialization - Processed prices for category 1, group 2568 on 2024-03-06 +2025-04-18 15:17:41,223 - INFO - app.services.data_initialization - Processed prices for category 1, group 22875 on 2024-03-06 +2025-04-18 15:17:41,233 - INFO - app.services.data_initialization - Processed prices for category 1, group 2067 on 2024-03-06 +2025-04-18 15:17:41,245 - INFO - app.services.data_initialization - Processed prices for category 1, group 1904 on 2024-03-06 +2025-04-18 15:17:41,247 - INFO - app.services.data_initialization - Processed prices for category 1, group 2546 on 2024-03-06 +2025-04-18 15:17:41,257 - INFO - app.services.data_initialization - Processed prices for category 1, group 17667 on 2024-03-06 +2025-04-18 15:17:41,278 - INFO - app.services.data_initialization - Processed prices for category 1, group 20 on 2024-03-06 +2025-04-18 15:17:41,287 - INFO - app.services.data_initialization - Processed prices for category 1, group 2552 on 2024-03-06 +2025-04-18 15:17:41,296 - INFO - app.services.data_initialization - Processed prices for category 1, group 2463 on 2024-03-06 +2025-04-18 15:17:41,312 - INFO - app.services.data_initialization - Processed prices for category 1, group 1276 on 2024-03-06 +2025-04-18 15:17:41,325 - INFO - app.services.data_initialization - Processed prices for category 1, group 72 on 2024-03-06 +2025-04-18 15:17:41,336 - INFO - app.services.data_initialization - Processed prices for category 1, group 37 on 2024-03-06 +2025-04-18 15:17:41,345 - INFO - app.services.data_initialization - Processed prices for category 1, group 2361 on 2024-03-06 +2025-04-18 15:17:41,406 - INFO - app.services.data_initialization - Processed prices for category 1, group 70 on 2024-03-06 +2025-04-18 15:17:41,416 - INFO - app.services.data_initialization - Processed prices for category 1, group 2084 on 2024-03-06 +2025-04-18 15:17:41,443 - INFO - app.services.data_initialization - Processed prices for category 1, group 3185 on 2024-03-06 +2025-04-18 15:17:41,475 - INFO - app.services.data_initialization - Processed prices for category 1, group 1673 on 2024-03-06 +2025-04-18 15:17:41,506 - INFO - app.services.data_initialization - Processed prices for category 1, group 17670 on 2024-03-06 +2025-04-18 15:17:41,522 - INFO - app.services.data_initialization - Processed prices for category 1, group 2481 on 2024-03-06 +2025-04-18 15:17:41,535 - INFO - app.services.data_initialization - Processed prices for category 1, group 3169 on 2024-03-06 +2025-04-18 15:17:41,546 - INFO - app.services.data_initialization - Processed prices for category 1, group 2598 on 2024-03-06 +2025-04-18 15:17:41,573 - INFO - app.services.data_initialization - Processed prices for category 1, group 2773 on 2024-03-06 +2025-04-18 15:17:41,603 - INFO - app.services.data_initialization - Processed prices for category 1, group 2770 on 2024-03-06 +2025-04-18 15:17:41,612 - INFO - app.services.data_initialization - Processed prices for category 1, group 22970 on 2024-03-06 +2025-04-18 15:17:41,662 - INFO - app.services.data_initialization - Processed prices for category 1, group 44 on 2024-03-06 +2025-04-18 15:17:41,674 - INFO - app.services.data_initialization - Processed prices for category 1, group 3160 on 2024-03-06 +2025-04-18 15:17:41,704 - INFO - app.services.data_initialization - Processed prices for category 1, group 45 on 2024-03-06 +2025-04-18 15:17:41,719 - INFO - app.services.data_initialization - Processed prices for category 1, group 17665 on 2024-03-06 +2025-04-18 15:17:41,738 - INFO - app.services.data_initialization - Processed prices for category 1, group 103 on 2024-03-06 +2025-04-18 15:17:41,752 - INFO - app.services.data_initialization - Processed prices for category 1, group 125 on 2024-03-06 +2025-04-18 15:17:41,765 - INFO - app.services.data_initialization - Processed prices for category 1, group 2562 on 2024-03-06 +2025-04-18 15:17:41,774 - INFO - app.services.data_initialization - Processed prices for category 1, group 54 on 2024-03-06 +2025-04-18 15:17:41,789 - INFO - app.services.data_initialization - Processed prices for category 1, group 2634 on 2024-03-06 +2025-04-18 15:17:41,808 - INFO - app.services.data_initialization - Processed prices for category 1, group 69 on 2024-03-06 +2025-04-18 15:17:41,817 - INFO - app.services.data_initialization - Processed prices for category 1, group 2633 on 2024-03-06 +2025-04-18 15:17:41,830 - INFO - app.services.data_initialization - Processed prices for category 1, group 88 on 2024-03-06 +2025-04-18 15:17:41,842 - INFO - app.services.data_initialization - Processed prices for category 1, group 3175 on 2024-03-06 +2025-04-18 15:17:41,853 - INFO - app.services.data_initialization - Processed prices for category 1, group 36 on 2024-03-06 +2025-04-18 15:17:41,867 - INFO - app.services.data_initialization - Processed prices for category 1, group 2891 on 2024-03-06 +2025-04-18 15:17:41,937 - INFO - app.services.data_initialization - Processed prices for category 1, group 1512 on 2024-03-06 +2025-04-18 15:17:41,954 - INFO - app.services.data_initialization - Processed prices for category 1, group 11 on 2024-03-06 +2025-04-18 15:17:41,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 40 on 2024-03-06 +2025-04-18 15:17:41,976 - INFO - app.services.data_initialization - Processed prices for category 1, group 2220 on 2024-03-06 +2025-04-18 15:17:41,984 - INFO - app.services.data_initialization - Processed prices for category 1, group 2386 on 2024-03-06 +2025-04-18 15:17:42,013 - INFO - app.services.data_initialization - Processed prices for category 1, group 2864 on 2024-03-06 +2025-04-18 15:17:42,028 - INFO - app.services.data_initialization - Processed prices for category 1, group 24 on 2024-03-06 +2025-04-18 15:17:42,039 - INFO - app.services.data_initialization - Processed prices for category 1, group 1348 on 2024-03-06 +2025-04-18 15:17:42,059 - INFO - app.services.data_initialization - Processed prices for category 1, group 2043 on 2024-03-06 +2025-04-18 15:17:42,075 - INFO - app.services.data_initialization - Processed prices for category 1, group 108 on 2024-03-06 +2025-04-18 15:17:42,096 - INFO - app.services.data_initialization - Processed prices for category 1, group 124 on 2024-03-06 +2025-04-18 15:17:42,148 - INFO - app.services.data_initialization - Processed prices for category 1, group 23164 on 2024-03-06 +2025-04-18 15:17:42,180 - INFO - app.services.data_initialization - Processed prices for category 1, group 2942 on 2024-03-06 +2025-04-18 15:17:42,223 - INFO - app.services.data_initialization - Processed prices for category 1, group 23019 on 2024-03-06 +2025-04-18 15:17:42,235 - INFO - app.services.data_initialization - Processed prices for category 1, group 2334 on 2024-03-06 +2025-04-18 15:17:42,250 - INFO - app.services.data_initialization - Processed prices for category 1, group 122 on 2024-03-06 +2025-04-18 15:17:42,260 - INFO - app.services.data_initialization - Processed prices for category 1, group 365 on 2024-03-06 +2025-04-18 15:17:42,269 - INFO - app.services.data_initialization - Processed prices for category 1, group 2247 on 2024-03-06 +2025-04-18 15:17:42,278 - INFO - app.services.data_initialization - Processed prices for category 1, group 2447 on 2024-03-06 +2025-04-18 15:17:42,290 - INFO - app.services.data_initialization - Processed prices for category 1, group 121 on 2024-03-06 +2025-04-18 15:17:42,301 - INFO - app.services.data_initialization - Processed prices for category 1, group 22922 on 2024-03-06 +2025-04-18 15:17:42,361 - INFO - app.services.data_initialization - Processed prices for category 1, group 23 on 2024-03-06 +2025-04-18 15:17:42,377 - INFO - app.services.data_initialization - Processed prices for category 1, group 25 on 2024-03-06 +2025-04-18 15:17:42,400 - INFO - app.services.data_initialization - Processed prices for category 1, group 1293 on 2024-03-06 +2025-04-18 15:17:42,419 - INFO - app.services.data_initialization - Processed prices for category 1, group 362 on 2024-03-06 +2025-04-18 15:17:42,433 - INFO - app.services.data_initialization - Processed prices for category 1, group 83 on 2024-03-06 +2025-04-18 15:17:42,446 - INFO - app.services.data_initialization - Processed prices for category 1, group 107 on 2024-03-06 +2025-04-18 15:17:42,473 - INFO - app.services.data_initialization - Processed prices for category 1, group 23337 on 2024-03-06 +2025-04-18 15:17:42,497 - INFO - app.services.data_initialization - Processed prices for category 1, group 1 on 2024-03-06 +2025-04-18 15:17:42,512 - INFO - app.services.data_initialization - Processed prices for category 1, group 7 on 2024-03-06 +2025-04-18 15:17:42,530 - INFO - app.services.data_initialization - Processed prices for category 1, group 569 on 2024-03-06 +2025-04-18 15:17:42,543 - INFO - app.services.data_initialization - Processed prices for category 1, group 2156 on 2024-03-06 +2025-04-18 15:17:42,585 - INFO - app.services.data_initialization - Processed prices for category 1, group 110 on 2024-03-06 +2025-04-18 15:17:42,605 - INFO - app.services.data_initialization - Processed prices for category 1, group 1791 on 2024-03-06 +2025-04-18 15:17:42,634 - INFO - app.services.data_initialization - Processed prices for category 1, group 2958 on 2024-03-06 +2025-04-18 15:17:42,642 - INFO - app.services.data_initialization - Processed prices for category 1, group 1520 on 2024-03-06 +2025-04-18 15:17:42,664 - INFO - app.services.data_initialization - Processed prices for category 1, group 95 on 2024-03-06 +2025-04-18 15:17:42,672 - INFO - app.services.data_initialization - Processed prices for category 1, group 23440 on 2024-03-06 +2025-04-18 15:17:42,682 - INFO - app.services.data_initialization - Processed prices for category 1, group 2076 on 2024-03-06 +2025-04-18 15:17:42,699 - INFO - app.services.data_initialization - Processed prices for category 1, group 2098 on 2024-03-06 +2025-04-18 15:17:42,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 1726 on 2024-03-06 +2025-04-18 15:17:42,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 23167 on 2024-03-06 +2025-04-18 15:17:42,718 - INFO - app.services.data_initialization - Processed prices for category 1, group 2713 on 2024-03-06 +2025-04-18 15:17:42,736 - INFO - app.services.data_initialization - Processed prices for category 1, group 1934 on 2024-03-06 +2025-04-18 15:17:42,838 - INFO - app.services.data_initialization - Processed prices for category 1, group 2715 on 2024-03-06 +2025-04-18 15:17:42,849 - INFO - app.services.data_initialization - Processed prices for category 1, group 1524 on 2024-03-06 +2025-04-18 15:17:42,865 - INFO - app.services.data_initialization - Processed prices for category 1, group 1792 on 2024-03-06 +2025-04-18 15:17:42,877 - INFO - app.services.data_initialization - Processed prices for category 1, group 23420 on 2024-03-06 +2025-04-18 15:17:42,895 - INFO - app.services.data_initialization - Processed prices for category 1, group 2360 on 2024-03-06 +2025-04-18 15:17:42,903 - INFO - app.services.data_initialization - Processed prices for category 1, group 23445 on 2024-03-06 +2025-04-18 15:17:42,914 - INFO - app.services.data_initialization - Processed prices for category 1, group 3129 on 2024-03-06 +2025-04-18 15:17:42,939 - INFO - app.services.data_initialization - Processed prices for category 1, group 2648 on 2024-03-06 +2025-04-18 15:17:42,948 - INFO - app.services.data_initialization - Processed prices for category 1, group 2087 on 2024-03-06 +2025-04-18 15:17:42,963 - INFO - app.services.data_initialization - Processed prices for category 1, group 22876 on 2024-03-06 +2025-04-18 15:17:43,020 - INFO - app.services.data_initialization - Processed prices for category 1, group 1503 on 2024-03-06 +2025-04-18 15:17:43,036 - INFO - app.services.data_initialization - Processed prices for category 1, group 17662 on 2024-03-06 +2025-04-18 15:17:43,049 - INFO - app.services.data_initialization - Processed prices for category 1, group 113 on 2024-03-06 +2025-04-18 15:17:43,049 - INFO - app.services.data_initialization - Processed prices for category 1, group 29 on 2024-03-06 +2025-04-18 15:17:43,064 - INFO - app.services.data_initialization - Processed prices for category 1, group 2643 on 2024-03-06 +2025-04-18 15:17:43,086 - INFO - app.services.data_initialization - Processed prices for category 1, group 81 on 2024-03-06 +2025-04-18 15:17:43,095 - INFO - app.services.data_initialization - Processed prices for category 1, group 1930 on 2024-03-06 +2025-04-18 15:17:43,095 - INFO - app.services.data_initialization - Processed prices for category 1, group 2988 on 2024-03-06 +2025-04-18 15:17:43,096 - INFO - app.services.data_initialization - Processed prices for category 1, group 2989 on 2024-03-06 +2025-04-18 15:17:43,122 - INFO - app.services.data_initialization - Processed prices for category 1, group 3157 on 2024-03-06 +2025-04-18 15:17:43,134 - INFO - app.services.data_initialization - Processed prices for category 1, group 87 on 2024-03-06 +2025-04-18 15:17:43,212 - INFO - app.services.data_initialization - Processed prices for category 1, group 92 on 2024-03-06 +2025-04-18 15:17:43,227 - INFO - app.services.data_initialization - Processed prices for category 1, group 2665 on 2024-03-06 +2025-04-18 15:17:43,241 - INFO - app.services.data_initialization - Processed prices for category 1, group 23345 on 2024-03-06 +2025-04-18 15:17:43,250 - INFO - app.services.data_initialization - Processed prices for category 1, group 93 on 2024-03-06 +2025-04-18 15:17:43,265 - INFO - app.services.data_initialization - Processed prices for category 1, group 63 on 2024-03-06 +2025-04-18 15:17:43,274 - INFO - app.services.data_initialization - Processed prices for category 1, group 23444 on 2024-03-06 +2025-04-18 15:17:43,315 - INFO - app.services.data_initialization - Processed prices for category 1, group 3047 on 2024-03-06 +2025-04-18 15:17:43,334 - INFO - app.services.data_initialization - Processed prices for category 1, group 2791 on 2024-03-06 +2025-04-18 15:17:43,350 - INFO - app.services.data_initialization - Processed prices for category 1, group 76 on 2024-03-06 +2025-04-18 15:17:43,369 - INFO - app.services.data_initialization - Processed prices for category 1, group 2092 on 2024-03-06 +2025-04-18 15:17:43,381 - INFO - app.services.data_initialization - Processed prices for category 1, group 3032 on 2024-03-06 +2025-04-18 15:17:43,392 - INFO - app.services.data_initialization - Processed prices for category 1, group 52 on 2024-03-06 +2025-04-18 15:17:43,401 - INFO - app.services.data_initialization - Processed prices for category 1, group 2207 on 2024-03-06 +2025-04-18 15:17:43,423 - INFO - app.services.data_initialization - Processed prices for category 1, group 60 on 2024-03-06 +2025-04-18 15:17:43,444 - INFO - app.services.data_initialization - Processed prices for category 1, group 2441 on 2024-03-06 +2025-04-18 15:17:43,453 - INFO - app.services.data_initialization - Processed prices for category 1, group 89 on 2024-03-06 +2025-04-18 15:17:43,461 - INFO - app.services.data_initialization - Processed prices for category 1, group 1577 on 2024-03-06 +2025-04-18 15:17:43,489 - INFO - app.services.data_initialization - Processed prices for category 1, group 17684 on 2024-03-06 +2025-04-18 15:17:43,500 - INFO - app.services.data_initialization - Processed prices for category 1, group 1905 on 2024-03-06 +2025-04-18 15:17:43,513 - INFO - app.services.data_initialization - Processed prices for category 1, group 26 on 2024-03-06 +2025-04-18 15:17:43,532 - INFO - app.services.data_initialization - Processed prices for category 1, group 1790 on 2024-03-06 +2025-04-18 15:17:43,533 - INFO - app.services.data_initialization - Processed prices for category 1, group 1688 on 2024-03-06 +2025-04-18 15:17:43,540 - INFO - app.services.data_initialization - Processed prices for category 1, group 21 on 2024-03-06 +2025-04-18 15:17:43,552 - INFO - app.services.data_initialization - Processed prices for category 1, group 23273 on 2024-03-06 +2025-04-18 15:17:43,562 - INFO - app.services.data_initialization - Processed prices for category 1, group 1641 on 2024-03-06 +2025-04-18 15:17:43,571 - INFO - app.services.data_initialization - Processed prices for category 1, group 23421 on 2024-03-06 +2025-04-18 15:17:43,586 - INFO - app.services.data_initialization - Processed prices for category 1, group 28 on 2024-03-06 +2025-04-18 15:17:43,598 - INFO - app.services.data_initialization - Processed prices for category 1, group 23270 on 2024-03-06 +2025-04-18 15:17:43,607 - INFO - app.services.data_initialization - Processed prices for category 1, group 369 on 2024-03-06 +2025-04-18 15:17:43,628 - INFO - app.services.data_initialization - Processed prices for category 1, group 2366 on 2024-03-06 +2025-04-18 15:17:43,642 - INFO - app.services.data_initialization - Processed prices for category 1, group 55 on 2024-03-06 +2025-04-18 15:17:43,656 - INFO - app.services.data_initialization - Processed prices for category 1, group 2570 on 2024-03-06 +2025-04-18 15:17:43,675 - INFO - app.services.data_initialization - Processed prices for category 1, group 1645 on 2024-03-06 +2025-04-18 15:17:43,687 - INFO - app.services.data_initialization - Processed prices for category 1, group 23224 on 2024-03-06 +2025-04-18 15:17:43,696 - INFO - app.services.data_initialization - Processed prices for category 1, group 32 on 2024-03-06 +2025-04-18 15:17:43,720 - INFO - app.services.data_initialization - Processed prices for category 1, group 73 on 2024-03-06 +2025-04-18 15:17:43,733 - INFO - app.services.data_initialization - Processed prices for category 1, group 3033 on 2024-03-06 +2025-04-18 15:17:43,764 - INFO - app.services.data_initialization - Processed prices for category 1, group 2965 on 2024-03-06 +2025-04-18 15:17:43,775 - INFO - app.services.data_initialization - Processed prices for category 1, group 1874 on 2024-03-06 +2025-04-18 15:17:43,797 - INFO - app.services.data_initialization - Processed prices for category 1, group 3 on 2024-03-06 +2025-04-18 15:17:43,807 - INFO - app.services.data_initialization - Processed prices for category 1, group 53 on 2024-03-06 +2025-04-18 15:17:43,818 - INFO - app.services.data_initialization - Processed prices for category 1, group 1835 on 2024-03-06 +2025-04-18 15:17:43,831 - INFO - app.services.data_initialization - Processed prices for category 1, group 94 on 2024-03-06 +2025-04-18 15:17:43,851 - INFO - app.services.data_initialization - Processed prices for category 1, group 75 on 2024-03-06 +2025-04-18 15:17:43,901 - INFO - app.services.data_initialization - Processed prices for category 1, group 23020 on 2024-03-06 +2025-04-18 15:17:43,920 - INFO - app.services.data_initialization - Processed prices for category 1, group 1693 on 2024-03-06 +2025-04-18 15:17:43,931 - INFO - app.services.data_initialization - Processed prices for category 1, group 2892 on 2024-03-06 +2025-04-18 15:17:43,948 - INFO - app.services.data_initialization - Processed prices for category 1, group 23363 on 2024-03-06 +2025-04-18 15:17:43,966 - INFO - app.services.data_initialization - Processed prices for category 1, group 59 on 2024-03-06 +2025-04-18 15:17:43,981 - INFO - app.services.data_initialization - Processed prices for category 1, group 2009 on 2024-03-06 +2025-04-18 15:17:44,003 - INFO - app.services.data_initialization - Processed prices for category 1, group 1708 on 2024-03-06 +2025-04-18 15:17:44,012 - INFO - app.services.data_initialization - Processed prices for category 1, group 1475 on 2024-03-06 +2025-04-18 15:17:44,012 - INFO - app.services.data_initialization - Processed prices for category 1, group 14 on 2024-03-06 +2025-04-18 15:17:44,038 - INFO - app.services.data_initialization - Processed prices for category 1, group 2750 on 2024-03-06 +2025-04-18 15:17:44,051 - INFO - app.services.data_initialization - Processed prices for category 1, group 6 on 2024-03-06 +2025-04-18 15:17:44,071 - INFO - app.services.data_initialization - Processed prices for category 1, group 1164 on 2024-03-06 +2025-04-18 15:17:44,130 - INFO - app.services.data_initialization - Processed prices for category 1, group 2576 on 2024-03-06 +2025-04-18 15:17:44,139 - INFO - app.services.data_initialization - Processed prices for category 1, group 3176 on 2024-03-06 +2025-04-18 15:17:44,158 - INFO - app.services.data_initialization - Processed prices for category 1, group 22979 on 2024-03-06 +2025-04-18 15:17:44,171 - INFO - app.services.data_initialization - Processed prices for category 1, group 2967 on 2024-03-06 +2025-04-18 15:17:44,184 - INFO - app.services.data_initialization - Processed prices for category 1, group 2900 on 2024-03-06 +2025-04-18 15:17:44,194 - INFO - app.services.data_initialization - Processed prices for category 1, group 47 on 2024-03-06 +2025-04-18 15:17:44,250 - INFO - app.services.data_initialization - Processed prices for category 1, group 1111 on 2024-03-06 +2025-04-18 15:17:44,275 - INFO - app.services.data_initialization - Processed prices for category 1, group 2050 on 2024-03-06 +2025-04-18 15:17:44,303 - INFO - app.services.data_initialization - Processed prices for category 1, group 23312 on 2024-03-06 +2025-04-18 15:17:44,312 - INFO - app.services.data_initialization - Processed prices for category 1, group 2632 on 2024-03-06 +2025-04-18 15:17:44,325 - INFO - app.services.data_initialization - Processed prices for category 1, group 78 on 2024-03-06 +2025-04-18 15:17:44,335 - INFO - app.services.data_initialization - Processed prices for category 1, group 23448 on 2024-03-06 +2025-04-18 15:17:44,344 - INFO - app.services.data_initialization - Processed prices for category 1, group 119 on 2024-03-06 +2025-04-18 15:17:44,357 - INFO - app.services.data_initialization - Processed prices for category 1, group 2599 on 2024-03-06 +2025-04-18 15:17:44,368 - INFO - app.services.data_initialization - Processed prices for category 1, group 84 on 2024-03-06 +2025-04-18 15:17:44,417 - INFO - app.services.data_initialization - Processed prices for category 1, group 23165 on 2024-03-06 +2025-04-18 15:17:44,435 - INFO - app.services.data_initialization - Processed prices for category 1, group 51 on 2024-03-06 +2025-04-18 15:17:44,448 - INFO - app.services.data_initialization - Processed prices for category 1, group 363 on 2024-03-06 +2025-04-18 15:17:44,457 - INFO - app.services.data_initialization - Processed prices for category 1, group 23447 on 2024-03-06 +2025-04-18 15:17:44,477 - INFO - app.services.data_initialization - Processed prices for category 1, group 1113 on 2024-03-06 +2025-04-18 15:17:44,492 - INFO - app.services.data_initialization - Processed prices for category 1, group 115 on 2024-03-06 +2025-04-18 15:17:44,502 - INFO - app.services.data_initialization - Processed prices for category 1, group 2379 on 2024-03-06 +2025-04-18 15:17:44,521 - INFO - app.services.data_initialization - Processed prices for category 1, group 1879 on 2024-03-06 +2025-04-18 15:17:44,530 - INFO - app.services.data_initialization - Processed prices for category 1, group 2078 on 2024-03-06 +2025-04-18 15:17:44,541 - INFO - app.services.data_initialization - Processed prices for category 1, group 109 on 2024-03-06 +2025-04-18 15:17:44,551 - INFO - app.services.data_initialization - Processed prices for category 1, group 23317 on 2024-03-06 +2025-04-18 15:17:44,568 - INFO - app.services.data_initialization - Processed prices for category 1, group 1497 on 2024-03-06 +2025-04-18 15:17:44,582 - INFO - app.services.data_initialization - Processed prices for category 1, group 10 on 2024-03-06 +2025-04-18 15:17:44,591 - INFO - app.services.data_initialization - Processed prices for category 1, group 568 on 2024-03-06 +2025-04-18 15:17:44,600 - INFO - app.services.data_initialization - Processed prices for category 1, group 1837 on 2024-03-06 +2025-04-18 15:17:44,608 - INFO - app.services.data_initialization - Processed prices for category 1, group 2905 on 2024-03-06 +2025-04-18 15:17:44,616 - INFO - app.services.data_initialization - Processed prices for category 1, group 56 on 2024-03-06 +2025-04-18 15:17:44,616 - INFO - app.services.data_initialization - Processed prices for category 1, group 2712 on 2024-03-06 +2025-04-18 15:17:44,636 - INFO - app.services.data_initialization - Processed prices for category 1, group 1356 on 2024-03-06 +2025-04-18 15:17:44,654 - INFO - app.services.data_initialization - Processed prices for category 1, group 2189 on 2024-03-06 +2025-04-18 15:17:44,663 - INFO - app.services.data_initialization - Processed prices for category 1, group 3054 on 2024-03-06 +2025-04-18 15:17:44,673 - INFO - app.services.data_initialization - Processed prices for category 1, group 1311 on 2024-03-06 +2025-04-18 15:17:44,695 - INFO - app.services.data_initialization - Processed prices for category 1, group 2199 on 2024-03-06 +2025-04-18 15:17:44,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 97 on 2024-03-06 +2025-04-18 15:17:44,722 - INFO - app.services.data_initialization - Processed prices for category 1, group 34 on 2024-03-06 +2025-04-18 15:17:44,722 - INFO - app.services.data_initialization - Processed prices for category 1, group 2572 on 2024-03-06 +2025-04-18 15:17:44,732 - INFO - app.services.data_initialization - Processed prices for category 1, group 1166 on 2024-03-06 +2025-04-18 15:17:44,750 - INFO - app.services.data_initialization - Processed prices for category 1, group 98 on 2024-03-06 +2025-04-18 15:17:44,772 - INFO - app.services.data_initialization - Processed prices for category 1, group 2 on 2024-03-06 +2025-04-18 15:17:44,787 - INFO - app.services.data_initialization - Processed prices for category 1, group 74 on 2024-03-06 +2025-04-18 15:17:44,796 - INFO - app.services.data_initialization - Processed prices for category 1, group 1477 on 2024-03-06 +2025-04-18 15:17:44,797 - INFO - app.services.data_initialization - Processed prices for category 1, group 19 on 2024-03-06 +2025-04-18 15:17:44,808 - INFO - app.services.data_initialization - Processed prices for category 1, group 23099 on 2024-03-06 +2025-04-18 15:17:44,824 - INFO - app.services.data_initialization - Processed prices for category 1, group 1857 on 2024-03-06 +2025-04-18 15:17:44,836 - INFO - app.services.data_initialization - Processed prices for category 1, group 23288 on 2024-03-06 +2025-04-18 15:17:44,847 - INFO - app.services.data_initialization - Processed prices for category 1, group 2802 on 2024-03-06 +2025-04-18 15:17:44,862 - INFO - app.services.data_initialization - Processed prices for category 1, group 65 on 2024-03-06 +2025-04-18 15:17:44,874 - INFO - app.services.data_initialization - Processed prices for category 1, group 23102 on 2024-03-06 +2025-04-18 15:17:44,891 - INFO - app.services.data_initialization - Processed prices for category 1, group 1312 on 2024-03-06 +2025-04-18 15:17:44,902 - INFO - app.services.data_initialization - Processed prices for category 1, group 2822 on 2024-03-06 +2025-04-18 15:17:44,916 - INFO - app.services.data_initialization - Processed prices for category 1, group 5 on 2024-03-06 +2025-04-18 15:17:44,936 - INFO - app.services.data_initialization - Processed prices for category 1, group 2290 on 2024-03-06 +2025-04-18 15:17:44,950 - INFO - app.services.data_initialization - Processed prices for category 1, group 112 on 2024-03-06 +2025-04-18 15:17:44,964 - INFO - app.services.data_initialization - Processed prices for category 1, group 23362 on 2024-03-06 +2025-04-18 15:17:44,977 - INFO - app.services.data_initialization - Processed prices for category 1, group 2893 on 2024-03-06 +2025-04-18 15:17:44,995 - INFO - app.services.data_initialization - Processed prices for category 1, group 1515 on 2024-03-06 +2025-04-18 15:17:45,009 - INFO - app.services.data_initialization - Processed prices for category 1, group 114 on 2024-03-06 +2025-04-18 15:17:45,017 - INFO - app.services.data_initialization - Processed prices for category 1, group 1821 on 2024-03-06 +2025-04-18 15:17:45,025 - INFO - app.services.data_initialization - Processed prices for category 1, group 38 on 2024-03-06 +2025-04-18 15:17:45,034 - INFO - app.services.data_initialization - Processed prices for category 1, group 1145 on 2024-03-06 +2025-04-18 15:17:45,063 - INFO - app.services.data_initialization - Processed prices for category 1, group 2862 on 2024-03-06 +2025-04-18 15:17:45,072 - INFO - app.services.data_initialization - Processed prices for category 1, group 71 on 2024-03-06 +2025-04-18 15:17:45,085 - INFO - app.services.data_initialization - Processed prices for category 1, group 86 on 2024-03-06 +2025-04-18 15:17:45,102 - INFO - app.services.data_initialization - Processed prices for category 1, group 58 on 2024-03-06 +2025-04-18 15:17:45,115 - INFO - app.services.data_initialization - Processed prices for category 1, group 66 on 2024-03-06 +2025-04-18 15:17:45,124 - INFO - app.services.data_initialization - Processed prices for category 1, group 1507 on 2024-03-06 +2025-04-18 15:17:45,136 - INFO - app.services.data_initialization - Processed prices for category 1, group 105 on 2024-03-06 +2025-04-18 15:17:45,149 - INFO - app.services.data_initialization - Processed prices for category 1, group 2714 on 2024-03-06 +2025-04-18 15:17:45,149 - INFO - app.services.data_initialization - Processed prices for category 1, group 2351 on 2024-03-06 +2025-04-18 15:17:45,151 - INFO - app.services.data_initialization - Processed prices for category 1, group 2571 on 2024-03-06 +2025-04-18 15:17:45,160 - INFO - app.services.data_initialization - Processed prices for category 1, group 3178 on 2024-03-06 +2025-04-18 15:17:45,180 - INFO - app.services.data_initialization - Processed prices for category 1, group 2801 on 2024-03-06 +2025-04-18 15:17:45,190 - INFO - app.services.data_initialization - Processed prices for category 1, group 15 on 2024-03-06 +2025-04-18 15:17:45,200 - INFO - app.services.data_initialization - Processed prices for category 1, group 35 on 2024-03-06 +2025-04-18 15:17:45,213 - INFO - app.services.data_initialization - Processed prices for category 1, group 2543 on 2024-03-06 +2025-04-18 15:17:45,233 - INFO - app.services.data_initialization - Processed prices for category 1, group 3031 on 2024-03-06 +2025-04-18 15:17:45,244 - INFO - app.services.data_initialization - Processed prices for category 1, group 1274 on 2024-03-06 +2025-04-18 15:17:45,253 - INFO - app.services.data_initialization - Processed prices for category 1, group 1765 on 2024-03-06 +2025-04-18 15:17:45,273 - INFO - app.services.data_initialization - Processed prices for category 1, group 100 on 2024-03-06 +2025-04-18 15:17:45,293 - INFO - app.services.data_initialization - Processed prices for category 1, group 1740 on 2024-03-06 +2025-04-18 15:17:45,302 - INFO - app.services.data_initialization - Processed prices for category 1, group 106 on 2024-03-06 +2025-04-18 15:17:45,339 - INFO - app.services.data_initialization - Processed prices for category 1, group 2198 on 2024-03-06 +2025-04-18 15:17:45,352 - INFO - app.services.data_initialization - Processed prices for category 1, group 3048 on 2024-03-06 +2025-04-18 15:17:45,374 - INFO - app.services.data_initialization - Processed prices for category 1, group 102 on 2024-03-06 +2025-04-18 15:17:45,384 - INFO - app.services.data_initialization - Processed prices for category 1, group 50 on 2024-03-06 +2025-04-18 15:17:45,404 - INFO - app.services.data_initialization - Processed prices for category 1, group 1882 on 2024-03-06 +2025-04-18 15:17:45,414 - INFO - app.services.data_initialization - Processed prices for category 1, group 601 on 2024-03-06 +2025-04-18 15:17:45,429 - INFO - app.services.data_initialization - Processed prices for category 1, group 43 on 2024-03-06 +2025-04-18 15:17:45,439 - INFO - app.services.data_initialization - Processed prices for category 1, group 368 on 2024-03-06 +2025-04-18 15:17:45,449 - INFO - app.services.data_initialization - Processed prices for category 1, group 1649 on 2024-03-06 +2025-04-18 15:17:45,461 - INFO - app.services.data_initialization - Processed prices for category 1, group 22933 on 2024-03-06 +2025-04-18 15:17:45,487 - INFO - app.services.data_initialization - Processed prices for category 1, group 2653 on 2024-03-06 +2025-04-18 15:17:45,517 - INFO - app.services.data_initialization - Processed prices for category 1, group 3102 on 2024-03-06 +2025-04-18 15:17:45,525 - INFO - app.services.data_initialization - Processed prices for category 1, group 49 on 2024-03-06 +2025-04-18 15:17:45,535 - INFO - app.services.data_initialization - Processed prices for category 1, group 13 on 2024-03-06 +2025-04-18 15:17:45,553 - INFO - app.services.data_initialization - Processed prices for category 1, group 68 on 2024-03-06 +2025-04-18 15:17:45,668 - INFO - app.services.data_initialization - Processed prices for category 1, group 2870 on 2024-03-06 +2025-04-18 15:17:45,680 - INFO - app.services.data_initialization - Processed prices for category 1, group 12 on 2024-03-06 +2025-04-18 15:17:45,704 - INFO - app.services.data_initialization - Processed prices for category 1, group 2494 on 2024-03-06 +2025-04-18 15:17:45,721 - INFO - app.services.data_initialization - Processed prices for category 1, group 111 on 2024-03-06 +2025-04-18 15:17:45,737 - INFO - app.services.data_initialization - Processed prices for category 1, group 27 on 2024-03-06 +2025-04-18 15:17:45,748 - INFO - app.services.data_initialization - Processed prices for category 1, group 2968 on 2024-03-06 +2025-04-18 15:17:45,777 - INFO - app.services.data_initialization - Processed prices for category 1, group 23361 on 2024-03-06 +2025-04-18 15:17:45,786 - INFO - app.services.data_initialization - Processed prices for category 1, group 1909 on 2024-03-06 +2025-04-18 15:17:45,799 - INFO - app.services.data_initialization - Processed prices for category 1, group 2717 on 2024-03-06 +2025-04-18 15:17:45,799 - INFO - app.services.data_initialization - Processed prices for category 1, group 1689 on 2024-03-06 +2025-04-18 15:17:45,819 - INFO - app.services.data_initialization - Processed prices for category 1, group 17666 on 2024-03-06 +2025-04-18 15:17:45,833 - INFO - app.services.data_initialization - Processed prices for category 1, group 18 on 2024-03-06 +2025-04-18 15:17:45,849 - INFO - app.services.data_initialization - Processed prices for category 1, group 101 on 2024-03-06 +2025-04-18 15:17:45,863 - INFO - app.services.data_initialization - Processed prices for category 1, group 3159 on 2024-03-06 +2025-04-18 15:17:45,872 - INFO - app.services.data_initialization - Processed prices for category 1, group 1832 on 2024-03-06 +2025-04-18 15:17:45,888 - INFO - app.services.data_initialization - Processed prices for category 1, group 2246 on 2024-03-06 +2025-04-18 15:17:45,899 - INFO - app.services.data_initialization - Processed prices for category 1, group 2716 on 2024-03-06 +2025-04-18 15:17:45,917 - INFO - app.services.data_initialization - Processed prices for category 1, group 570 on 2024-03-06 +2025-04-18 15:17:45,935 - INFO - app.services.data_initialization - Processed prices for category 1, group 118 on 2024-03-06 +2025-04-18 15:17:45,951 - INFO - app.services.data_initialization - Processed prices for category 1, group 22989 on 2024-03-06 +2025-04-18 15:17:45,970 - INFO - app.services.data_initialization - Processed prices for category 1, group 1794 on 2024-03-06 +2025-04-18 15:17:45,981 - INFO - app.services.data_initialization - Processed prices for category 1, group 23025 on 2024-03-06 +2025-04-18 15:17:45,993 - INFO - app.services.data_initialization - Processed prices for category 1, group 120 on 2024-03-06 +2025-04-18 15:17:46,012 - INFO - app.services.data_initialization - Processed prices for category 1, group 370 on 2024-03-06 +2025-04-18 15:17:46,025 - INFO - app.services.data_initialization - Processed prices for category 1, group 77 on 2024-03-06 +2025-04-18 15:17:46,034 - INFO - app.services.data_initialization - Processed prices for category 1, group 2444 on 2024-03-06 +2025-04-18 15:17:46,034 - INFO - app.services.data_initialization - Processed prices for category 1, group 3100 on 2024-03-06 +2025-04-18 15:17:46,042 - INFO - app.services.data_initialization - Processed prices for category 1, group 2376 on 2024-03-06 +2025-04-18 15:17:46,055 - INFO - app.services.data_initialization - Processed prices for category 1, group 23223 on 2024-03-06 +2025-04-18 15:17:46,072 - INFO - app.services.data_initialization - Processed prices for category 1, group 46 on 2024-03-06 +2025-04-18 15:17:46,080 - INFO - app.services.data_initialization - Processed prices for category 1, group 104 on 2024-03-06 +2025-04-18 15:17:46,091 - INFO - app.services.data_initialization - Processed prices for category 1, group 2766 on 2024-03-06 +2025-04-18 15:17:46,111 - INFO - app.services.data_initialization - Processed prices for category 1, group 2654 on 2024-03-06 +2025-04-18 15:17:46,134 - INFO - app.services.data_initialization - Processed prices for category 1, group 3079 on 2024-03-06 +2025-04-18 15:17:46,146 - INFO - app.services.data_initialization - Processed prices for category 1, group 1793 on 2024-03-06 +2025-04-18 15:17:46,161 - INFO - app.services.data_initialization - Processed prices for category 1, group 3140 on 2024-03-06 +2025-04-18 15:17:46,169 - INFO - app.services.data_initialization - Processed prices for category 1, group 2699 on 2024-03-06 +2025-04-18 15:17:46,196 - INFO - app.services.data_initialization - Processed prices for category 1, group 2772 on 2024-03-06 +2025-04-18 15:17:46,215 - INFO - app.services.data_initialization - Processed prices for category 1, group 364 on 2024-03-06 +2025-04-18 15:17:46,229 - INFO - app.services.data_initialization - Processed prices for category 1, group 85 on 2024-03-06 +2025-04-18 15:17:46,254 - INFO - app.services.data_initialization - Processed prices for category 1, group 2603 on 2024-03-06 +2025-04-18 15:17:46,263 - INFO - app.services.data_initialization - Processed prices for category 1, group 1141 on 2024-03-06 +2025-04-18 15:17:46,275 - INFO - app.services.data_initialization - Processed prices for category 1, group 1275 on 2024-03-06 +2025-04-18 15:17:46,307 - INFO - app.services.data_initialization - Processed prices for category 1, group 2708 on 2024-03-06 +2025-04-18 15:17:46,319 - INFO - app.services.data_initialization - Processed prices for category 1, group 22 on 2024-03-06 +2025-04-18 15:17:46,328 - INFO - app.services.data_initialization - Processed prices for category 1, group 23446 on 2024-03-06 +2025-04-18 15:17:46,337 - INFO - app.services.data_initialization - Processed prices for category 1, group 48 on 2024-03-06 +2025-04-18 15:17:46,363 - INFO - app.services.data_initialization - Processed prices for category 1, group 23163 on 2024-03-06 +2025-04-18 15:17:46,375 - INFO - app.services.data_initialization - Processed prices for category 1, group 23439 on 2024-03-06 +2025-04-18 15:17:46,389 - INFO - app.services.data_initialization - Processed prices for category 1, group 116 on 2024-03-06 +2025-04-18 15:17:46,398 - INFO - app.services.data_initialization - Processed prices for category 1, group 23443 on 2024-03-06 +2025-04-18 15:17:46,412 - INFO - app.services.data_initialization - Processed prices for category 1, group 1527 on 2024-03-06 +2025-04-18 15:17:46,429 - INFO - app.services.data_initialization - Processed prices for category 1, group 2251 on 2024-03-06 +2025-04-18 15:17:46,438 - INFO - app.services.data_initialization - Processed prices for category 1, group 23442 on 2024-03-06 +2025-04-18 15:17:46,450 - INFO - app.services.data_initialization - Processed prices for category 1, group 2898 on 2024-03-06 +2025-04-18 15:17:46,478 - INFO - app.services.data_initialization - Processed prices for category 1, group 3026 on 2024-03-06 +2025-04-18 15:17:46,491 - INFO - app.services.data_initialization - Processed prices for category 1, group 2806 on 2024-03-06 +2025-04-18 15:17:46,505 - INFO - app.services.data_initialization - Processed prices for category 1, group 1526 on 2024-03-06 +2025-04-18 15:17:46,516 - INFO - app.services.data_initialization - Processed prices for category 1, group 367 on 2024-03-06 +2025-04-18 15:17:46,526 - INFO - app.services.data_initialization - Processed prices for category 1, group 1511 on 2024-03-06 +2025-04-18 15:17:46,536 - INFO - app.services.data_initialization - Processed prices for category 1, group 2742 on 2024-03-06 +2025-04-18 15:17:46,546 - INFO - app.services.data_initialization - Processed prices for category 1, group 23318 on 2024-03-06 +2025-04-18 15:17:46,562 - INFO - app.services.data_initialization - Processed prices for category 1, group 79 on 2024-03-06 +2025-04-18 15:17:46,563 - INFO - app.services.data_initialization - Processed prices for category 1, group 2778 on 2024-03-06 +2025-04-18 15:17:46,571 - INFO - app.services.data_initialization - Processed prices for category 1, group 2642 on 2024-03-06 +2025-04-18 15:17:46,597 - INFO - app.services.data_initialization - Processed prices for category 1, group 2823 on 2024-03-06 +2025-04-18 15:17:46,607 - INFO - app.services.data_initialization - Processed prices for category 1, group 2203 on 2024-03-06 +2025-04-18 15:17:46,615 - INFO - app.services.data_initialization - Processed prices for category 1, group 2899 on 2024-03-06 +2025-04-18 15:17:46,635 - INFO - app.services.data_initialization - Processed prices for category 1, group 2250 on 2024-03-06 +2025-04-18 15:17:46,652 - INFO - app.services.data_initialization - Processed prices for category 1, group 2477 on 2024-03-06 +2025-04-18 15:17:46,667 - INFO - app.services.data_initialization - Processed prices for category 1, group 99 on 2024-03-06 +2025-04-18 15:17:46,677 - INFO - app.services.data_initialization - Processed prices for category 1, group 2359 on 2024-03-06 +2025-04-18 15:17:46,677 - INFO - app.services.data_initialization - Processed prices for category 1, group 1690 on 2024-03-06 +2025-04-18 15:17:46,689 - INFO - app.services.data_initialization - Processed prices for category 1, group 41 on 2024-03-06 +2025-04-18 15:17:46,697 - INFO - app.services.data_initialization - Processed prices for category 1, group 61 on 2024-03-06 +2025-04-18 15:17:46,722 - INFO - app.services.data_initialization - Processed prices for category 1, group 23071 on 2024-03-06 +2025-04-18 15:17:46,732 - INFO - app.services.data_initialization - Processed prices for category 1, group 17664 on 2024-03-06 +2025-04-18 15:17:46,742 - INFO - app.services.data_initialization - Processed prices for category 1, group 8 on 2024-03-06 +2025-04-18 15:17:46,765 - INFO - app.services.data_initialization - Processed prices for category 1, group 4 on 2024-03-06 +2025-04-18 15:17:46,796 - INFO - app.services.data_initialization - Processed prices for category 1, group 2809 on 2024-03-06 +2025-04-18 15:17:46,807 - INFO - app.services.data_initialization - Processed prices for category 1, group 2388 on 2024-03-06 +2025-04-18 15:17:46,822 - INFO - app.services.data_initialization - Processed prices for category 1, group 17 on 2024-03-06 +2025-04-18 15:17:46,832 - INFO - app.services.data_initialization - Processed prices for category 1, group 91 on 2024-03-06 +2025-04-18 15:17:46,847 - INFO - app.services.data_initialization - Processed prices for category 1, group 1933 on 2024-03-06 +2025-04-18 15:17:46,872 - INFO - app.services.data_initialization - Processed prices for category 1, group 2422 on 2024-03-06 +2025-04-18 15:17:46,883 - INFO - app.services.data_initialization - Processed prices for category 1, group 23342 on 2024-03-06 +2025-04-18 15:17:46,895 - INFO - app.services.data_initialization - Processed prices for category 1, group 17685 on 2024-03-06 +2025-04-18 15:17:46,907 - INFO - app.services.data_initialization - Processed prices for category 1, group 2868 on 2024-03-06 +2025-04-18 15:17:46,916 - INFO - app.services.data_initialization - Processed prices for category 1, group 23166 on 2024-03-06 +2025-04-18 15:17:46,925 - INFO - app.services.data_initialization - Processed prices for category 1, group 2077 on 2024-03-06 +2025-04-18 15:17:46,934 - INFO - app.services.data_initialization - Processed prices for category 1, group 2902 on 2024-03-06 +2025-04-18 15:17:46,944 - INFO - app.services.data_initialization - Processed prices for category 1, group 33 on 2024-03-06 +2025-04-18 15:17:46,952 - INFO - app.services.data_initialization - Processed prices for category 1, group 9 on 2024-03-06 +2025-04-18 15:17:46,960 - INFO - app.services.data_initialization - Processed prices for category 1, group 1346 on 2024-03-06 +2025-04-18 15:17:46,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 90 on 2024-03-06 +2025-04-18 15:17:46,977 - INFO - app.services.data_initialization - Processed prices for category 1, group 23109 on 2024-03-06 +2025-04-18 15:17:46,985 - INFO - app.services.data_initialization - Processed prices for category 1, group 2045 on 2024-03-06 +2025-04-18 15:17:47,005 - INFO - app.services.data_initialization - Processed prices for category 1, group 2418 on 2024-03-06 +2025-04-18 15:17:47,016 - INFO - app.services.data_initialization - Processed prices for category 1, group 2869 on 2024-03-06 +2025-04-18 15:17:47,018 - INFO - app.services.data_initialization - Processed prices for category 1, group 2307 on 2024-03-06 +2025-04-18 15:17:47,030 - INFO - app.services.data_initialization - Processed prices for category 1, group 62 on 2024-03-06 +2025-04-18 15:17:47,047 - INFO - app.services.data_initialization - Processed prices for category 3, group 2420 on 2024-03-06 +2025-04-18 15:17:47,060 - INFO - app.services.data_initialization - Processed prices for category 3, group 1390 on 2024-03-06 +2025-04-18 15:17:47,073 - INFO - app.services.data_initialization - Processed prices for category 3, group 1444 on 2024-03-06 +2025-04-18 15:17:47,085 - INFO - app.services.data_initialization - Processed prices for category 3, group 3068 on 2024-03-06 +2025-04-18 15:17:47,096 - INFO - app.services.data_initialization - Processed prices for category 3, group 2069 on 2024-03-06 +2025-04-18 15:17:47,113 - INFO - app.services.data_initialization - Processed prices for category 3, group 23237 on 2024-03-06 +2025-04-18 15:17:47,123 - INFO - app.services.data_initialization - Processed prices for category 3, group 1796 on 2024-03-06 +2025-04-18 15:17:47,138 - INFO - app.services.data_initialization - Processed prices for category 3, group 1399 on 2024-03-06 +2025-04-18 15:17:47,148 - INFO - app.services.data_initialization - Processed prices for category 3, group 1522 on 2024-03-06 +2025-04-18 15:17:47,158 - INFO - app.services.data_initialization - Processed prices for category 3, group 1453 on 2024-03-06 +2025-04-18 15:17:47,170 - INFO - app.services.data_initialization - Processed prices for category 3, group 1434 on 2024-03-06 +2025-04-18 15:17:47,181 - INFO - app.services.data_initialization - Processed prices for category 3, group 2594 on 2024-03-06 +2025-04-18 15:17:47,195 - INFO - app.services.data_initialization - Processed prices for category 3, group 1404 on 2024-03-06 +2025-04-18 15:17:47,213 - INFO - app.services.data_initialization - Processed prices for category 3, group 2948 on 2024-03-06 +2025-04-18 15:17:47,226 - INFO - app.services.data_initialization - Processed prices for category 3, group 1392 on 2024-03-06 +2025-04-18 15:17:47,235 - INFO - app.services.data_initialization - Processed prices for category 3, group 1450 on 2024-03-06 +2025-04-18 15:17:47,250 - INFO - app.services.data_initialization - Processed prices for category 3, group 1509 on 2024-03-06 +2025-04-18 15:17:47,260 - INFO - app.services.data_initialization - Processed prices for category 3, group 1418 on 2024-03-06 +2025-04-18 15:17:47,269 - INFO - app.services.data_initialization - Processed prices for category 3, group 23095 on 2024-03-06 +2025-04-18 15:17:47,282 - INFO - app.services.data_initialization - Processed prices for category 3, group 1386 on 2024-03-06 +2025-04-18 15:17:47,291 - INFO - app.services.data_initialization - Processed prices for category 3, group 1433 on 2024-03-06 +2025-04-18 15:17:47,299 - INFO - app.services.data_initialization - Processed prices for category 3, group 1439 on 2024-03-06 +2025-04-18 15:17:47,312 - INFO - app.services.data_initialization - Processed prices for category 3, group 1441 on 2024-03-06 +2025-04-18 15:17:47,327 - INFO - app.services.data_initialization - Processed prices for category 3, group 1370 on 2024-03-06 +2025-04-18 15:17:47,341 - INFO - app.services.data_initialization - Processed prices for category 3, group 1368 on 2024-03-06 +2025-04-18 15:17:47,353 - INFO - app.services.data_initialization - Processed prices for category 3, group 1391 on 2024-03-06 +2025-04-18 15:17:47,369 - INFO - app.services.data_initialization - Processed prices for category 3, group 2545 on 2024-03-06 +2025-04-18 15:17:47,383 - INFO - app.services.data_initialization - Processed prices for category 3, group 1464 on 2024-03-06 +2025-04-18 15:17:47,396 - INFO - app.services.data_initialization - Processed prices for category 3, group 3150 on 2024-03-06 +2025-04-18 15:17:47,404 - INFO - app.services.data_initialization - Processed prices for category 3, group 1455 on 2024-03-06 +2025-04-18 15:17:47,412 - INFO - app.services.data_initialization - Processed prices for category 3, group 1442 on 2024-03-06 +2025-04-18 15:17:47,427 - INFO - app.services.data_initialization - Processed prices for category 3, group 1417 on 2024-03-06 +2025-04-18 15:17:47,441 - INFO - app.services.data_initialization - Processed prices for category 3, group 1957 on 2024-03-06 +2025-04-18 15:17:47,457 - INFO - app.services.data_initialization - Processed prices for category 3, group 23353 on 2024-03-06 +2025-04-18 15:17:47,471 - INFO - app.services.data_initialization - Processed prices for category 3, group 1397 on 2024-03-06 +2025-04-18 15:17:47,481 - INFO - app.services.data_initialization - Processed prices for category 3, group 2208 on 2024-03-06 +2025-04-18 15:17:47,492 - INFO - app.services.data_initialization - Processed prices for category 3, group 2295 on 2024-03-06 +2025-04-18 15:17:47,501 - INFO - app.services.data_initialization - Processed prices for category 3, group 1532 on 2024-03-06 +2025-04-18 15:17:47,516 - INFO - app.services.data_initialization - Processed prices for category 3, group 1387 on 2024-03-06 +2025-04-18 15:17:47,530 - INFO - app.services.data_initialization - Processed prices for category 3, group 1451 on 2024-03-06 +2025-04-18 15:17:47,539 - INFO - app.services.data_initialization - Processed prices for category 3, group 1465 on 2024-03-06 +2025-04-18 15:17:47,548 - INFO - app.services.data_initialization - Processed prices for category 3, group 2205 on 2024-03-06 +2025-04-18 15:17:47,562 - INFO - app.services.data_initialization - Processed prices for category 3, group 17688 on 2024-03-06 +2025-04-18 15:17:47,577 - INFO - app.services.data_initialization - Processed prices for category 3, group 2377 on 2024-03-06 +2025-04-18 15:17:47,596 - INFO - app.services.data_initialization - Processed prices for category 3, group 1840 on 2024-03-06 +2025-04-18 15:17:47,608 - INFO - app.services.data_initialization - Processed prices for category 3, group 1402 on 2024-03-06 +2025-04-18 15:17:47,621 - INFO - app.services.data_initialization - Processed prices for category 3, group 1393 on 2024-03-06 +2025-04-18 15:17:47,631 - INFO - app.services.data_initialization - Processed prices for category 3, group 2781 on 2024-03-06 +2025-04-18 15:17:47,642 - INFO - app.services.data_initialization - Processed prices for category 3, group 604 on 2024-03-06 +2025-04-18 15:17:47,653 - INFO - app.services.data_initialization - Processed prices for category 3, group 2289 on 2024-03-06 +2025-04-18 15:17:47,665 - INFO - app.services.data_initialization - Processed prices for category 3, group 1494 on 2024-03-06 +2025-04-18 15:17:47,665 - INFO - app.services.data_initialization - Processed prices for category 3, group 610 on 2024-03-06 +2025-04-18 15:17:47,674 - INFO - app.services.data_initialization - Processed prices for category 3, group 23381 on 2024-03-06 +2025-04-18 15:17:47,683 - INFO - app.services.data_initialization - Processed prices for category 3, group 1533 on 2024-03-06 +2025-04-18 15:17:47,696 - INFO - app.services.data_initialization - Processed prices for category 3, group 1381 on 2024-03-06 +2025-04-18 15:17:47,710 - INFO - app.services.data_initialization - Processed prices for category 3, group 1701 on 2024-03-06 +2025-04-18 15:17:47,722 - INFO - app.services.data_initialization - Processed prices for category 3, group 2054 on 2024-03-06 +2025-04-18 15:17:47,733 - INFO - app.services.data_initialization - Processed prices for category 3, group 1411 on 2024-03-06 +2025-04-18 15:17:47,746 - INFO - app.services.data_initialization - Processed prices for category 3, group 1396 on 2024-03-06 +2025-04-18 15:17:47,759 - INFO - app.services.data_initialization - Processed prices for category 3, group 1410 on 2024-03-06 +2025-04-18 15:17:47,778 - INFO - app.services.data_initialization - Processed prices for category 3, group 2534 on 2024-03-06 +2025-04-18 15:17:47,798 - INFO - app.services.data_initialization - Processed prices for category 3, group 22880 on 2024-03-06 +2025-04-18 15:17:47,806 - INFO - app.services.data_initialization - Processed prices for category 3, group 1540 on 2024-03-06 +2025-04-18 15:17:47,821 - INFO - app.services.data_initialization - Processed prices for category 3, group 1408 on 2024-03-06 +2025-04-18 15:17:47,831 - INFO - app.services.data_initialization - Processed prices for category 3, group 1538 on 2024-03-06 +2025-04-18 15:17:47,843 - INFO - app.services.data_initialization - Processed prices for category 3, group 2754 on 2024-03-06 +2025-04-18 15:17:47,856 - INFO - app.services.data_initialization - Processed prices for category 3, group 1440 on 2024-03-06 +2025-04-18 15:17:47,872 - INFO - app.services.data_initialization - Processed prices for category 3, group 2675 on 2024-03-06 +2025-04-18 15:17:47,885 - INFO - app.services.data_initialization - Processed prices for category 3, group 1815 on 2024-03-06 +2025-04-18 15:17:47,898 - INFO - app.services.data_initialization - Processed prices for category 3, group 1412 on 2024-03-06 +2025-04-18 15:17:47,909 - INFO - app.services.data_initialization - Processed prices for category 3, group 1389 on 2024-03-06 +2025-04-18 15:17:47,919 - INFO - app.services.data_initialization - Processed prices for category 3, group 1536 on 2024-03-06 +2025-04-18 15:17:47,930 - INFO - app.services.data_initialization - Processed prices for category 3, group 1378 on 2024-03-06 +2025-04-18 15:17:47,942 - INFO - app.services.data_initialization - Processed prices for category 3, group 1395 on 2024-03-06 +2025-04-18 15:17:47,958 - INFO - app.services.data_initialization - Processed prices for category 3, group 1919 on 2024-03-06 +2025-04-18 15:17:47,972 - INFO - app.services.data_initialization - Processed prices for category 3, group 1528 on 2024-03-06 +2025-04-18 15:17:47,994 - INFO - app.services.data_initialization - Processed prices for category 3, group 2464 on 2024-03-06 +2025-04-18 15:17:48,002 - INFO - app.services.data_initialization - Processed prices for category 3, group 17674 on 2024-03-06 +2025-04-18 15:17:48,023 - INFO - app.services.data_initialization - Processed prices for category 3, group 2906 on 2024-03-06 +2025-04-18 15:17:48,036 - INFO - app.services.data_initialization - Processed prices for category 3, group 1383 on 2024-03-06 +2025-04-18 15:17:48,048 - INFO - app.services.data_initialization - Processed prices for category 3, group 605 on 2024-03-06 +2025-04-18 15:17:48,061 - INFO - app.services.data_initialization - Processed prices for category 3, group 635 on 2024-03-06 +2025-04-18 15:17:48,076 - INFO - app.services.data_initialization - Processed prices for category 3, group 2278 on 2024-03-06 +2025-04-18 15:17:48,086 - INFO - app.services.data_initialization - Processed prices for category 3, group 2782 on 2024-03-06 +2025-04-18 15:17:48,086 - INFO - app.services.data_initialization - Processed prices for category 3, group 609 on 2024-03-06 +2025-04-18 15:17:48,094 - INFO - app.services.data_initialization - Processed prices for category 3, group 2148 on 2024-03-06 +2025-04-18 15:17:48,103 - INFO - app.services.data_initialization - Processed prices for category 3, group 1421 on 2024-03-06 +2025-04-18 15:17:48,117 - INFO - app.services.data_initialization - Processed prices for category 3, group 2209 on 2024-03-06 +2025-04-18 15:17:48,129 - INFO - app.services.data_initialization - Processed prices for category 3, group 22872 on 2024-03-06 +2025-04-18 15:17:48,138 - INFO - app.services.data_initialization - Processed prices for category 3, group 2931 on 2024-03-06 +2025-04-18 15:17:48,147 - INFO - app.services.data_initialization - Processed prices for category 3, group 1427 on 2024-03-06 +2025-04-18 15:17:48,163 - INFO - app.services.data_initialization - Processed prices for category 3, group 1661 on 2024-03-06 +2025-04-18 15:17:48,175 - INFO - app.services.data_initialization - Processed prices for category 3, group 1780 on 2024-03-06 +2025-04-18 15:17:48,189 - INFO - app.services.data_initialization - Processed prices for category 3, group 1379 on 2024-03-06 +2025-04-18 15:17:48,200 - INFO - app.services.data_initialization - Processed prices for category 3, group 1728 on 2024-03-06 +2025-04-18 15:17:48,223 - INFO - app.services.data_initialization - Processed prices for category 3, group 2328 on 2024-03-06 +2025-04-18 15:17:48,232 - INFO - app.services.data_initialization - Processed prices for category 3, group 23266 on 2024-03-06 +2025-04-18 15:17:48,244 - INFO - app.services.data_initialization - Processed prices for category 3, group 1405 on 2024-03-06 +2025-04-18 15:17:48,257 - INFO - app.services.data_initialization - Processed prices for category 3, group 1385 on 2024-03-06 +2025-04-18 15:17:48,275 - INFO - app.services.data_initialization - Processed prices for category 3, group 23120 on 2024-03-06 +2025-04-18 15:17:48,284 - INFO - app.services.data_initialization - Processed prices for category 3, group 648 on 2024-03-06 +2025-04-18 15:17:48,295 - INFO - app.services.data_initialization - Processed prices for category 3, group 2685 on 2024-03-06 +2025-04-18 15:17:48,312 - INFO - app.services.data_initialization - Processed prices for category 3, group 2626 on 2024-03-06 +2025-04-18 15:17:48,321 - INFO - app.services.data_initialization - Processed prices for category 3, group 1432 on 2024-03-06 +2025-04-18 15:17:48,334 - INFO - app.services.data_initialization - Processed prices for category 3, group 1424 on 2024-03-06 +2025-04-18 15:17:48,345 - INFO - app.services.data_initialization - Processed prices for category 3, group 3051 on 2024-03-06 +2025-04-18 15:17:48,356 - INFO - app.services.data_initialization - Processed prices for category 3, group 2686 on 2024-03-06 +2025-04-18 15:17:48,366 - INFO - app.services.data_initialization - Processed prices for category 3, group 1525 on 2024-03-06 +2025-04-18 15:17:48,374 - INFO - app.services.data_initialization - Processed prices for category 3, group 23306 on 2024-03-06 +2025-04-18 15:17:48,392 - INFO - app.services.data_initialization - Processed prices for category 3, group 23286 on 2024-03-06 +2025-04-18 15:17:48,405 - INFO - app.services.data_initialization - Processed prices for category 3, group 1380 on 2024-03-06 +2025-04-18 15:17:48,414 - INFO - app.services.data_initialization - Processed prices for category 3, group 1729 on 2024-03-06 +2025-04-18 15:17:48,427 - INFO - app.services.data_initialization - Processed prices for category 3, group 1429 on 2024-03-06 +2025-04-18 15:17:48,435 - INFO - app.services.data_initialization - Processed prices for category 3, group 1543 on 2024-03-06 +2025-04-18 15:17:48,449 - INFO - app.services.data_initialization - Processed prices for category 3, group 1374 on 2024-03-06 +2025-04-18 15:17:48,462 - INFO - app.services.data_initialization - Processed prices for category 3, group 1481 on 2024-03-06 +2025-04-18 15:17:48,476 - INFO - app.services.data_initialization - Processed prices for category 3, group 1400 on 2024-03-06 +2025-04-18 15:17:48,528 - INFO - app.services.data_initialization - Processed prices for category 3, group 1416 on 2024-03-06 +2025-04-18 15:17:48,540 - INFO - app.services.data_initialization - Processed prices for category 3, group 1414 on 2024-03-06 +2025-04-18 15:17:48,553 - INFO - app.services.data_initialization - Processed prices for category 3, group 1419 on 2024-03-06 +2025-04-18 15:17:48,565 - INFO - app.services.data_initialization - Processed prices for category 3, group 1415 on 2024-03-06 +2025-04-18 15:17:48,583 - INFO - app.services.data_initialization - Processed prices for category 3, group 2848 on 2024-03-06 +2025-04-18 15:17:48,593 - INFO - app.services.data_initialization - Processed prices for category 3, group 2364 on 2024-03-06 +2025-04-18 15:17:48,612 - INFO - app.services.data_initialization - Processed prices for category 3, group 2585 on 2024-03-06 +2025-04-18 15:17:48,629 - INFO - app.services.data_initialization - Processed prices for category 3, group 1372 on 2024-03-06 +2025-04-18 15:17:48,643 - INFO - app.services.data_initialization - Processed prices for category 3, group 1369 on 2024-03-06 +2025-04-18 15:17:48,659 - INFO - app.services.data_initialization - Processed prices for category 3, group 1842 on 2024-03-06 +2025-04-18 15:17:48,672 - INFO - app.services.data_initialization - Processed prices for category 3, group 1534 on 2024-03-06 +2025-04-18 15:17:48,682 - INFO - app.services.data_initialization - Processed prices for category 3, group 2867 on 2024-03-06 +2025-04-18 15:17:48,697 - INFO - app.services.data_initialization - Processed prices for category 3, group 1375 on 2024-03-06 +2025-04-18 15:17:48,710 - INFO - app.services.data_initialization - Processed prices for category 3, group 1377 on 2024-03-06 +2025-04-18 15:17:48,722 - INFO - app.services.data_initialization - Processed prices for category 3, group 1398 on 2024-03-06 +2025-04-18 15:17:48,735 - INFO - app.services.data_initialization - Processed prices for category 3, group 1382 on 2024-03-06 +2025-04-18 15:17:48,747 - INFO - app.services.data_initialization - Processed prices for category 3, group 1376 on 2024-03-06 +2025-04-18 15:17:48,759 - INFO - app.services.data_initialization - Processed prices for category 3, group 1428 on 2024-03-06 +2025-04-18 15:17:48,768 - INFO - app.services.data_initialization - Processed prices for category 3, group 3179 on 2024-03-06 +2025-04-18 15:17:48,783 - INFO - app.services.data_initialization - Processed prices for category 3, group 1863 on 2024-03-06 +2025-04-18 15:17:48,793 - INFO - app.services.data_initialization - Processed prices for category 3, group 1426 on 2024-03-06 +2025-04-18 15:17:48,836 - INFO - app.services.data_initialization - Processed prices for category 3, group 2282 on 2024-03-06 +2025-04-18 15:17:48,845 - INFO - app.services.data_initialization - Processed prices for category 3, group 23330 on 2024-03-06 +2025-04-18 15:17:48,857 - INFO - app.services.data_initialization - Processed prices for category 3, group 1576 on 2024-03-06 +2025-04-18 15:17:48,866 - INFO - app.services.data_initialization - Processed prices for category 3, group 2175 on 2024-03-06 +2025-04-18 15:17:48,876 - INFO - app.services.data_initialization - Processed prices for category 3, group 1853 on 2024-03-06 +2025-04-18 15:17:48,884 - INFO - app.services.data_initialization - Processed prices for category 3, group 1542 on 2024-03-06 +2025-04-18 15:17:48,896 - INFO - app.services.data_initialization - Processed prices for category 3, group 1403 on 2024-03-06 +2025-04-18 15:17:48,910 - INFO - app.services.data_initialization - Processed prices for category 3, group 1394 on 2024-03-06 +2025-04-18 15:17:48,926 - INFO - app.services.data_initialization - Processed prices for category 3, group 2701 on 2024-03-06 +2025-04-18 15:17:48,938 - INFO - app.services.data_initialization - Processed prices for category 3, group 1409 on 2024-03-06 +2025-04-18 15:17:48,947 - INFO - app.services.data_initialization - Processed prices for category 3, group 1446 on 2024-03-06 +2025-04-18 15:17:48,956 - INFO - app.services.data_initialization - Processed prices for category 3, group 1422 on 2024-03-06 +2025-04-18 15:17:48,967 - INFO - app.services.data_initialization - Processed prices for category 3, group 1373 on 2024-03-06 +2025-04-18 15:17:48,983 - INFO - app.services.data_initialization - Processed prices for category 3, group 2178 on 2024-03-06 +2025-04-18 15:17:48,998 - INFO - app.services.data_initialization - Processed prices for category 3, group 3040 on 2024-03-06 +2025-04-18 15:17:49,012 - INFO - app.services.data_initialization - Processed prices for category 3, group 2071 on 2024-03-06 +2025-04-18 15:17:49,022 - INFO - app.services.data_initialization - Processed prices for category 3, group 2776 on 2024-03-06 +2025-04-18 15:17:49,035 - INFO - app.services.data_initialization - Processed prices for category 3, group 1413 on 2024-03-06 +2025-04-18 15:17:49,053 - INFO - app.services.data_initialization - Processed prices for category 3, group 22873 on 2024-03-06 +2025-04-18 15:17:49,063 - INFO - app.services.data_initialization - Processed prices for category 3, group 23323 on 2024-03-06 +2025-04-18 15:17:49,072 - INFO - app.services.data_initialization - Processed prices for category 3, group 3172 on 2024-03-06 +2025-04-18 15:17:49,080 - INFO - app.services.data_initialization - Processed prices for category 3, group 2214 on 2024-03-06 +2025-04-18 15:17:49,092 - INFO - app.services.data_initialization - Processed prices for category 3, group 1663 on 2024-03-06 +2025-04-18 15:17:49,105 - INFO - app.services.data_initialization - Processed prices for category 3, group 1367 on 2024-03-06 +2025-04-18 15:17:49,119 - INFO - app.services.data_initialization - Processed prices for category 3, group 1384 on 2024-03-06 +2025-04-18 15:17:49,127 - INFO - app.services.data_initialization - Processed prices for category 3, group 2155 on 2024-03-06 +2025-04-18 15:17:49,137 - INFO - app.services.data_initialization - Processed prices for category 3, group 1423 on 2024-03-06 +2025-04-18 15:17:49,159 - INFO - app.services.data_initialization - Processed prices for category 3, group 1539 on 2024-03-06 +2025-04-18 15:17:49,171 - INFO - app.services.data_initialization - Processed prices for category 3, group 2480 on 2024-03-06 +2025-04-18 15:17:49,188 - INFO - app.services.data_initialization - Processed prices for category 3, group 3118 on 2024-03-06 +2025-04-18 15:17:49,199 - INFO - app.services.data_initialization - Processed prices for category 3, group 3020 on 2024-03-06 +2025-04-18 15:17:49,214 - INFO - app.services.data_initialization - Processed prices for category 3, group 1406 on 2024-03-06 +2025-04-18 15:17:49,224 - INFO - app.services.data_initialization - Processed prices for category 3, group 1938 on 2024-03-06 +2025-04-18 15:17:49,232 - INFO - app.services.data_initialization - Processed prices for category 3, group 2555 on 2024-03-06 +2025-04-18 15:17:49,243 - INFO - app.services.data_initialization - Processed prices for category 3, group 1407 on 2024-03-06 +2025-04-18 15:17:49,252 - INFO - app.services.data_initialization - Processed prices for category 3, group 1541 on 2024-03-06 +2025-04-18 15:17:49,268 - INFO - app.services.data_initialization - Processed prices for category 3, group 2765 on 2024-03-06 +2025-04-18 15:17:49,276 - INFO - app.services.data_initialization - Processed prices for category 3, group 2332 on 2024-03-06 +2025-04-18 15:17:49,293 - INFO - app.services.data_initialization - Processed prices for category 3, group 1861 on 2024-03-06 +2025-04-18 15:17:49,301 - INFO - app.services.data_initialization - Processed prices for category 3, group 1694 on 2024-03-06 +2025-04-18 15:17:49,309 - INFO - app.services.data_initialization - Processed prices for category 3, group 1401 on 2024-03-06 +2025-04-18 15:17:49,326 - INFO - app.services.data_initialization - Processed prices for category 3, group 2807 on 2024-03-06 +2025-04-18 15:17:49,328 - INFO - app.services.data_initialization - Processed prices for category 3, group 3087 on 2024-03-06 +2025-04-18 15:17:49,341 - INFO - app.services.data_initialization - Processed prices for category 3, group 3064 on 2024-03-06 +2025-04-18 15:17:49,352 - INFO - app.services.data_initialization - Processed prices for category 3, group 630 on 2024-03-06 +2025-04-18 15:17:49,360 - INFO - app.services.data_initialization - Processed prices for category 3, group 2409 on 2024-03-06 +2025-04-18 15:17:49,376 - INFO - app.services.data_initialization - Processed prices for category 3, group 3170 on 2024-03-06 +2025-04-18 15:17:49,389 - INFO - app.services.data_initialization - Processed prices for category 3, group 1430 on 2024-03-06 +2025-04-18 15:17:49,408 - INFO - app.services.data_initialization - Processed prices for category 3, group 23228 on 2024-03-06 +2025-04-18 15:17:49,432 - INFO - app.services.data_initialization - Processed prices for category 3, group 2374 on 2024-03-06 +2025-04-18 15:17:49,441 - INFO - app.services.data_initialization - Processed prices for category 3, group 1447 on 2024-03-06 +2025-04-18 15:17:49,449 - INFO - app.services.data_initialization - Processed prices for category 3, group 1452 on 2024-03-06 +2025-04-18 15:17:49,457 - INFO - app.services.data_initialization - Processed prices for category 3, group 1692 on 2024-03-06 +2025-04-18 15:17:49,466 - INFO - app.services.data_initialization - Processed prices for category 3, group 17689 on 2024-03-06 +2025-04-18 15:17:49,466 - INFO - app.services.data_initialization - Downloading and processing archived prices for 2024-03-07 +2025-04-18 15:17:49,485 - INFO - app.services.external_api.base_external_service - Making request to https://tcgcsv.com/archive/tcgplayer/prices-2024-03-07.ppmd.7z +2025-04-18 15:17:53,664 - INFO - app.services.data_initialization - Processed prices for category 1, group 23319 on 2024-03-07 +2025-04-18 15:17:53,665 - INFO - app.services.data_initialization - Processed prices for category 1, group 1687 on 2024-03-07 +2025-04-18 15:17:53,690 - INFO - app.services.data_initialization - Processed prices for category 1, group 2326 on 2024-03-07 +2025-04-18 15:17:53,717 - INFO - app.services.data_initialization - Processed prices for category 1, group 117 on 2024-03-07 +2025-04-18 15:17:53,747 - INFO - app.services.data_initialization - Processed prices for category 1, group 1277 on 2024-03-07 +2025-04-18 15:17:53,777 - INFO - app.services.data_initialization - Processed prices for category 1, group 1476 on 2024-03-07 +2025-04-18 15:17:53,814 - INFO - app.services.data_initialization - Processed prices for category 1, group 82 on 2024-03-07 +2025-04-18 15:17:53,848 - INFO - app.services.data_initialization - Processed prices for category 1, group 80 on 2024-03-07 +2025-04-18 15:17:53,875 - INFO - app.services.data_initialization - Processed prices for category 1, group 2771 on 2024-03-07 +2025-04-18 15:17:53,905 - INFO - app.services.data_initialization - Processed prices for category 1, group 1163 on 2024-03-07 +2025-04-18 15:17:53,931 - INFO - app.services.data_initialization - Processed prices for category 1, group 16 on 2024-03-07 +2025-04-18 15:17:53,957 - INFO - app.services.data_initialization - Processed prices for category 1, group 57 on 2024-03-07 +2025-04-18 15:17:53,984 - INFO - app.services.data_initialization - Processed prices for category 1, group 30 on 2024-03-07 +2025-04-18 15:17:54,018 - INFO - app.services.data_initialization - Processed prices for category 1, group 2245 on 2024-03-07 +2025-04-18 15:17:54,048 - INFO - app.services.data_initialization - Processed prices for category 1, group 23316 on 2024-03-07 +2025-04-18 15:17:54,094 - INFO - app.services.data_initialization - Processed prices for category 1, group 1490 on 2024-03-07 +2025-04-18 15:17:54,128 - INFO - app.services.data_initialization - Processed prices for category 1, group 1144 on 2024-03-07 +2025-04-18 15:17:54,171 - INFO - app.services.data_initialization - Processed prices for category 1, group 3070 on 2024-03-07 +2025-04-18 15:17:54,214 - INFO - app.services.data_initialization - Processed prices for category 1, group 2655 on 2024-03-07 +2025-04-18 15:17:54,240 - INFO - app.services.data_initialization - Processed prices for category 1, group 31 on 2024-03-07 +2025-04-18 15:17:54,267 - INFO - app.services.data_initialization - Processed prices for category 1, group 3158 on 2024-03-07 +2025-04-18 15:17:54,297 - INFO - app.services.data_initialization - Processed prices for category 1, group 39 on 2024-03-07 +2025-04-18 15:17:54,325 - INFO - app.services.data_initialization - Processed prices for category 1, group 2966 on 2024-03-07 +2025-04-18 15:17:54,360 - INFO - app.services.data_initialization - Processed prices for category 1, group 67 on 2024-03-07 +2025-04-18 15:17:54,396 - INFO - app.services.data_initialization - Processed prices for category 1, group 2568 on 2024-03-07 +2025-04-18 15:17:54,439 - INFO - app.services.data_initialization - Processed prices for category 1, group 22875 on 2024-03-07 +2025-04-18 15:17:54,469 - INFO - app.services.data_initialization - Processed prices for category 1, group 2067 on 2024-03-07 +2025-04-18 15:17:54,495 - INFO - app.services.data_initialization - Processed prices for category 1, group 1904 on 2024-03-07 +2025-04-18 15:17:54,518 - INFO - app.services.data_initialization - Processed prices for category 1, group 2546 on 2024-03-07 +2025-04-18 15:17:54,542 - INFO - app.services.data_initialization - Processed prices for category 1, group 17667 on 2024-03-07 +2025-04-18 15:17:54,575 - INFO - app.services.data_initialization - Processed prices for category 1, group 20 on 2024-03-07 +2025-04-18 15:17:54,599 - INFO - app.services.data_initialization - Processed prices for category 1, group 2552 on 2024-03-07 +2025-04-18 15:17:54,627 - INFO - app.services.data_initialization - Processed prices for category 1, group 2463 on 2024-03-07 +2025-04-18 15:17:54,660 - INFO - app.services.data_initialization - Processed prices for category 1, group 1276 on 2024-03-07 +2025-04-18 15:17:54,687 - INFO - app.services.data_initialization - Processed prices for category 1, group 72 on 2024-03-07 +2025-04-18 15:17:54,713 - INFO - app.services.data_initialization - Processed prices for category 1, group 37 on 2024-03-07 +2025-04-18 15:17:54,737 - INFO - app.services.data_initialization - Processed prices for category 1, group 2361 on 2024-03-07 +2025-04-18 15:17:54,767 - INFO - app.services.data_initialization - Processed prices for category 1, group 70 on 2024-03-07 +2025-04-18 15:17:54,791 - INFO - app.services.data_initialization - Processed prices for category 1, group 2084 on 2024-03-07 +2025-04-18 15:17:54,877 - INFO - app.services.data_initialization - Processed prices for category 1, group 3185 on 2024-03-07 +2025-04-18 15:17:54,908 - INFO - app.services.data_initialization - Processed prices for category 1, group 1673 on 2024-03-07 +2025-04-18 15:17:54,946 - INFO - app.services.data_initialization - Processed prices for category 1, group 17670 on 2024-03-07 +2025-04-18 15:17:54,976 - INFO - app.services.data_initialization - Processed prices for category 1, group 2481 on 2024-03-07 +2025-04-18 15:17:55,003 - INFO - app.services.data_initialization - Processed prices for category 1, group 3169 on 2024-03-07 +2025-04-18 15:17:55,029 - INFO - app.services.data_initialization - Processed prices for category 1, group 2598 on 2024-03-07 +2025-04-18 15:17:55,067 - INFO - app.services.data_initialization - Processed prices for category 1, group 2773 on 2024-03-07 +2025-04-18 15:17:55,091 - INFO - app.services.data_initialization - Processed prices for category 1, group 2770 on 2024-03-07 +2025-04-18 15:17:55,115 - INFO - app.services.data_initialization - Processed prices for category 1, group 22970 on 2024-03-07 +2025-04-18 15:17:55,148 - INFO - app.services.data_initialization - Processed prices for category 1, group 44 on 2024-03-07 +2025-04-18 15:17:55,175 - INFO - app.services.data_initialization - Processed prices for category 1, group 3160 on 2024-03-07 +2025-04-18 15:17:55,206 - INFO - app.services.data_initialization - Processed prices for category 1, group 45 on 2024-03-07 +2025-04-18 15:17:55,240 - INFO - app.services.data_initialization - Processed prices for category 1, group 17665 on 2024-03-07 +2025-04-18 15:17:55,280 - INFO - app.services.data_initialization - Processed prices for category 1, group 103 on 2024-03-07 +2025-04-18 15:17:55,311 - INFO - app.services.data_initialization - Processed prices for category 1, group 125 on 2024-03-07 +2025-04-18 15:17:55,337 - INFO - app.services.data_initialization - Processed prices for category 1, group 2562 on 2024-03-07 +2025-04-18 15:17:55,366 - INFO - app.services.data_initialization - Processed prices for category 1, group 54 on 2024-03-07 +2025-04-18 15:17:55,400 - INFO - app.services.data_initialization - Processed prices for category 1, group 2634 on 2024-03-07 +2025-04-18 15:17:55,434 - INFO - app.services.data_initialization - Processed prices for category 1, group 69 on 2024-03-07 +2025-04-18 15:17:55,460 - INFO - app.services.data_initialization - Processed prices for category 1, group 2633 on 2024-03-07 +2025-04-18 15:17:55,490 - INFO - app.services.data_initialization - Processed prices for category 1, group 88 on 2024-03-07 +2025-04-18 15:17:55,518 - INFO - app.services.data_initialization - Processed prices for category 1, group 3175 on 2024-03-07 +2025-04-18 15:17:55,545 - INFO - app.services.data_initialization - Processed prices for category 1, group 36 on 2024-03-07 +2025-04-18 15:17:55,575 - INFO - app.services.data_initialization - Processed prices for category 1, group 2891 on 2024-03-07 +2025-04-18 15:17:55,609 - INFO - app.services.data_initialization - Processed prices for category 1, group 1512 on 2024-03-07 +2025-04-18 15:17:55,633 - INFO - app.services.data_initialization - Processed prices for category 1, group 11 on 2024-03-07 +2025-04-18 15:17:55,659 - INFO - app.services.data_initialization - Processed prices for category 1, group 40 on 2024-03-07 +2025-04-18 15:17:55,682 - INFO - app.services.data_initialization - Processed prices for category 1, group 2220 on 2024-03-07 +2025-04-18 15:17:55,707 - INFO - app.services.data_initialization - Processed prices for category 1, group 2386 on 2024-03-07 +2025-04-18 15:17:55,744 - INFO - app.services.data_initialization - Processed prices for category 1, group 2864 on 2024-03-07 +2025-04-18 15:17:55,774 - INFO - app.services.data_initialization - Processed prices for category 1, group 24 on 2024-03-07 +2025-04-18 15:17:55,798 - INFO - app.services.data_initialization - Processed prices for category 1, group 1348 on 2024-03-07 +2025-04-18 15:17:55,831 - INFO - app.services.data_initialization - Processed prices for category 1, group 2043 on 2024-03-07 +2025-04-18 15:17:55,862 - INFO - app.services.data_initialization - Processed prices for category 1, group 108 on 2024-03-07 +2025-04-18 15:17:55,897 - INFO - app.services.data_initialization - Processed prices for category 1, group 124 on 2024-03-07 +2025-04-18 15:17:55,925 - INFO - app.services.data_initialization - Processed prices for category 1, group 23164 on 2024-03-07 +2025-04-18 15:17:55,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 2942 on 2024-03-07 +2025-04-18 15:17:56,026 - INFO - app.services.data_initialization - Processed prices for category 1, group 23019 on 2024-03-07 +2025-04-18 15:17:56,052 - INFO - app.services.data_initialization - Processed prices for category 1, group 2334 on 2024-03-07 +2025-04-18 15:17:56,079 - INFO - app.services.data_initialization - Processed prices for category 1, group 122 on 2024-03-07 +2025-04-18 15:17:56,105 - INFO - app.services.data_initialization - Processed prices for category 1, group 365 on 2024-03-07 +2025-04-18 15:17:56,129 - INFO - app.services.data_initialization - Processed prices for category 1, group 2247 on 2024-03-07 +2025-04-18 15:17:56,152 - INFO - app.services.data_initialization - Processed prices for category 1, group 2447 on 2024-03-07 +2025-04-18 15:17:56,178 - INFO - app.services.data_initialization - Processed prices for category 1, group 121 on 2024-03-07 +2025-04-18 15:17:56,204 - INFO - app.services.data_initialization - Processed prices for category 1, group 22922 on 2024-03-07 +2025-04-18 15:17:56,234 - INFO - app.services.data_initialization - Processed prices for category 1, group 23 on 2024-03-07 +2025-04-18 15:17:56,263 - INFO - app.services.data_initialization - Processed prices for category 1, group 25 on 2024-03-07 +2025-04-18 15:17:56,296 - INFO - app.services.data_initialization - Processed prices for category 1, group 1293 on 2024-03-07 +2025-04-18 15:17:56,326 - INFO - app.services.data_initialization - Processed prices for category 1, group 362 on 2024-03-07 +2025-04-18 15:17:56,355 - INFO - app.services.data_initialization - Processed prices for category 1, group 83 on 2024-03-07 +2025-04-18 15:17:56,380 - INFO - app.services.data_initialization - Processed prices for category 1, group 107 on 2024-03-07 +2025-04-18 15:17:56,431 - INFO - app.services.data_initialization - Processed prices for category 1, group 23337 on 2024-03-07 +2025-04-18 15:17:56,466 - INFO - app.services.data_initialization - Processed prices for category 1, group 1 on 2024-03-07 +2025-04-18 15:17:56,496 - INFO - app.services.data_initialization - Processed prices for category 1, group 7 on 2024-03-07 +2025-04-18 15:17:56,528 - INFO - app.services.data_initialization - Processed prices for category 1, group 569 on 2024-03-07 +2025-04-18 15:17:56,555 - INFO - app.services.data_initialization - Processed prices for category 1, group 2156 on 2024-03-07 +2025-04-18 15:17:56,588 - INFO - app.services.data_initialization - Processed prices for category 1, group 110 on 2024-03-07 +2025-04-18 15:17:56,619 - INFO - app.services.data_initialization - Processed prices for category 1, group 1791 on 2024-03-07 +2025-04-18 15:17:56,663 - INFO - app.services.data_initialization - Processed prices for category 1, group 2958 on 2024-03-07 +2025-04-18 15:17:56,687 - INFO - app.services.data_initialization - Processed prices for category 1, group 1520 on 2024-03-07 +2025-04-18 15:17:56,721 - INFO - app.services.data_initialization - Processed prices for category 1, group 95 on 2024-03-07 +2025-04-18 15:17:56,745 - INFO - app.services.data_initialization - Processed prices for category 1, group 23440 on 2024-03-07 +2025-04-18 15:17:56,769 - INFO - app.services.data_initialization - Processed prices for category 1, group 2076 on 2024-03-07 +2025-04-18 15:17:56,799 - INFO - app.services.data_initialization - Processed prices for category 1, group 2098 on 2024-03-07 +2025-04-18 15:17:56,823 - INFO - app.services.data_initialization - Processed prices for category 1, group 1726 on 2024-03-07 +2025-04-18 15:17:56,823 - INFO - app.services.data_initialization - Processed prices for category 1, group 23167 on 2024-03-07 +2025-04-18 15:17:56,845 - INFO - app.services.data_initialization - Processed prices for category 1, group 2713 on 2024-03-07 +2025-04-18 15:17:56,876 - INFO - app.services.data_initialization - Processed prices for category 1, group 1934 on 2024-03-07 +2025-04-18 15:17:56,973 - INFO - app.services.data_initialization - Processed prices for category 1, group 2715 on 2024-03-07 +2025-04-18 15:17:56,998 - INFO - app.services.data_initialization - Processed prices for category 1, group 1524 on 2024-03-07 +2025-04-18 15:17:57,029 - INFO - app.services.data_initialization - Processed prices for category 1, group 1792 on 2024-03-07 +2025-04-18 15:17:57,055 - INFO - app.services.data_initialization - Processed prices for category 1, group 23420 on 2024-03-07 +2025-04-18 15:17:57,086 - INFO - app.services.data_initialization - Processed prices for category 1, group 2360 on 2024-03-07 +2025-04-18 15:17:57,109 - INFO - app.services.data_initialization - Processed prices for category 1, group 23445 on 2024-03-07 +2025-04-18 15:17:57,134 - INFO - app.services.data_initialization - Processed prices for category 1, group 3129 on 2024-03-07 +2025-04-18 15:17:57,171 - INFO - app.services.data_initialization - Processed prices for category 1, group 2648 on 2024-03-07 +2025-04-18 15:17:57,193 - INFO - app.services.data_initialization - Processed prices for category 1, group 2087 on 2024-03-07 +2025-04-18 15:17:57,223 - INFO - app.services.data_initialization - Processed prices for category 1, group 22876 on 2024-03-07 +2025-04-18 15:17:57,253 - INFO - app.services.data_initialization - Processed prices for category 1, group 1503 on 2024-03-07 +2025-04-18 15:17:57,282 - INFO - app.services.data_initialization - Processed prices for category 1, group 17662 on 2024-03-07 +2025-04-18 15:17:57,308 - INFO - app.services.data_initialization - Processed prices for category 1, group 113 on 2024-03-07 +2025-04-18 15:17:57,308 - INFO - app.services.data_initialization - Processed prices for category 1, group 29 on 2024-03-07 +2025-04-18 15:17:57,334 - INFO - app.services.data_initialization - Processed prices for category 1, group 2643 on 2024-03-07 +2025-04-18 15:17:57,370 - INFO - app.services.data_initialization - Processed prices for category 1, group 81 on 2024-03-07 +2025-04-18 15:17:57,393 - INFO - app.services.data_initialization - Processed prices for category 1, group 1930 on 2024-03-07 +2025-04-18 15:17:57,393 - INFO - app.services.data_initialization - Processed prices for category 1, group 2988 on 2024-03-07 +2025-04-18 15:17:57,412 - INFO - app.services.data_initialization - Processed prices for category 1, group 2989 on 2024-03-07 +2025-04-18 15:17:57,448 - INFO - app.services.data_initialization - Processed prices for category 1, group 3157 on 2024-03-07 +2025-04-18 15:17:57,476 - INFO - app.services.data_initialization - Processed prices for category 1, group 87 on 2024-03-07 +2025-04-18 15:17:57,605 - INFO - app.services.data_initialization - Processed prices for category 1, group 92 on 2024-03-07 +2025-04-18 15:17:57,633 - INFO - app.services.data_initialization - Processed prices for category 1, group 2665 on 2024-03-07 +2025-04-18 15:17:57,659 - INFO - app.services.data_initialization - Processed prices for category 1, group 23345 on 2024-03-07 +2025-04-18 15:17:57,682 - INFO - app.services.data_initialization - Processed prices for category 1, group 93 on 2024-03-07 +2025-04-18 15:17:57,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 63 on 2024-03-07 +2025-04-18 15:17:57,733 - INFO - app.services.data_initialization - Processed prices for category 1, group 23444 on 2024-03-07 +2025-04-18 15:17:57,784 - INFO - app.services.data_initialization - Processed prices for category 1, group 3047 on 2024-03-07 +2025-04-18 15:17:57,814 - INFO - app.services.data_initialization - Processed prices for category 1, group 2791 on 2024-03-07 +2025-04-18 15:17:57,842 - INFO - app.services.data_initialization - Processed prices for category 1, group 76 on 2024-03-07 +2025-04-18 15:17:57,874 - INFO - app.services.data_initialization - Processed prices for category 1, group 2092 on 2024-03-07 +2025-04-18 15:17:57,899 - INFO - app.services.data_initialization - Processed prices for category 1, group 3032 on 2024-03-07 +2025-04-18 15:17:57,924 - INFO - app.services.data_initialization - Processed prices for category 1, group 52 on 2024-03-07 +2025-04-18 15:17:57,954 - INFO - app.services.data_initialization - Processed prices for category 1, group 2207 on 2024-03-07 +2025-04-18 15:17:57,992 - INFO - app.services.data_initialization - Processed prices for category 1, group 60 on 2024-03-07 +2025-04-18 15:17:58,026 - INFO - app.services.data_initialization - Processed prices for category 1, group 2441 on 2024-03-07 +2025-04-18 15:17:58,049 - INFO - app.services.data_initialization - Processed prices for category 1, group 89 on 2024-03-07 +2025-04-18 15:17:58,072 - INFO - app.services.data_initialization - Processed prices for category 1, group 1577 on 2024-03-07 +2025-04-18 15:17:58,111 - INFO - app.services.data_initialization - Processed prices for category 1, group 17684 on 2024-03-07 +2025-04-18 15:17:58,142 - INFO - app.services.data_initialization - Processed prices for category 1, group 1905 on 2024-03-07 +2025-04-18 15:17:58,170 - INFO - app.services.data_initialization - Processed prices for category 1, group 26 on 2024-03-07 +2025-04-18 15:17:58,216 - INFO - app.services.data_initialization - Processed prices for category 1, group 1790 on 2024-03-07 +2025-04-18 15:17:58,216 - INFO - app.services.data_initialization - Processed prices for category 1, group 1688 on 2024-03-07 +2025-04-18 15:17:58,245 - INFO - app.services.data_initialization - Processed prices for category 1, group 21 on 2024-03-07 +2025-04-18 15:17:58,272 - INFO - app.services.data_initialization - Processed prices for category 1, group 23273 on 2024-03-07 +2025-04-18 15:17:58,298 - INFO - app.services.data_initialization - Processed prices for category 1, group 1641 on 2024-03-07 +2025-04-18 15:17:58,322 - INFO - app.services.data_initialization - Processed prices for category 1, group 23421 on 2024-03-07 +2025-04-18 15:17:58,351 - INFO - app.services.data_initialization - Processed prices for category 1, group 28 on 2024-03-07 +2025-04-18 15:17:58,379 - INFO - app.services.data_initialization - Processed prices for category 1, group 23270 on 2024-03-07 +2025-04-18 15:17:58,402 - INFO - app.services.data_initialization - Processed prices for category 1, group 369 on 2024-03-07 +2025-04-18 15:17:58,434 - INFO - app.services.data_initialization - Processed prices for category 1, group 2366 on 2024-03-07 +2025-04-18 15:17:58,461 - INFO - app.services.data_initialization - Processed prices for category 1, group 55 on 2024-03-07 +2025-04-18 15:17:58,489 - INFO - app.services.data_initialization - Processed prices for category 1, group 2570 on 2024-03-07 +2025-04-18 15:17:58,521 - INFO - app.services.data_initialization - Processed prices for category 1, group 1645 on 2024-03-07 +2025-04-18 15:17:58,547 - INFO - app.services.data_initialization - Processed prices for category 1, group 23224 on 2024-03-07 +2025-04-18 15:17:58,573 - INFO - app.services.data_initialization - Processed prices for category 1, group 32 on 2024-03-07 +2025-04-18 15:17:58,609 - INFO - app.services.data_initialization - Processed prices for category 1, group 73 on 2024-03-07 +2025-04-18 15:17:58,636 - INFO - app.services.data_initialization - Processed prices for category 1, group 3033 on 2024-03-07 +2025-04-18 15:17:58,679 - INFO - app.services.data_initialization - Processed prices for category 1, group 2965 on 2024-03-07 +2025-04-18 15:17:58,704 - INFO - app.services.data_initialization - Processed prices for category 1, group 1874 on 2024-03-07 +2025-04-18 15:17:58,738 - INFO - app.services.data_initialization - Processed prices for category 1, group 3 on 2024-03-07 +2025-04-18 15:17:58,765 - INFO - app.services.data_initialization - Processed prices for category 1, group 53 on 2024-03-07 +2025-04-18 15:17:58,791 - INFO - app.services.data_initialization - Processed prices for category 1, group 1835 on 2024-03-07 +2025-04-18 15:17:58,817 - INFO - app.services.data_initialization - Processed prices for category 1, group 94 on 2024-03-07 +2025-04-18 15:17:58,850 - INFO - app.services.data_initialization - Processed prices for category 1, group 75 on 2024-03-07 +2025-04-18 15:17:58,907 - INFO - app.services.data_initialization - Processed prices for category 1, group 23020 on 2024-03-07 +2025-04-18 15:17:58,938 - INFO - app.services.data_initialization - Processed prices for category 1, group 1693 on 2024-03-07 +2025-04-18 15:17:58,963 - INFO - app.services.data_initialization - Processed prices for category 1, group 2892 on 2024-03-07 +2025-04-18 15:17:58,996 - INFO - app.services.data_initialization - Processed prices for category 1, group 23363 on 2024-03-07 +2025-04-18 15:17:59,033 - INFO - app.services.data_initialization - Processed prices for category 1, group 59 on 2024-03-07 +2025-04-18 15:17:59,074 - INFO - app.services.data_initialization - Processed prices for category 1, group 2009 on 2024-03-07 +2025-04-18 15:17:59,107 - INFO - app.services.data_initialization - Processed prices for category 1, group 1708 on 2024-03-07 +2025-04-18 15:17:59,132 - INFO - app.services.data_initialization - Processed prices for category 1, group 1475 on 2024-03-07 +2025-04-18 15:17:59,132 - INFO - app.services.data_initialization - Processed prices for category 1, group 14 on 2024-03-07 +2025-04-18 15:17:59,170 - INFO - app.services.data_initialization - Processed prices for category 1, group 2750 on 2024-03-07 +2025-04-18 15:17:59,203 - INFO - app.services.data_initialization - Processed prices for category 1, group 6 on 2024-03-07 +2025-04-18 15:17:59,234 - INFO - app.services.data_initialization - Processed prices for category 1, group 1164 on 2024-03-07 +2025-04-18 15:18:00,227 - INFO - app.services.data_initialization - Processed prices for category 1, group 2576 on 2024-03-07 +2025-04-18 15:18:00,300 - INFO - app.services.data_initialization - Processed prices for category 1, group 3176 on 2024-03-07 +2025-04-18 15:18:00,649 - INFO - app.services.data_initialization - Processed prices for category 1, group 22979 on 2024-03-07 +2025-04-18 15:18:00,809 - INFO - app.services.data_initialization - Processed prices for category 1, group 2967 on 2024-03-07 +2025-04-18 15:18:01,019 - INFO - app.services.data_initialization - Processed prices for category 1, group 2900 on 2024-03-07 +2025-04-18 15:18:01,091 - INFO - app.services.data_initialization - Processed prices for category 1, group 47 on 2024-03-07 +2025-04-18 15:18:01,451 - INFO - app.services.data_initialization - Processed prices for category 1, group 1111 on 2024-03-07 +2025-04-18 15:18:01,808 - INFO - app.services.data_initialization - Processed prices for category 1, group 2050 on 2024-03-07 +2025-04-18 15:18:02,046 - INFO - app.services.data_initialization - Processed prices for category 1, group 23312 on 2024-03-07 +2025-04-18 15:18:02,119 - INFO - app.services.data_initialization - Processed prices for category 1, group 2632 on 2024-03-07 +2025-04-18 15:18:02,357 - INFO - app.services.data_initialization - Processed prices for category 1, group 78 on 2024-03-07 +2025-04-18 15:18:02,419 - INFO - app.services.data_initialization - Processed prices for category 1, group 23448 on 2024-03-07 +2025-04-18 15:18:02,476 - INFO - app.services.data_initialization - Processed prices for category 1, group 119 on 2024-03-07 +2025-04-18 15:18:02,649 - INFO - app.services.data_initialization - Processed prices for category 1, group 2599 on 2024-03-07 +2025-04-18 15:18:02,829 - INFO - app.services.data_initialization - Processed prices for category 1, group 84 on 2024-03-07 +2025-04-18 15:18:03,319 - INFO - app.services.data_initialization - Processed prices for category 1, group 23165 on 2024-03-07 +2025-04-18 15:18:03,595 - INFO - app.services.data_initialization - Processed prices for category 1, group 51 on 2024-03-07 +2025-04-18 15:18:03,760 - INFO - app.services.data_initialization - Processed prices for category 1, group 363 on 2024-03-07 +2025-04-18 15:18:03,836 - INFO - app.services.data_initialization - Processed prices for category 1, group 23447 on 2024-03-07 +2025-04-18 15:18:04,774 - INFO - app.services.data_initialization - Processed prices for category 1, group 1113 on 2024-03-07 +2025-04-18 15:18:05,065 - INFO - app.services.data_initialization - Processed prices for category 1, group 115 on 2024-03-07 +2025-04-18 15:18:05,598 - INFO - app.services.data_initialization - Processed prices for category 1, group 2379 on 2024-03-07 +2025-04-18 15:18:06,617 - INFO - app.services.data_initialization - Processed prices for category 1, group 1879 on 2024-03-07 +2025-04-18 15:18:06,714 - INFO - app.services.data_initialization - Processed prices for category 1, group 2078 on 2024-03-07 +2025-04-18 15:18:06,851 - INFO - app.services.data_initialization - Processed prices for category 1, group 109 on 2024-03-07 +2025-04-18 15:18:06,988 - INFO - app.services.data_initialization - Processed prices for category 1, group 23317 on 2024-03-07 +2025-04-18 15:18:07,305 - INFO - app.services.data_initialization - Processed prices for category 1, group 1497 on 2024-03-07 +2025-04-18 15:18:07,554 - INFO - app.services.data_initialization - Processed prices for category 1, group 10 on 2024-03-07 +2025-04-18 15:18:07,632 - INFO - app.services.data_initialization - Processed prices for category 1, group 568 on 2024-03-07 +2025-04-18 15:18:07,729 - INFO - app.services.data_initialization - Processed prices for category 1, group 1837 on 2024-03-07 +2025-04-18 15:18:07,784 - INFO - app.services.data_initialization - Processed prices for category 1, group 2905 on 2024-03-07 +2025-04-18 15:18:07,861 - INFO - app.services.data_initialization - Processed prices for category 1, group 56 on 2024-03-07 +2025-04-18 15:18:07,861 - INFO - app.services.data_initialization - Processed prices for category 1, group 2712 on 2024-03-07 +2025-04-18 15:18:08,310 - INFO - app.services.data_initialization - Processed prices for category 1, group 1356 on 2024-03-07 +2025-04-18 15:18:08,662 - INFO - app.services.data_initialization - Processed prices for category 1, group 2189 on 2024-03-07 +2025-04-18 15:18:08,726 - INFO - app.services.data_initialization - Processed prices for category 1, group 3054 on 2024-03-07 +2025-04-18 15:18:08,831 - INFO - app.services.data_initialization - Processed prices for category 1, group 1311 on 2024-03-07 +2025-04-18 15:18:09,153 - INFO - app.services.data_initialization - Processed prices for category 1, group 2199 on 2024-03-07 +2025-04-18 15:18:09,355 - INFO - app.services.data_initialization - Processed prices for category 1, group 97 on 2024-03-07 +2025-04-18 15:18:09,498 - INFO - app.services.data_initialization - Processed prices for category 1, group 34 on 2024-03-07 +2025-04-18 15:18:09,498 - INFO - app.services.data_initialization - Processed prices for category 1, group 2572 on 2024-03-07 +2025-04-18 15:18:09,618 - INFO - app.services.data_initialization - Processed prices for category 1, group 1166 on 2024-03-07 +2025-04-18 15:18:09,928 - INFO - app.services.data_initialization - Processed prices for category 1, group 98 on 2024-03-07 +2025-04-18 15:18:10,409 - INFO - app.services.data_initialization - Processed prices for category 1, group 2 on 2024-03-07 +2025-04-18 15:18:10,968 - INFO - app.services.data_initialization - Processed prices for category 1, group 74 on 2024-03-07 +2025-04-18 15:18:11,104 - INFO - app.services.data_initialization - Processed prices for category 1, group 1477 on 2024-03-07 +2025-04-18 15:18:11,104 - INFO - app.services.data_initialization - Processed prices for category 1, group 19 on 2024-03-07 +2025-04-18 15:18:11,232 - INFO - app.services.data_initialization - Processed prices for category 1, group 23099 on 2024-03-07 +2025-04-18 15:18:11,472 - INFO - app.services.data_initialization - Processed prices for category 1, group 1857 on 2024-03-07 +2025-04-18 15:18:11,594 - INFO - app.services.data_initialization - Processed prices for category 1, group 23288 on 2024-03-07 +2025-04-18 15:18:11,756 - INFO - app.services.data_initialization - Processed prices for category 1, group 2802 on 2024-03-07 +2025-04-18 15:18:11,911 - INFO - app.services.data_initialization - Processed prices for category 1, group 65 on 2024-03-07 +2025-04-18 15:18:12,081 - INFO - app.services.data_initialization - Processed prices for category 1, group 23102 on 2024-03-07 +2025-04-18 15:18:12,405 - INFO - app.services.data_initialization - Processed prices for category 1, group 1312 on 2024-03-07 +2025-04-18 15:18:12,597 - INFO - app.services.data_initialization - Processed prices for category 1, group 2822 on 2024-03-07 +2025-04-18 15:18:12,827 - INFO - app.services.data_initialization - Processed prices for category 1, group 5 on 2024-03-07 +2025-04-18 15:18:13,273 - INFO - app.services.data_initialization - Processed prices for category 1, group 2290 on 2024-03-07 +2025-04-18 15:18:13,592 - INFO - app.services.data_initialization - Processed prices for category 1, group 112 on 2024-03-07 +2025-04-18 15:18:13,756 - INFO - app.services.data_initialization - Processed prices for category 1, group 23362 on 2024-03-07 +2025-04-18 15:18:13,944 - INFO - app.services.data_initialization - Processed prices for category 1, group 2893 on 2024-03-07 +2025-04-18 15:18:14,291 - INFO - app.services.data_initialization - Processed prices for category 1, group 1515 on 2024-03-07 +2025-04-18 15:18:14,509 - INFO - app.services.data_initialization - Processed prices for category 1, group 114 on 2024-03-07 +2025-04-18 15:18:14,590 - INFO - app.services.data_initialization - Processed prices for category 1, group 1821 on 2024-03-07 +2025-04-18 15:18:14,786 - INFO - app.services.data_initialization - Processed prices for category 1, group 38 on 2024-03-07 +2025-04-18 15:18:14,913 - INFO - app.services.data_initialization - Processed prices for category 1, group 1145 on 2024-03-07 +2025-04-18 15:18:16,822 - INFO - app.services.data_initialization - Processed prices for category 1, group 2862 on 2024-03-07 +2025-04-18 15:18:16,921 - INFO - app.services.data_initialization - Processed prices for category 1, group 71 on 2024-03-07 +2025-04-18 15:18:17,131 - INFO - app.services.data_initialization - Processed prices for category 1, group 86 on 2024-03-07 +2025-04-18 15:18:17,382 - INFO - app.services.data_initialization - Processed prices for category 1, group 58 on 2024-03-07 +2025-04-18 15:18:17,616 - INFO - app.services.data_initialization - Processed prices for category 1, group 66 on 2024-03-07 +2025-04-18 15:18:17,741 - INFO - app.services.data_initialization - Processed prices for category 1, group 1507 on 2024-03-07 +2025-04-18 15:18:17,963 - INFO - app.services.data_initialization - Processed prices for category 1, group 105 on 2024-03-07 +2025-04-18 15:18:18,165 - INFO - app.services.data_initialization - Processed prices for category 1, group 2714 on 2024-03-07 +2025-04-18 15:18:18,165 - INFO - app.services.data_initialization - Processed prices for category 1, group 2351 on 2024-03-07 +2025-04-18 15:18:18,262 - INFO - app.services.data_initialization - Processed prices for category 1, group 2571 on 2024-03-07 +2025-04-18 15:18:18,362 - INFO - app.services.data_initialization - Processed prices for category 1, group 3178 on 2024-03-07 +2025-04-18 15:18:18,608 - INFO - app.services.data_initialization - Processed prices for category 1, group 2801 on 2024-03-07 +2025-04-18 15:18:18,734 - INFO - app.services.data_initialization - Processed prices for category 1, group 15 on 2024-03-07 +2025-04-18 15:18:18,872 - INFO - app.services.data_initialization - Processed prices for category 1, group 35 on 2024-03-07 +2025-04-18 15:18:19,112 - INFO - app.services.data_initialization - Processed prices for category 1, group 2543 on 2024-03-07 +2025-04-18 15:18:19,383 - INFO - app.services.data_initialization - Processed prices for category 1, group 3031 on 2024-03-07 +2025-04-18 15:18:19,500 - INFO - app.services.data_initialization - Processed prices for category 1, group 1274 on 2024-03-07 +2025-04-18 15:18:19,599 - INFO - app.services.data_initialization - Processed prices for category 1, group 1765 on 2024-03-07 +2025-04-18 15:18:19,896 - INFO - app.services.data_initialization - Processed prices for category 1, group 100 on 2024-03-07 +2025-04-18 15:18:20,236 - INFO - app.services.data_initialization - Processed prices for category 1, group 1740 on 2024-03-07 +2025-04-18 15:18:20,331 - INFO - app.services.data_initialization - Processed prices for category 1, group 106 on 2024-03-07 +2025-04-18 15:18:21,277 - INFO - app.services.data_initialization - Processed prices for category 1, group 2198 on 2024-03-07 +2025-04-18 15:18:21,462 - INFO - app.services.data_initialization - Processed prices for category 1, group 3048 on 2024-03-07 +2025-04-18 15:18:21,855 - INFO - app.services.data_initialization - Processed prices for category 1, group 102 on 2024-03-07 +2025-04-18 15:18:21,941 - INFO - app.services.data_initialization - Processed prices for category 1, group 50 on 2024-03-07 +2025-04-18 15:18:22,358 - INFO - app.services.data_initialization - Processed prices for category 1, group 1882 on 2024-03-07 +2025-04-18 15:18:22,512 - INFO - app.services.data_initialization - Processed prices for category 1, group 601 on 2024-03-07 +2025-04-18 15:18:22,737 - INFO - app.services.data_initialization - Processed prices for category 1, group 43 on 2024-03-07 +2025-04-18 15:18:22,825 - INFO - app.services.data_initialization - Processed prices for category 1, group 368 on 2024-03-07 +2025-04-18 15:18:22,925 - INFO - app.services.data_initialization - Processed prices for category 1, group 1649 on 2024-03-07 +2025-04-18 15:18:23,070 - INFO - app.services.data_initialization - Processed prices for category 1, group 22933 on 2024-03-07 +2025-04-18 15:18:23,590 - INFO - app.services.data_initialization - Processed prices for category 1, group 2653 on 2024-03-07 +2025-04-18 15:18:23,936 - INFO - app.services.data_initialization - Processed prices for category 1, group 3102 on 2024-03-07 +2025-04-18 15:18:24,030 - INFO - app.services.data_initialization - Processed prices for category 1, group 49 on 2024-03-07 +2025-04-18 15:18:24,156 - INFO - app.services.data_initialization - Processed prices for category 1, group 13 on 2024-03-07 +2025-04-18 15:18:24,578 - INFO - app.services.data_initialization - Processed prices for category 1, group 68 on 2024-03-07 +2025-04-18 15:18:25,875 - INFO - app.services.data_initialization - Processed prices for category 1, group 2870 on 2024-03-07 +2025-04-18 15:18:26,748 - INFO - app.services.data_initialization - Processed prices for category 1, group 12 on 2024-03-07 +2025-04-18 15:18:27,328 - INFO - app.services.data_initialization - Processed prices for category 1, group 2494 on 2024-03-07 +2025-04-18 15:18:27,523 - INFO - app.services.data_initialization - Processed prices for category 1, group 111 on 2024-03-07 +2025-04-18 15:18:27,752 - INFO - app.services.data_initialization - Processed prices for category 1, group 27 on 2024-03-07 +2025-04-18 15:18:27,923 - INFO - app.services.data_initialization - Processed prices for category 1, group 2968 on 2024-03-07 +2025-04-18 15:18:28,198 - INFO - app.services.data_initialization - Processed prices for category 1, group 23361 on 2024-03-07 +2025-04-18 15:18:28,298 - INFO - app.services.data_initialization - Processed prices for category 1, group 1909 on 2024-03-07 +2025-04-18 15:18:28,461 - INFO - app.services.data_initialization - Processed prices for category 1, group 2717 on 2024-03-07 +2025-04-18 15:18:28,461 - INFO - app.services.data_initialization - Processed prices for category 1, group 1689 on 2024-03-07 +2025-04-18 15:18:28,847 - INFO - app.services.data_initialization - Processed prices for category 1, group 17666 on 2024-03-07 +2025-04-18 15:18:29,099 - INFO - app.services.data_initialization - Processed prices for category 1, group 18 on 2024-03-07 +2025-04-18 15:18:29,278 - INFO - app.services.data_initialization - Processed prices for category 1, group 101 on 2024-03-07 +2025-04-18 15:18:29,411 - INFO - app.services.data_initialization - Processed prices for category 1, group 3159 on 2024-03-07 +2025-04-18 15:18:29,506 - INFO - app.services.data_initialization - Processed prices for category 1, group 1832 on 2024-03-07 +2025-04-18 15:18:32,937 - INFO - app.services.data_initialization - Processed prices for category 1, group 2246 on 2024-03-07 +2025-04-18 15:18:33,162 - INFO - app.services.data_initialization - Processed prices for category 1, group 2716 on 2024-03-07 +2025-04-18 15:18:33,569 - INFO - app.services.data_initialization - Processed prices for category 1, group 570 on 2024-03-07 +2025-04-18 15:18:33,903 - INFO - app.services.data_initialization - Processed prices for category 1, group 118 on 2024-03-07 +2025-04-18 15:18:34,135 - INFO - app.services.data_initialization - Processed prices for category 1, group 22989 on 2024-03-07 +2025-04-18 15:18:34,564 - INFO - app.services.data_initialization - Processed prices for category 1, group 1794 on 2024-03-07 +2025-04-18 15:18:34,751 - INFO - app.services.data_initialization - Processed prices for category 1, group 23025 on 2024-03-07 +2025-04-18 15:18:35,041 - INFO - app.services.data_initialization - Processed prices for category 1, group 120 on 2024-03-07 +2025-04-18 15:18:35,736 - INFO - app.services.data_initialization - Processed prices for category 1, group 370 on 2024-03-07 +2025-04-18 15:18:36,138 - INFO - app.services.data_initialization - Processed prices for category 1, group 77 on 2024-03-07 +2025-04-18 15:18:36,251 - INFO - app.services.data_initialization - Processed prices for category 1, group 2444 on 2024-03-07 +2025-04-18 15:18:36,251 - INFO - app.services.data_initialization - Processed prices for category 1, group 3100 on 2024-03-07 +2025-04-18 15:18:36,387 - INFO - app.services.data_initialization - Processed prices for category 1, group 2376 on 2024-03-07 +2025-04-18 15:18:36,653 - INFO - app.services.data_initialization - Processed prices for category 1, group 23223 on 2024-03-07 +2025-04-18 15:18:37,085 - INFO - app.services.data_initialization - Processed prices for category 1, group 46 on 2024-03-07 +2025-04-18 15:18:37,224 - INFO - app.services.data_initialization - Processed prices for category 1, group 104 on 2024-03-07 +2025-04-18 15:18:37,482 - INFO - app.services.data_initialization - Processed prices for category 1, group 2766 on 2024-03-07 +2025-04-18 15:18:38,046 - INFO - app.services.data_initialization - Processed prices for category 1, group 2654 on 2024-03-07 +2025-04-18 15:18:39,121 - INFO - app.services.data_initialization - Processed prices for category 1, group 3079 on 2024-03-07 +2025-04-18 15:18:39,915 - INFO - app.services.data_initialization - Processed prices for category 1, group 1793 on 2024-03-07 +2025-04-18 15:18:40,554 - INFO - app.services.data_initialization - Processed prices for category 1, group 3140 on 2024-03-07 +2025-04-18 15:18:40,705 - INFO - app.services.data_initialization - Processed prices for category 1, group 2699 on 2024-03-07 +2025-04-18 15:18:41,723 - INFO - app.services.data_initialization - Processed prices for category 1, group 2772 on 2024-03-07 +2025-04-18 15:18:43,393 - INFO - app.services.data_initialization - Processed prices for category 1, group 364 on 2024-03-07 +2025-04-18 15:18:43,647 - INFO - app.services.data_initialization - Processed prices for category 1, group 85 on 2024-03-07 +2025-04-18 15:18:44,934 - INFO - app.services.data_initialization - Processed prices for category 1, group 2603 on 2024-03-07 +2025-04-18 15:18:45,045 - INFO - app.services.data_initialization - Processed prices for category 1, group 1141 on 2024-03-07 +2025-04-18 15:18:45,159 - INFO - app.services.data_initialization - Processed prices for category 1, group 1275 on 2024-03-07 +2025-04-18 15:18:45,908 - INFO - app.services.data_initialization - Processed prices for category 1, group 2708 on 2024-03-07 +2025-04-18 15:18:46,085 - INFO - app.services.data_initialization - Processed prices for category 1, group 22 on 2024-03-07 +2025-04-18 15:18:46,174 - INFO - app.services.data_initialization - Processed prices for category 1, group 23446 on 2024-03-07 +2025-04-18 15:18:46,272 - INFO - app.services.data_initialization - Processed prices for category 1, group 48 on 2024-03-07 +2025-04-18 15:18:46,493 - INFO - app.services.data_initialization - Processed prices for category 1, group 23163 on 2024-03-07 +2025-04-18 15:18:46,596 - INFO - app.services.data_initialization - Processed prices for category 1, group 23439 on 2024-03-07 +2025-04-18 15:18:46,808 - INFO - app.services.data_initialization - Processed prices for category 1, group 116 on 2024-03-07 +2025-04-18 15:18:46,930 - INFO - app.services.data_initialization - Processed prices for category 1, group 23443 on 2024-03-07 +2025-04-18 15:18:47,237 - INFO - app.services.data_initialization - Processed prices for category 1, group 1527 on 2024-03-07 +2025-04-18 15:18:47,497 - INFO - app.services.data_initialization - Processed prices for category 1, group 2251 on 2024-03-07 +2025-04-18 15:18:47,595 - INFO - app.services.data_initialization - Processed prices for category 1, group 23442 on 2024-03-07 +2025-04-18 15:18:47,826 - INFO - app.services.data_initialization - Processed prices for category 1, group 2898 on 2024-03-07 +2025-04-18 15:18:48,408 - INFO - app.services.data_initialization - Processed prices for category 1, group 3026 on 2024-03-07 +2025-04-18 15:18:48,621 - INFO - app.services.data_initialization - Processed prices for category 1, group 2806 on 2024-03-07 +2025-04-18 15:18:48,877 - INFO - app.services.data_initialization - Processed prices for category 1, group 1526 on 2024-03-07 +2025-04-18 15:18:49,050 - INFO - app.services.data_initialization - Processed prices for category 1, group 367 on 2024-03-07 +2025-04-18 15:18:49,173 - INFO - app.services.data_initialization - Processed prices for category 1, group 1511 on 2024-03-07 +2025-04-18 15:18:49,272 - INFO - app.services.data_initialization - Processed prices for category 1, group 2742 on 2024-03-07 +2025-04-18 15:18:49,377 - INFO - app.services.data_initialization - Processed prices for category 1, group 23318 on 2024-03-07 +2025-04-18 15:18:49,703 - INFO - app.services.data_initialization - Processed prices for category 1, group 79 on 2024-03-07 +2025-04-18 15:18:49,704 - INFO - app.services.data_initialization - Processed prices for category 1, group 2778 on 2024-03-07 +2025-04-18 15:18:49,797 - INFO - app.services.data_initialization - Processed prices for category 1, group 2642 on 2024-03-07 +2025-04-18 15:18:50,340 - INFO - app.services.data_initialization - Processed prices for category 1, group 2823 on 2024-03-07 +2025-04-18 15:18:50,438 - INFO - app.services.data_initialization - Processed prices for category 1, group 2203 on 2024-03-07 +2025-04-18 15:18:50,516 - INFO - app.services.data_initialization - Processed prices for category 1, group 2899 on 2024-03-07 +2025-04-18 15:18:50,960 - INFO - app.services.data_initialization - Processed prices for category 1, group 2250 on 2024-03-07 +2025-04-18 15:18:51,301 - INFO - app.services.data_initialization - Processed prices for category 1, group 2477 on 2024-03-07 +2025-04-18 15:18:51,578 - INFO - app.services.data_initialization - Processed prices for category 1, group 99 on 2024-03-07 +2025-04-18 15:18:51,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 2359 on 2024-03-07 +2025-04-18 15:18:51,709 - INFO - app.services.data_initialization - Processed prices for category 1, group 1690 on 2024-03-07 +2025-04-18 15:18:51,898 - INFO - app.services.data_initialization - Processed prices for category 1, group 41 on 2024-03-07 +2025-04-18 15:18:51,994 - INFO - app.services.data_initialization - Processed prices for category 1, group 61 on 2024-03-07 +2025-04-18 15:18:53,435 - INFO - app.services.data_initialization - Processed prices for category 1, group 23071 on 2024-03-07 +2025-04-18 15:18:54,135 - INFO - app.services.data_initialization - Processed prices for category 1, group 17664 on 2024-03-07 +2025-04-18 15:18:54,273 - INFO - app.services.data_initialization - Processed prices for category 1, group 8 on 2024-03-07 +2025-04-18 15:18:54,941 - INFO - app.services.data_initialization - Processed prices for category 1, group 4 on 2024-03-07 +2025-04-18 15:18:55,688 - INFO - app.services.data_initialization - Processed prices for category 1, group 2809 on 2024-03-07 +2025-04-18 15:18:55,870 - INFO - app.services.data_initialization - Processed prices for category 1, group 2388 on 2024-03-07 +2025-04-18 15:18:56,115 - INFO - app.services.data_initialization - Processed prices for category 1, group 17 on 2024-03-07 +2025-04-18 15:18:56,212 - INFO - app.services.data_initialization - Processed prices for category 1, group 91 on 2024-03-07 +2025-04-18 15:18:56,530 - INFO - app.services.data_initialization - Processed prices for category 1, group 1933 on 2024-03-07 +2025-04-18 15:18:57,062 - INFO - app.services.data_initialization - Processed prices for category 1, group 2422 on 2024-03-07 +2025-04-18 15:18:57,264 - INFO - app.services.data_initialization - Processed prices for category 1, group 23342 on 2024-03-07 +2025-04-18 15:18:57,465 - INFO - app.services.data_initialization - Processed prices for category 1, group 17685 on 2024-03-07 +2025-04-18 15:18:57,612 - INFO - app.services.data_initialization - Processed prices for category 1, group 2868 on 2024-03-07 +2025-04-18 15:18:57,754 - INFO - app.services.data_initialization - Processed prices for category 1, group 23166 on 2024-03-07 +2025-04-18 15:18:57,904 - INFO - app.services.data_initialization - Processed prices for category 1, group 2077 on 2024-03-07 +2025-04-18 15:18:58,062 - INFO - app.services.data_initialization - Processed prices for category 1, group 2902 on 2024-03-07 +2025-04-18 15:18:58,232 - INFO - app.services.data_initialization - Processed prices for category 1, group 33 on 2024-03-07 +2025-04-18 15:18:58,315 - INFO - app.services.data_initialization - Processed prices for category 1, group 9 on 2024-03-07 +2025-04-18 15:18:58,437 - INFO - app.services.data_initialization - Processed prices for category 1, group 1346 on 2024-03-07 +2025-04-18 15:18:58,535 - INFO - app.services.data_initialization - Processed prices for category 1, group 90 on 2024-03-07 +2025-04-18 15:18:58,639 - INFO - app.services.data_initialization - Processed prices for category 1, group 23109 on 2024-03-07 +2025-04-18 15:18:58,751 - INFO - app.services.data_initialization - Processed prices for category 1, group 2045 on 2024-03-07 +2025-04-18 15:18:59,173 - INFO - app.services.data_initialization - Processed prices for category 1, group 2418 on 2024-03-07 +2025-04-18 15:18:59,330 - INFO - app.services.data_initialization - Processed prices for category 1, group 2869 on 2024-03-07 +2025-04-18 15:18:59,465 - INFO - app.services.data_initialization - Processed prices for category 1, group 2307 on 2024-03-07 +2025-04-18 15:18:59,656 - INFO - app.services.data_initialization - Processed prices for category 1, group 62 on 2024-03-07 +2025-04-18 15:18:59,987 - INFO - app.services.data_initialization - Processed prices for category 3, group 2420 on 2024-03-07 +2025-04-18 15:19:00,229 - INFO - app.services.data_initialization - Processed prices for category 3, group 1390 on 2024-03-07 +2025-04-18 15:19:00,467 - INFO - app.services.data_initialization - Processed prices for category 3, group 1444 on 2024-03-07 +2025-04-18 15:19:00,581 - INFO - app.services.data_initialization - Processed prices for category 3, group 3068 on 2024-03-07 +2025-04-18 15:19:00,657 - INFO - app.services.data_initialization - Processed prices for category 3, group 2069 on 2024-03-07 +2025-04-18 15:19:00,989 - INFO - app.services.data_initialization - Processed prices for category 3, group 23237 on 2024-03-07 +2025-04-18 15:19:01,117 - INFO - app.services.data_initialization - Processed prices for category 3, group 1796 on 2024-03-07 +2025-04-18 15:19:01,299 - INFO - app.services.data_initialization - Processed prices for category 3, group 1399 on 2024-03-07 +2025-04-18 15:19:01,395 - INFO - app.services.data_initialization - Processed prices for category 3, group 1522 on 2024-03-07 +2025-04-18 15:19:01,505 - INFO - app.services.data_initialization - Processed prices for category 3, group 1453 on 2024-03-07 +2025-04-18 15:19:01,709 - INFO - app.services.data_initialization - Processed prices for category 3, group 1434 on 2024-03-07 +2025-04-18 15:19:01,833 - INFO - app.services.data_initialization - Processed prices for category 3, group 2594 on 2024-03-07 +2025-04-18 15:19:02,027 - INFO - app.services.data_initialization - Processed prices for category 3, group 1404 on 2024-03-07 +2025-04-18 15:19:02,363 - INFO - app.services.data_initialization - Processed prices for category 3, group 2948 on 2024-03-07 +2025-04-18 15:19:06,727 - INFO - app.services.data_initialization - Processed prices for category 3, group 1392 on 2024-03-07 +2025-04-18 15:19:08,297 - INFO - app.services.data_initialization - Processed prices for category 3, group 1450 on 2024-03-07 +2025-04-18 15:19:10,084 - INFO - app.services.data_initialization - Processed prices for category 3, group 1509 on 2024-03-07 +2025-04-18 15:19:10,413 - INFO - app.services.data_initialization - Processed prices for category 3, group 1418 on 2024-03-07 +2025-04-18 15:19:11,494 - INFO - app.services.data_initialization - Processed prices for category 3, group 23095 on 2024-03-07 +2025-04-18 15:19:11,976 - INFO - app.services.data_initialization - Processed prices for category 3, group 1386 on 2024-03-07 +2025-04-18 15:19:12,081 - INFO - app.services.data_initialization - Processed prices for category 3, group 1433 on 2024-03-07 +2025-04-18 15:19:12,175 - INFO - app.services.data_initialization - Processed prices for category 3, group 1439 on 2024-03-07 +2025-04-18 15:19:12,436 - INFO - app.services.data_initialization - Processed prices for category 3, group 1441 on 2024-03-07 +2025-04-18 15:19:12,636 - INFO - app.services.data_initialization - Processed prices for category 3, group 1370 on 2024-03-07 +2025-04-18 15:19:12,848 - INFO - app.services.data_initialization - Processed prices for category 3, group 1368 on 2024-03-07 +2025-04-18 15:19:13,075 - INFO - app.services.data_initialization - Processed prices for category 3, group 1391 on 2024-03-07 +2025-04-18 15:19:13,375 - INFO - app.services.data_initialization - Processed prices for category 3, group 2545 on 2024-03-07 +2025-04-18 15:19:13,571 - INFO - app.services.data_initialization - Processed prices for category 3, group 1464 on 2024-03-07 +2025-04-18 15:19:13,682 - INFO - app.services.data_initialization - Processed prices for category 3, group 3150 on 2024-03-07 +2025-04-18 15:19:13,793 - INFO - app.services.data_initialization - Processed prices for category 3, group 1455 on 2024-03-07 +2025-04-18 15:19:13,953 - INFO - app.services.data_initialization - Processed prices for category 3, group 1442 on 2024-03-07 +2025-04-18 15:19:14,244 - INFO - app.services.data_initialization - Processed prices for category 3, group 1417 on 2024-03-07 +2025-04-18 15:19:14,491 - INFO - app.services.data_initialization - Processed prices for category 3, group 1957 on 2024-03-07 +2025-04-18 15:19:14,746 - INFO - app.services.data_initialization - Processed prices for category 3, group 23353 on 2024-03-07 +2025-04-18 15:19:14,960 - INFO - app.services.data_initialization - Processed prices for category 3, group 1397 on 2024-03-07 +2025-04-18 15:19:15,065 - INFO - app.services.data_initialization - Processed prices for category 3, group 2208 on 2024-03-07 +2025-04-18 15:19:15,238 - INFO - app.services.data_initialization - Processed prices for category 3, group 2295 on 2024-03-07 +2025-04-18 15:19:15,892 - INFO - app.services.data_initialization - Processed prices for category 3, group 1532 on 2024-03-07 +2025-04-18 15:19:16,132 - INFO - app.services.data_initialization - Processed prices for category 3, group 1387 on 2024-03-07 +2025-04-18 15:19:16,387 - INFO - app.services.data_initialization - Processed prices for category 3, group 1451 on 2024-03-07 +2025-04-18 15:19:16,521 - INFO - app.services.data_initialization - Processed prices for category 3, group 1465 on 2024-03-07 +2025-04-18 15:19:16,635 - INFO - app.services.data_initialization - Processed prices for category 3, group 2205 on 2024-03-07 +2025-04-18 15:19:16,907 - INFO - app.services.data_initialization - Processed prices for category 3, group 17688 on 2024-03-07 +2025-04-18 15:19:17,206 - INFO - app.services.data_initialization - Processed prices for category 3, group 2377 on 2024-03-07 +2025-04-18 15:19:17,483 - INFO - app.services.data_initialization - Processed prices for category 3, group 1840 on 2024-03-07 +2025-04-18 15:19:17,692 - INFO - app.services.data_initialization - Processed prices for category 3, group 1402 on 2024-03-07 +2025-04-18 15:19:17,890 - INFO - app.services.data_initialization - Processed prices for category 3, group 1393 on 2024-03-07 +2025-04-18 15:19:18,036 - INFO - app.services.data_initialization - Processed prices for category 3, group 2781 on 2024-03-07 +2025-04-18 15:19:18,192 - INFO - app.services.data_initialization - Processed prices for category 3, group 604 on 2024-03-07 +2025-04-18 15:19:18,352 - INFO - app.services.data_initialization - Processed prices for category 3, group 2289 on 2024-03-07 +2025-04-18 15:19:18,599 - INFO - app.services.data_initialization - Processed prices for category 3, group 1494 on 2024-03-07 +2025-04-18 15:19:18,599 - INFO - app.services.data_initialization - Processed prices for category 3, group 610 on 2024-03-07 +2025-04-18 15:19:18,683 - INFO - app.services.data_initialization - Processed prices for category 3, group 23381 on 2024-03-07 +2025-04-18 15:19:18,806 - INFO - app.services.data_initialization - Processed prices for category 3, group 1533 on 2024-03-07 +2025-04-18 15:19:19,033 - INFO - app.services.data_initialization - Processed prices for category 3, group 1381 on 2024-03-07 +2025-04-18 15:19:19,275 - INFO - app.services.data_initialization - Processed prices for category 3, group 1701 on 2024-03-07 +2025-04-18 15:19:19,441 - INFO - app.services.data_initialization - Processed prices for category 3, group 2054 on 2024-03-07 +2025-04-18 15:19:19,601 - INFO - app.services.data_initialization - Processed prices for category 3, group 1411 on 2024-03-07 +2025-04-18 15:19:19,947 - INFO - app.services.data_initialization - Processed prices for category 3, group 1396 on 2024-03-07 +2025-04-18 15:19:20,310 - INFO - app.services.data_initialization - Processed prices for category 3, group 1410 on 2024-03-07 +2025-04-18 15:19:20,747 - INFO - app.services.data_initialization - Processed prices for category 3, group 2534 on 2024-03-07 +2025-04-18 15:19:21,322 - INFO - app.services.data_initialization - Processed prices for category 3, group 22880 on 2024-03-07 +2025-04-18 15:19:21,423 - INFO - app.services.data_initialization - Processed prices for category 3, group 1540 on 2024-03-07 +2025-04-18 15:19:22,711 - INFO - app.services.data_initialization - Processed prices for category 3, group 1408 on 2024-03-07 +2025-04-18 15:19:22,922 - INFO - app.services.data_initialization - Processed prices for category 3, group 1538 on 2024-03-07 +2025-04-18 15:19:23,687 - INFO - app.services.data_initialization - Processed prices for category 3, group 2754 on 2024-03-07 +2025-04-18 15:19:23,911 - INFO - app.services.data_initialization - Processed prices for category 3, group 1440 on 2024-03-07 +2025-04-18 15:19:24,245 - INFO - app.services.data_initialization - Processed prices for category 3, group 2675 on 2024-03-07 +2025-04-18 15:19:24,494 - INFO - app.services.data_initialization - Processed prices for category 3, group 1815 on 2024-03-07 +2025-04-18 15:19:24,712 - INFO - app.services.data_initialization - Processed prices for category 3, group 1412 on 2024-03-07 +2025-04-18 15:19:24,854 - INFO - app.services.data_initialization - Processed prices for category 3, group 1389 on 2024-03-07 +2025-04-18 15:19:24,953 - INFO - app.services.data_initialization - Processed prices for category 3, group 1536 on 2024-03-07 +2025-04-18 15:19:25,124 - INFO - app.services.data_initialization - Processed prices for category 3, group 1378 on 2024-03-07 +2025-04-18 15:19:25,291 - INFO - app.services.data_initialization - Processed prices for category 3, group 1395 on 2024-03-07 +2025-04-18 15:19:25,581 - INFO - app.services.data_initialization - Processed prices for category 3, group 1919 on 2024-03-07 +2025-04-18 15:19:25,778 - INFO - app.services.data_initialization - Processed prices for category 3, group 1528 on 2024-03-07 +2025-04-18 15:19:26,151 - INFO - app.services.data_initialization - Processed prices for category 3, group 2464 on 2024-03-07 +2025-04-18 15:19:26,242 - INFO - app.services.data_initialization - Processed prices for category 3, group 17674 on 2024-03-07 +2025-04-18 15:19:26,665 - INFO - app.services.data_initialization - Processed prices for category 3, group 2906 on 2024-03-07 +2025-04-18 15:19:26,890 - INFO - app.services.data_initialization - Processed prices for category 3, group 1383 on 2024-03-07 +2025-04-18 15:19:27,058 - INFO - app.services.data_initialization - Processed prices for category 3, group 605 on 2024-03-07 +2025-04-18 15:19:27,243 - INFO - app.services.data_initialization - Processed prices for category 3, group 635 on 2024-03-07 +2025-04-18 15:19:27,553 - INFO - app.services.data_initialization - Processed prices for category 3, group 2278 on 2024-03-07 +2025-04-18 15:19:27,705 - INFO - app.services.data_initialization - Processed prices for category 3, group 2782 on 2024-03-07 +2025-04-18 15:19:27,705 - INFO - app.services.data_initialization - Processed prices for category 3, group 609 on 2024-03-07 +2025-04-18 15:19:27,825 - INFO - app.services.data_initialization - Processed prices for category 3, group 2148 on 2024-03-07 +2025-04-18 15:19:27,962 - INFO - app.services.data_initialization - Processed prices for category 3, group 1421 on 2024-03-07 +2025-04-18 15:19:28,297 - INFO - app.services.data_initialization - Processed prices for category 3, group 2209 on 2024-03-07 +2025-04-18 15:19:28,473 - INFO - app.services.data_initialization - Processed prices for category 3, group 22872 on 2024-03-07 +2025-04-18 15:19:28,587 - INFO - app.services.data_initialization - Processed prices for category 3, group 2931 on 2024-03-07 +2025-04-18 15:19:28,691 - INFO - app.services.data_initialization - Processed prices for category 3, group 1427 on 2024-03-07 +2025-04-18 15:19:29,006 - INFO - app.services.data_initialization - Processed prices for category 3, group 1661 on 2024-03-07 +2025-04-18 15:19:29,250 - INFO - app.services.data_initialization - Processed prices for category 3, group 1780 on 2024-03-07 +2025-04-18 15:19:29,493 - INFO - app.services.data_initialization - Processed prices for category 3, group 1379 on 2024-03-07 +2025-04-18 15:19:29,722 - INFO - app.services.data_initialization - Processed prices for category 3, group 1728 on 2024-03-07 +2025-04-18 15:19:30,062 - INFO - app.services.data_initialization - Processed prices for category 3, group 2328 on 2024-03-07 +2025-04-18 15:19:30,189 - INFO - app.services.data_initialization - Processed prices for category 3, group 23266 on 2024-03-07 +2025-04-18 15:19:30,402 - INFO - app.services.data_initialization - Processed prices for category 3, group 1405 on 2024-03-07 +2025-04-18 15:19:30,631 - INFO - app.services.data_initialization - Processed prices for category 3, group 1385 on 2024-03-07 +2025-04-18 15:19:30,904 - INFO - app.services.data_initialization - Processed prices for category 3, group 23120 on 2024-03-07 +2025-04-18 15:19:31,020 - INFO - app.services.data_initialization - Processed prices for category 3, group 648 on 2024-03-07 +2025-04-18 15:19:31,175 - INFO - app.services.data_initialization - Processed prices for category 3, group 2685 on 2024-03-07 +2025-04-18 15:19:31,500 - INFO - app.services.data_initialization - Processed prices for category 3, group 2626 on 2024-03-07 +2025-04-18 15:19:31,724 - INFO - app.services.data_initialization - Processed prices for category 3, group 1432 on 2024-03-07 +2025-04-18 15:19:33,510 - INFO - app.services.data_initialization - Processed prices for category 3, group 1424 on 2024-03-07 +2025-04-18 15:19:33,855 - INFO - app.services.data_initialization - Processed prices for category 3, group 3051 on 2024-03-07 +2025-04-18 15:19:34,201 - INFO - app.services.data_initialization - Processed prices for category 3, group 2686 on 2024-03-07 +2025-04-18 15:19:34,358 - INFO - app.services.data_initialization - Processed prices for category 3, group 1525 on 2024-03-07 +2025-04-18 15:19:34,492 - INFO - app.services.data_initialization - Processed prices for category 3, group 23306 on 2024-03-07 +2025-04-18 15:19:34,804 - INFO - app.services.data_initialization - Processed prices for category 3, group 23286 on 2024-03-07 +2025-04-18 15:19:35,076 - INFO - app.services.data_initialization - Processed prices for category 3, group 1380 on 2024-03-07 +2025-04-18 15:19:35,225 - INFO - app.services.data_initialization - Processed prices for category 3, group 1729 on 2024-03-07 +2025-04-18 15:19:35,462 - INFO - app.services.data_initialization - Processed prices for category 3, group 1429 on 2024-03-07 +2025-04-18 15:19:35,590 - INFO - app.services.data_initialization - Processed prices for category 3, group 1543 on 2024-03-07 +2025-04-18 15:19:35,764 - INFO - app.services.data_initialization - Processed prices for category 3, group 1374 on 2024-03-07 +2025-04-18 15:19:36,019 - INFO - app.services.data_initialization - Processed prices for category 3, group 1481 on 2024-03-07 +2025-04-18 15:19:36,297 - INFO - app.services.data_initialization - Processed prices for category 3, group 1400 on 2024-03-07 +2025-04-18 15:19:36,534 - INFO - app.services.data_initialization - Processed prices for category 3, group 1416 on 2024-03-07 +2025-04-18 15:19:36,658 - INFO - app.services.data_initialization - Processed prices for category 3, group 1414 on 2024-03-07 +2025-04-18 15:19:36,916 - INFO - app.services.data_initialization - Processed prices for category 3, group 1419 on 2024-03-07 +2025-04-18 15:19:37,135 - INFO - app.services.data_initialization - Processed prices for category 3, group 1415 on 2024-03-07 +2025-04-18 15:19:37,457 - INFO - app.services.data_initialization - Processed prices for category 3, group 2848 on 2024-03-07 +2025-04-18 15:19:37,532 - INFO - app.services.data_initialization - Processed prices for category 3, group 2364 on 2024-03-07 +2025-04-18 15:19:37,975 - INFO - app.services.data_initialization - Processed prices for category 3, group 2585 on 2024-03-07 +2025-04-18 15:19:38,363 - INFO - app.services.data_initialization - Processed prices for category 3, group 1372 on 2024-03-07 +2025-04-18 15:19:38,668 - INFO - app.services.data_initialization - Processed prices for category 3, group 1369 on 2024-03-07 +2025-04-18 15:19:38,933 - INFO - app.services.data_initialization - Processed prices for category 3, group 1842 on 2024-03-07 +2025-04-18 15:19:39,250 - INFO - app.services.data_initialization - Processed prices for category 3, group 1534 on 2024-03-07 +2025-04-18 15:19:39,418 - INFO - app.services.data_initialization - Processed prices for category 3, group 2867 on 2024-03-07 +2025-04-18 15:19:39,729 - INFO - app.services.data_initialization - Processed prices for category 3, group 1375 on 2024-03-07 +2025-04-18 15:19:39,992 - INFO - app.services.data_initialization - Processed prices for category 3, group 1377 on 2024-03-07 +2025-04-18 15:19:40,232 - INFO - app.services.data_initialization - Processed prices for category 3, group 1398 on 2024-03-07 +2025-04-18 15:19:40,517 - INFO - app.services.data_initialization - Processed prices for category 3, group 1382 on 2024-03-07 +2025-04-18 15:19:40,761 - INFO - app.services.data_initialization - Processed prices for category 3, group 1376 on 2024-03-07 +2025-04-18 15:19:41,004 - INFO - app.services.data_initialization - Processed prices for category 3, group 1428 on 2024-03-07 +2025-04-18 15:19:41,138 - INFO - app.services.data_initialization - Processed prices for category 3, group 3179 on 2024-03-07 +2025-04-18 15:19:41,412 - INFO - app.services.data_initialization - Processed prices for category 3, group 1863 on 2024-03-07 +2025-04-18 15:19:41,521 - INFO - app.services.data_initialization - Processed prices for category 3, group 1426 on 2024-03-07 +2025-04-18 15:19:42,506 - INFO - app.services.data_initialization - Processed prices for category 3, group 2282 on 2024-03-07 +2025-04-18 15:19:42,616 - INFO - app.services.data_initialization - Processed prices for category 3, group 23330 on 2024-03-07 +2025-04-18 15:19:42,927 - INFO - app.services.data_initialization - Processed prices for category 3, group 1576 on 2024-03-07 +2025-04-18 15:19:43,624 - INFO - app.services.data_initialization - Processed prices for category 3, group 2175 on 2024-03-07 +2025-04-18 15:19:43,801 - INFO - app.services.data_initialization - Processed prices for category 3, group 1853 on 2024-03-07 +2025-04-18 15:19:44,069 - INFO - app.services.data_initialization - Processed prices for category 3, group 1542 on 2024-03-07 +2025-04-18 15:19:44,850 - INFO - app.services.data_initialization - Processed prices for category 3, group 1403 on 2024-03-07 +2025-04-18 15:19:45,417 - INFO - app.services.data_initialization - Processed prices for category 3, group 1394 on 2024-03-07 +2025-04-18 15:19:45,719 - INFO - app.services.data_initialization - Processed prices for category 3, group 2701 on 2024-03-07 +2025-04-18 15:19:46,031 - INFO - app.services.data_initialization - Processed prices for category 3, group 1409 on 2024-03-07 +2025-04-18 15:19:46,180 - INFO - app.services.data_initialization - Processed prices for category 3, group 1446 on 2024-03-07 +2025-04-18 15:19:46,331 - INFO - app.services.data_initialization - Processed prices for category 3, group 1422 on 2024-03-07 +2025-04-18 15:19:46,501 - INFO - app.services.data_initialization - Processed prices for category 3, group 1373 on 2024-03-07 +2025-04-18 15:19:47,396 - INFO - app.services.data_initialization - Processed prices for category 3, group 2178 on 2024-03-07 +2025-04-18 15:19:47,625 - INFO - app.services.data_initialization - Processed prices for category 3, group 3040 on 2024-03-07 +2025-04-18 15:19:47,848 - INFO - app.services.data_initialization - Processed prices for category 3, group 2071 on 2024-03-07 +2025-04-18 15:19:47,949 - INFO - app.services.data_initialization - Processed prices for category 3, group 2776 on 2024-03-07 +2025-04-18 15:19:48,244 - INFO - app.services.data_initialization - Processed prices for category 3, group 1413 on 2024-03-07 +2025-04-18 15:19:48,557 - INFO - app.services.data_initialization - Processed prices for category 3, group 22873 on 2024-03-07 +2025-04-18 15:19:48,689 - INFO - app.services.data_initialization - Processed prices for category 3, group 23323 on 2024-03-07 +2025-04-18 15:19:48,817 - INFO - app.services.data_initialization - Processed prices for category 3, group 3172 on 2024-03-07 +2025-04-18 15:19:48,955 - INFO - app.services.data_initialization - Processed prices for category 3, group 2214 on 2024-03-07 +2025-04-18 15:19:49,219 - INFO - app.services.data_initialization - Processed prices for category 3, group 1663 on 2024-03-07 +2025-04-18 15:19:49,526 - INFO - app.services.data_initialization - Processed prices for category 3, group 1367 on 2024-03-07 +2025-04-18 15:19:49,830 - INFO - app.services.data_initialization - Processed prices for category 3, group 1384 on 2024-03-07 +2025-04-18 15:19:49,972 - INFO - app.services.data_initialization - Processed prices for category 3, group 2155 on 2024-03-07 +2025-04-18 15:19:50,162 - INFO - app.services.data_initialization - Processed prices for category 3, group 1423 on 2024-03-07 +2025-04-18 15:19:50,620 - INFO - app.services.data_initialization - Processed prices for category 3, group 1539 on 2024-03-07 +2025-04-18 15:19:50,784 - INFO - app.services.data_initialization - Processed prices for category 3, group 2480 on 2024-03-07 +2025-04-18 15:19:51,000 - INFO - app.services.data_initialization - Processed prices for category 3, group 3118 on 2024-03-07 +2025-04-18 15:19:51,118 - INFO - app.services.data_initialization - Processed prices for category 3, group 3020 on 2024-03-07 +2025-04-18 15:19:51,352 - INFO - app.services.data_initialization - Processed prices for category 3, group 1406 on 2024-03-07 +2025-04-18 15:19:51,480 - INFO - app.services.data_initialization - Processed prices for category 3, group 1938 on 2024-03-07 +2025-04-18 15:19:51,612 - INFO - app.services.data_initialization - Processed prices for category 3, group 2555 on 2024-03-07 +2025-04-18 15:19:51,801 - INFO - app.services.data_initialization - Processed prices for category 3, group 1407 on 2024-03-07 +2025-04-18 15:19:51,912 - INFO - app.services.data_initialization - Processed prices for category 3, group 1541 on 2024-03-07 +2025-04-18 15:19:52,173 - INFO - app.services.data_initialization - Processed prices for category 3, group 2765 on 2024-03-07 +2025-04-18 15:19:52,284 - INFO - app.services.data_initialization - Processed prices for category 3, group 2332 on 2024-03-07 +2025-04-18 15:19:52,625 - INFO - app.services.data_initialization - Processed prices for category 3, group 1861 on 2024-03-07 +2025-04-18 15:19:52,746 - INFO - app.services.data_initialization - Processed prices for category 3, group 1694 on 2024-03-07 +2025-04-18 15:19:52,861 - INFO - app.services.data_initialization - Processed prices for category 3, group 1401 on 2024-03-07 +2025-04-18 15:19:53,158 - INFO - app.services.data_initialization - Processed prices for category 3, group 2807 on 2024-03-07 +2025-04-18 15:19:53,243 - INFO - app.services.data_initialization - Processed prices for category 3, group 3087 on 2024-03-07 +2025-04-18 15:19:53,413 - INFO - app.services.data_initialization - Processed prices for category 3, group 3064 on 2024-03-07 +2025-04-18 15:19:53,587 - INFO - app.services.data_initialization - Processed prices for category 3, group 630 on 2024-03-07 +2025-04-18 15:19:53,862 - INFO - app.services.data_initialization - Processed prices for category 3, group 2409 on 2024-03-07 +2025-04-18 15:19:54,595 - INFO - app.services.data_initialization - Processed prices for category 3, group 3170 on 2024-03-07 +2025-04-18 15:19:56,063 - INFO - app.services.data_initialization - Processed prices for category 3, group 1430 on 2024-03-07 +2025-04-18 15:19:56,660 - INFO - app.services.data_initialization - Processed prices for category 3, group 23228 on 2024-03-07 +2025-04-18 15:19:57,215 - INFO - app.services.data_initialization - Processed prices for category 3, group 2374 on 2024-03-07 +2025-04-18 15:19:57,353 - INFO - app.services.data_initialization - Processed prices for category 3, group 1447 on 2024-03-07 +2025-04-18 15:19:57,471 - INFO - app.services.data_initialization - Processed prices for category 3, group 1452 on 2024-03-07 +2025-04-18 15:19:57,596 - INFO - app.services.data_initialization - Processed prices for category 3, group 1692 on 2024-03-07 +2025-04-18 15:19:57,725 - INFO - app.services.data_initialization - Processed prices for category 3, group 17689 on 2024-03-07 +2025-04-18 15:19:57,725 - INFO - app.services.data_initialization - Downloading and processing archived prices for 2024-03-08 diff --git a/app/main.py b/app/main.py index 117829d..dd32073 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,4 @@ -from fastapi import FastAPI +from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import FileResponse @@ -6,15 +6,17 @@ from contextlib import asynccontextmanager import uvicorn import logging import os +from pathlib import Path from app.routes import routes from app.db.database import init_db, SessionLocal from app.services.service_manager import ServiceManager -import logging # Configure logging -log_file = "app.log" -if os.path.exists(log_file): - os.remove(log_file) # Remove existing log file to start fresh +log_file = Path("app.log") +if log_file.exists(): + # Archive old log file instead of deleting + archive_path = log_file.with_suffix(f'.{log_file.stat().st_mtime}.log') + log_file.rename(archive_path) # Create a formatter formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s') @@ -37,27 +39,47 @@ logger = logging.getLogger(__name__) logger.info("Application starting up...") # Initialize service manager -service_manager = ServiceManager() +service_manager = None @asynccontextmanager async def lifespan(app: FastAPI): + global service_manager + service_manager = ServiceManager() + # Startup - init_db() - logger.info("Database initialized successfully") - - # Initialize all services - await service_manager.initialize_services() - - # Start the scheduler - scheduler = service_manager.get_service('scheduler') - await scheduler.start_scheduled_tasks() - logger.info("Scheduler started successfully") - - yield - - # Shutdown - await service_manager.cleanup_services() - logger.info("All services cleaned up successfully") + try: + init_db() + logger.info("Database initialized successfully") + + # Initialize all services + await service_manager.initialize_services() + + # Get a database session + db = SessionLocal() + try: + data_init_service = service_manager.get_service('data_initialization') + data_init = await data_init_service.initialize_data(db, game_ids=[1, 3], use_cache=False, init_categories=False, init_products=False, init_groups=False, init_archived_prices=True, init_mtgjson=False, archived_prices_start_date="2024-03-05", archived_prices_end_date="2025-04-17") + logger.info(f"Data initialization results: {data_init}") + + # Start the scheduler + scheduler = service_manager.get_service('scheduler') + await scheduler.start_scheduled_tasks(db) + logger.info("Scheduler started successfully") + + yield + except Exception as e: + logger.error(f"Error during application startup: {str(e)}") + raise + finally: + db.close() + except Exception as e: + logger.error(f"Critical error during application startup: {str(e)}") + raise + finally: + # Shutdown + if service_manager: + await service_manager.cleanup_services() + logger.info("All services cleaned up successfully") app = FastAPI( title="CCR Cards Management API", @@ -72,16 +94,23 @@ app.mount("/static", StaticFiles(directory="app/static"), name="static") # Serve index.html at root @app.get("/") async def read_root(): - return FileResponse('app/static/index.html') + index_path = Path('app/static/index.html') + if not index_path.exists(): + raise HTTPException(status_code=404, detail="Index file not found") + return FileResponse(index_path) # Serve app.js @app.get("/app.js") async def read_app_js(): - return FileResponse('app/static/app.js') + js_path = Path('app/static/app.js') + if not js_path.exists(): + raise HTTPException(status_code=404, detail="App.js file not found") + return FileResponse(js_path) +# Configure CORS with specific origins in production app.add_middleware( CORSMiddleware, - allow_origins=["*"], + allow_origins=["http://localhost:3000"], # Update with your frontend URL allow_credentials=True, allow_methods=["*"], allow_headers=["*"], diff --git a/app/models/tcgplayer_order.py b/app/models/tcgplayer_order.py index d5c9e1f..c1648d1 100644 --- a/app/models/tcgplayer_order.py +++ b/app/models/tcgplayer_order.py @@ -1,5 +1,4 @@ -from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, JSON -from sqlalchemy.orm import relationship +from sqlalchemy import Column, Integer, String, Float, DateTime, JSON from datetime import datetime, UTC from app.db.database import Base diff --git a/app/models/tcgplayer_price_history.py b/app/models/tcgplayer_price_history.py new file mode 100644 index 0000000..381a4f1 --- /dev/null +++ b/app/models/tcgplayer_price_history.py @@ -0,0 +1,19 @@ +from sqlalchemy import Column, Integer, Float, DateTime, String +from sqlalchemy.sql import func +from app.db.database import Base + +class TCGPlayerPriceHistory(Base): + __tablename__ = "tcgplayer_price_history" + + id = Column(Integer, primary_key=True, index=True) + product_id = Column(Integer, index=True) + date = Column(DateTime, index=True) + low_price = Column(Float) + mid_price = Column(Float) + high_price = Column(Float) + market_price = Column(Float) + direct_low_price = Column(Float) + sub_type_name = Column(String) + + created_at = Column(DateTime(timezone=True), server_default=func.now()) + updated_at = Column(DateTime(timezone=True), onupdate=func.now()) \ No newline at end of file diff --git a/app/models/tcgplayer_product.py b/app/models/tcgplayer_product.py index 110bb4b..e66bc42 100644 --- a/app/models/tcgplayer_product.py +++ b/app/models/tcgplayer_product.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey +from sqlalchemy import Column, Integer, String, Float, DateTime from sqlalchemy.sql import func from app.db.database import Base @@ -11,11 +11,13 @@ class TCGPlayerProduct(Base): clean_name = Column(String) image_url = Column(String) category_id = Column(Integer) - group_id = Column(Integer, ForeignKey("tcgplayer_groups.group_id")) + group_id = Column(Integer) url = Column(String) modified_on = Column(DateTime) image_count = Column(Integer) ext_rarity = Column(String) + ext_subtype = Column(String) + ext_oracle_text = Column(String) ext_number = Column(String) low_price = Column(Float) mid_price = Column(Float) @@ -23,5 +25,9 @@ class TCGPlayerProduct(Base): market_price = Column(Float) direct_low_price = Column(Float) sub_type_name = Column(String) + ext_power = Column(String) + ext_toughness = Column(String) + ext_flavor_text = Column(String) + created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) \ No newline at end of file diff --git a/app/routes/order_routes.py b/app/routes/order_routes.py index 7dea722..4592802 100644 --- a/app/routes/order_routes.py +++ b/app/routes/order_routes.py @@ -1,12 +1,19 @@ -from fastapi import APIRouter, HTTPException, Depends, Query +from fastapi import APIRouter, HTTPException, Depends, Query, UploadFile, File from typing import List from datetime import datetime from enum import Enum from app.schemas.tcgplayer import TCGPlayerAPIOrderSummary, TCGPlayerAPIOrder -from app.schemas.generate import GenerateRequest, GenerateAddressLabelsRequest, GeneratePackingSlipsRequest, GeneratePullSheetsRequest, GenerateResponse +from app.schemas.generate import GenerateAddressLabelsRequest, GeneratePackingSlipsRequest, GeneratePullSheetsRequest, GenerateResponse, GenerateReturnLabelsRequest +from app.schemas.file import FileUpload from app.services.service_manager import ServiceManager +from app.services.file_service import FileService from sqlalchemy.orm import Session from app.db.database import get_db +import os +import tempfile +import logging + +logger = logging.getLogger(__name__) class SearchRange(str, Enum): @@ -153,3 +160,66 @@ async def generate_address_labels( return {"success": False, "message": "Address labels not found"} except Exception as e: raise HTTPException(status_code=500, detail=f"Failed to generate address labels: {str(e)}") + +@router.post("/generate-return-labels") +async def generate_return_labels( + request: GenerateReturnLabelsRequest, + db: Session = Depends(get_db) +) -> GenerateResponse: + """ + Generate and print return labels for the specified number of labels. + + Args: + request: Dictionary containing: + - number_of_labels: Number of return labels to generate + """ + try: + label_printer = service_manager.get_service('label_printer') + success = await label_printer.print_file("app/data/assets/images/ccrcardsaddress.png", label_size="dk1201", label_type="return_label", copies=request.number_of_labels) + return {"success": success, "message": "Return labels generated and printed successfully"} + except Exception as e: + raise HTTPException(status_code=500, detail=f"Failed to generate return labels: {str(e)}") + +@router.post("/print-pirate-ship-label") +async def print_pirate_ship_label( + file: UploadFile = File(...), + db: Session = Depends(get_db) +) -> GenerateResponse: + """ + Print a PDF file uploaded via the API. + + Args: + file: The PDF file to print + + Returns: + Success status of the operation + """ + try: + # Read the file content + content = await file.read() + + # Store the file using FileService + file_service = service_manager.get_service('file') + stored_file = await file_service.save_file( + db=db, + file_data=content, + filename=file.filename, + subdir="pirate_ship_labels", + file_type="pdf", + content_type=file.content_type, + metadata={"filename": file.filename} + ) + + try: + # Use the label printer service to print the file + label_printer = service_manager.get_service('label_printer') + success = await label_printer.print_file(stored_file, label_size="dk1241", label_type="pirate_ship_label") + + return {"success": success, "message": "Pirate Ship label printed successfully"} + except Exception as e: + # If printing fails, we'll keep the file in storage for potential retry + logger.error(f"Failed to print file: {str(e)}") + raise e + + except Exception as e: + raise HTTPException(status_code=500, detail=f"Failed to print Pirate Ship label: {str(e)}") diff --git a/app/schemas/file.py b/app/schemas/file.py index 2a70b60..e7fd0d0 100644 --- a/app/schemas/file.py +++ b/app/schemas/file.py @@ -1,6 +1,7 @@ from typing import List, Optional from datetime import datetime from pydantic import BaseModel +from fastapi import UploadFile # Base schema with common attributes class FileBase(BaseModel): @@ -37,4 +38,8 @@ class FileList(BaseModel): files: List[FileInDB] total: int page: int - limit: int \ No newline at end of file + limit: int + +# Schema for file upload +class FileUpload(BaseModel): + file: UploadFile \ No newline at end of file diff --git a/app/schemas/generate.py b/app/schemas/generate.py index 497e4fc..ab2dbd2 100644 --- a/app/schemas/generate.py +++ b/app/schemas/generate.py @@ -26,4 +26,7 @@ class GeneratePullSheetsRequest(GenerateRequest): class GenerateResponse(BaseModel): message: str - success: bool \ No newline at end of file + success: bool + +class GenerateReturnLabelsRequest(BaseModel): + number_of_labels: int \ No newline at end of file diff --git a/app/services/__init__.py b/app/services/__init__.py index 1f01963..58cf680 100644 --- a/app/services/__init__.py +++ b/app/services/__init__.py @@ -3,11 +3,33 @@ from app.services.service_manager import ServiceManager from app.services.file_processing_service import FileProcessingService from app.services.inventory_service import InventoryService from app.services.file_service import FileService +from app.services.data_initialization import DataInitializationService +from app.services.external_api.tcgcsv.tcgcsv_service import TCGCSVService +from app.services.external_api.mtgjson.mtgjson_service import MTGJSONService +from app.services.label_printer_service import LabelPrinterService +from app.services.regular_printer_service import RegularPrinterService +from app.services.address_label_service import AddressLabelService +from app.services.pull_sheet_service import PullSheetService +from app.services.set_label_service import SetLabelService +from app.services.scheduler.scheduler_service import SchedulerService +from app.services.external_api.tcgplayer.order_management_service import OrderManagementService +from app.services.external_api.tcgplayer.tcgplayer_inventory_service import TCGPlayerInventoryService __all__ = [ 'BaseService', 'ServiceManager', 'FileProcessingService', 'InventoryService', - 'FileService' + 'FileService', + 'DataInitializationService', + 'TCGCSVService', + 'MTGJSONService', + 'LabelPrinterService', + 'RegularPrinterService', + 'AddressLabelService', + 'PullSheetService', + 'SetLabelService', + 'SchedulerService', + 'OrderManagementService', + 'TCGPlayerInventoryService' ] \ No newline at end of file diff --git a/app/services/data_initialization.py b/app/services/data_initialization.py index be059b4..f683678 100644 --- a/app/services/data_initialization.py +++ b/app/services/data_initialization.py @@ -1,171 +1,171 @@ import os import json from datetime import datetime, timedelta -from typing import Optional, List, Dict, Any +from typing import Optional, List, Dict, Any, Union, Generator, Callable from sqlalchemy.orm import Session -from app.services.external_api.tcgcsv.tcgcsv_service import TCGCSVService -from app.services.external_api.mtgjson.mtgjson_service import MTGJSONService from app.models.tcgplayer_group import TCGPlayerGroup from app.models.tcgplayer_product import TCGPlayerProduct from app.models.tcgplayer_category import TCGPlayerCategory +from app.services.base_service import BaseService +from app.schemas.file import FileInDB +from app.db.database import transaction +import logging +from app.models.tcgplayer_price_history import TCGPlayerPriceHistory +from sqlalchemy import and_, bindparam, update, insert +import py7zr +import shutil -class DataInitializationService: - def __init__(self, cache_dir: str = "app/data/cache/tcgcsv"): - self.cache_dir = cache_dir - self.categories_dir = os.path.join(cache_dir, "categories") - self.groups_dir = os.path.join(cache_dir, "groups") - self.products_dir = os.path.join(cache_dir, "products") - self.tcgcsv_service = TCGCSVService() - self.mtgjson_service = MTGJSONService() - - # Create all necessary directories - os.makedirs(cache_dir, exist_ok=True) - os.makedirs(self.categories_dir, exist_ok=True) - os.makedirs(self.groups_dir, exist_ok=True) - os.makedirs(self.products_dir, exist_ok=True) +logger = logging.getLogger(__name__) - def _get_cache_path(self, filename: str, subdir: str) -> str: - """Get the full path for a cached file in the specified subdirectory""" - return os.path.join(self.cache_dir, subdir, filename) - async def _cache_categories(self, categories_data: dict): - """Cache categories data to a JSON file""" - cache_path = self._get_cache_path("categories.json", "categories") - with open(cache_path, 'w') as f: - json.dump(categories_data, f, indent=2) +class DataInitializationService(BaseService): + def __init__(self): + super().__init__(None) - async def _cache_groups(self, game_ids: List[int], groups_data: dict): - for game_id in game_ids: - cache_path = self._get_cache_path(f"groups_{game_id}.json", "groups") - with open(cache_path, 'w') as f: - json.dump(groups_data, f, default=str) - - async def _cache_products(self, game_ids: List[int], group_id: int, products_data: list): - for game_id in game_ids: - cache_path = self._get_cache_path(f"products_{game_id}_{group_id}.json", "products") - with open(cache_path, 'w') as f: - json.dump(products_data, f, default=str) - - async def _load_cached_categories(self) -> Optional[dict]: - cache_path = self._get_cache_path("categories.json", "categories") - if os.path.exists(cache_path): - with open(cache_path, 'r') as f: - return json.load(f) - return None - - async def _load_cached_groups(self, game_ids: List[int]) -> Optional[dict]: - # Try to load cached data for any of the game IDs - for game_id in game_ids: - cache_path = self._get_cache_path(f"groups_{game_id}.json", "groups") - if os.path.exists(cache_path): - with open(cache_path, 'r') as f: - return json.load(f) - return None - - async def _load_cached_products(self, game_ids: List[int], group_id: int) -> Optional[list]: - # Try to load cached data for any of the game IDs - for game_id in game_ids: - cache_path = self._get_cache_path(f"products_{game_id}_{group_id}.json", "products") - if os.path.exists(cache_path): - with open(cache_path, 'r') as f: - return json.load(f) - return None - - async def initialize_data( + async def _cache_data( self, db: Session, - game_ids: List[int], - use_cache: bool = True, - init_categories: bool = True, - init_groups: bool = True, - init_products: bool = True, - init_archived_prices: bool = False, - archived_prices_start_date: Optional[str] = None, - archived_prices_end_date: Optional[str] = None, - init_mtgjson: bool = True - ) -> Dict[str, Any]: - """Initialize TCGPlayer data with configurable steps""" - print("Initializing TCGPlayer data...") - results = { - "categories": 0, - "groups": {}, - "products": {}, - "archived_prices": False, - "mtgjson": {} - } + data: Union[dict, list], + filename: str, + subdir: str, + default_str: bool = False, + file_type: str = "json", + content_type: str = "application/json", + metadata: Optional[Dict] = None + ) -> FileInDB: + """Generic function to cache data to a JSON file""" + file_data = json.dumps(data, default=str if default_str else None, indent=2) + return await self.file_service.save_file( + db, + file_data, + filename, + subdir, + file_type=file_type, + content_type=content_type, + metadata=metadata + ) - if init_categories: - print("\nInitializing categories...") - categories_data = None - if use_cache: - categories_data = await self._load_cached_categories() + async def _load_cached_data( + self, + db: Session, + filename: str + ) -> Optional[Dict[str, Any]]: + """Generic function to load cached data from a JSON file with 7-day expiration""" + file_record = await self.file_service.get_file_by_filename(db, filename) + if file_record: + # Check if cache is expired (7 days) + cache_age = datetime.now() - file_record.created_at + if cache_age.days < 7: + with open(file_record.path, 'r') as f: + return json.load(f) + else: + logger.info(f"Cache expired for {filename}, age: {cache_age.days} days") + # Delete the expired cache file + await self.file_service.delete_file(db, file_record.id) + return None + + async def sync_categories(self, db: Session, categories_data: dict): + """Sync categories data to the database using streaming for large datasets""" + categories = categories_data.get("results", []) + batch_size = 1000 # Process in batches of 1000 + total_categories = len(categories) + + with transaction(db): + for i in range(0, total_categories, batch_size): + batch = categories[i:i + batch_size] + for category_data in batch: + existing_category = db.query(TCGPlayerCategory).filter(TCGPlayerCategory.category_id == category_data["categoryId"]).first() + if existing_category: + # Update existing category + for key, value in { + "name": category_data["name"], + "display_name": category_data.get("displayName"), + "seo_category_name": category_data.get("seoCategoryName"), + "category_description": category_data.get("categoryDescription"), + "category_page_title": category_data.get("categoryPageTitle"), + "sealed_label": category_data.get("sealedLabel"), + "non_sealed_label": category_data.get("nonSealedLabel"), + "condition_guide_url": category_data.get("conditionGuideUrl"), + "is_scannable": category_data.get("isScannable", False), + "popularity": category_data.get("popularity", 0), + "is_direct": category_data.get("isDirect", False), + "modified_on": datetime.fromisoformat(category_data["modifiedOn"].replace("Z", "+00:00")) if category_data.get("modifiedOn") else None + }.items(): + setattr(existing_category, key, value) + else: + new_category = TCGPlayerCategory( + category_id=category_data["categoryId"], + name=category_data["name"], + display_name=category_data.get("displayName"), + seo_category_name=category_data.get("seoCategoryName"), + category_description=category_data.get("categoryDescription"), + category_page_title=category_data.get("categoryPageTitle"), + sealed_label=category_data.get("sealedLabel"), + non_sealed_label=category_data.get("nonSealedLabel"), + condition_guide_url=category_data.get("conditionGuideUrl"), + is_scannable=category_data.get("isScannable", False), + popularity=category_data.get("popularity", 0), + is_direct=category_data.get("isDirect", False), + modified_on=datetime.fromisoformat(category_data["modifiedOn"].replace("Z", "+00:00")) if category_data.get("modifiedOn") else None + ) + db.add(new_category) + + # Commit after each batch + db.commit() + logger.info(f"Processed {min(i + batch_size, total_categories)}/{total_categories} categories") - if not categories_data: - print("Fetching categories from API...") - categories_data = await self.tcgcsv_service.get_categories() - if use_cache: - await self._cache_categories(categories_data) - - if not categories_data.get("success"): - raise Exception(f"Failed to fetch categories: {categories_data.get('errors')}") - - # Sync categories to database - categories = categories_data.get("results", []) - synced_categories = [] - for category_data in categories: - existing_category = db.query(TCGPlayerCategory).filter(TCGPlayerCategory.category_id == category_data["categoryId"]).first() - if existing_category: - synced_categories.append(existing_category) - else: - new_category = TCGPlayerCategory( - category_id=category_data["categoryId"], - name=category_data["name"], - display_name=category_data.get("displayName"), - seo_category_name=category_data.get("seoCategoryName"), - category_description=category_data.get("categoryDescription"), - category_page_title=category_data.get("categoryPageTitle"), - sealed_label=category_data.get("sealedLabel"), - non_sealed_label=category_data.get("nonSealedLabel"), - condition_guide_url=category_data.get("conditionGuideUrl"), - is_scannable=category_data.get("isScannable", False), - popularity=category_data.get("popularity", 0), - is_direct=category_data.get("isDirect", False), - modified_on=datetime.fromisoformat(category_data["modifiedOn"].replace("Z", "+00:00")) if category_data.get("modifiedOn") else None - ) - db.add(new_category) - synced_categories.append(new_category) - db.commit() - results["categories"] = len(synced_categories) - print(f"Synced {len(synced_categories)} categories") - - # Process each game ID separately - for game_id in game_ids: - print(f"\nProcessing game ID: {game_id}") - results["groups"][game_id] = 0 - results["products"][game_id] = {} - - if init_groups: - print(f"Initializing groups for game ID {game_id}...") - groups_data = None - if use_cache: - groups_data = await self._load_cached_groups([game_id]) - - if not groups_data: - print(f"Fetching groups for game ID {game_id} from API...") - groups_data = await self.tcgcsv_service.get_groups([game_id]) - if use_cache: - await self._cache_groups([game_id], groups_data) - - if not groups_data.get("success"): - raise Exception(f"Failed to fetch groups for game ID {game_id}: {groups_data.get('errors')}") - - # Sync groups to database - groups = groups_data.get("results", []) - synced_groups = [] - for group_data in groups: + async def init_categories(self, db: Session, use_cache: bool = True) -> bool: + """Initialize categories data""" + logger.info("Starting categories initialization") + if use_cache: + categories_data = await self._load_cached_data(db, "categories.json") + if categories_data: + await self.sync_categories(db, categories_data) + logger.info("Categories initialized from cache") + return True + else: + logger.warning("No cached categories data found") + return False + else: + tcgcsv_service = self.get_service('tcgcsv') + categories_data = await tcgcsv_service.get_categories() + + # Save the categories data + await self._cache_data( + db, + categories_data, + "categories.json", + "tcgcsv/categories", + file_type="json", + content_type="application/json" + ) + + await self.sync_categories(db, categories_data) + logger.info("Categories initialized from API") + return True + + async def sync_groups(self, db: Session, groups_data: dict): + """Sync groups data to the database using streaming for large datasets""" + groups = groups_data.get("results", []) + batch_size = 1000 # Process in batches of 1000 + total_groups = len(groups) + + with transaction(db): + for i in range(0, total_groups, batch_size): + batch = groups[i:i + batch_size] + for group_data in batch: existing_group = db.query(TCGPlayerGroup).filter(TCGPlayerGroup.group_id == group_data["groupId"]).first() if existing_group: - synced_groups.append(existing_group) + # Update existing group + for key, value in { + "name": group_data["name"], + "abbreviation": group_data.get("abbreviation"), + "is_supplemental": group_data.get("isSupplemental", False), + "published_on": datetime.fromisoformat(group_data["publishedOn"].replace("Z", "+00:00")) if group_data.get("publishedOn") else None, + "modified_on": datetime.fromisoformat(group_data["modifiedOn"].replace("Z", "+00:00")) if group_data.get("modifiedOn") else None, + "category_id": group_data.get("categoryId") + }.items(): + setattr(existing_group, key, value) else: new_group = TCGPlayerGroup( group_id=group_data["groupId"], @@ -177,88 +177,561 @@ class DataInitializationService: category_id=group_data.get("categoryId") ) db.add(new_group) - synced_groups.append(new_group) + + # Commit after each batch db.commit() - results["groups"][game_id] = len(synced_groups) - print(f"Synced {len(synced_groups)} groups for game ID {game_id}") + logger.info(f"Processed {min(i + batch_size, total_groups)}/{total_groups} groups") - if init_products: - # Handle products for each group in this game ID - for group in synced_groups: - print(f"Initializing products for group {group.name} (game ID {game_id})...") - products_data = None - if use_cache: - products_data = await self._load_cached_products([game_id], group.group_id) + async def init_groups(self, db: Session, use_cache: bool = True, game_ids: List[int] = None) -> bool: + """Initialize groups data""" + logger.info(f"Starting groups initialization for game IDs: {game_ids}") + tcgcsv_service = self.get_service('tcgcsv') + for game_id in game_ids: + if use_cache: + groups_data = await self._load_cached_data(db, f"groups_{game_id}.json") + if groups_data: + await self.sync_groups(db, groups_data) + logger.info(f"Groups initialized from cache for game ID {game_id}") + else: + logger.warning(f"No cached groups data found for game ID {game_id}") + return False + else: + groups_data = await tcgcsv_service.get_groups(game_id) + + # Save the groups data + await self._cache_data( + db, + groups_data, + f"groups_{game_id}.json", + "tcgcsv/groups", + file_type="json", + content_type="application/json" + ) + + await self.sync_groups(db, groups_data) + logger.info(f"Groups initialized from API for game ID {game_id}") + return True + + async def sync_products(self, db: Session, products_data: str): + """Sync products data to the database using streaming for large datasets""" + import csv + import io + + # Parse CSV data + csv_reader = csv.DictReader(io.StringIO(products_data)) + products_list = list(csv_reader) + batch_size = 1000 # Process in batches of 1000 + total_products = len(products_list) + + with transaction(db): + for i in range(0, total_products, batch_size): + batch = products_list[i:i + batch_size] + for product_data in batch: + existing_product = db.query(TCGPlayerProduct).filter(TCGPlayerProduct.product_id == product_data["productId"]).first() + if existing_product: + # Update existing product + for key, value in { + "name": product_data["name"], + "clean_name": product_data.get("cleanName"), + "image_url": product_data.get("imageUrl"), + "category_id": product_data.get("categoryId"), + "group_id": product_data.get("groupId"), + "url": product_data.get("url"), + "modified_on": datetime.fromisoformat(product_data["modifiedOn"].replace("Z", "+00:00")) if product_data.get("modifiedOn") else None, + "image_count": product_data.get("imageCount", 0), + "ext_rarity": product_data.get("extRarity"), + "ext_number": product_data.get("extNumber"), + "low_price": float(product_data.get("lowPrice")) if product_data.get("lowPrice") else None, + "mid_price": float(product_data.get("midPrice")) if product_data.get("midPrice") else None, + "high_price": float(product_data.get("highPrice")) if product_data.get("highPrice") else None, + "market_price": float(product_data.get("marketPrice")) if product_data.get("marketPrice") else None, + "direct_low_price": float(product_data.get("directLowPrice")) if product_data.get("directLowPrice") else None, + "sub_type_name": product_data.get("subTypeName") + }.items(): + setattr(existing_product, key, value) + else: + new_product = TCGPlayerProduct( + product_id=product_data["productId"], + name=product_data["name"], + clean_name=product_data.get("cleanName"), + image_url=product_data.get("imageUrl"), + category_id=product_data.get("categoryId"), + group_id=product_data.get("groupId"), + url=product_data.get("url"), + modified_on=datetime.fromisoformat(product_data["modifiedOn"].replace("Z", "+00:00")) if product_data.get("modifiedOn") else None, + image_count=product_data.get("imageCount", 0), + ext_rarity=product_data.get("extRarity"), + ext_subtype=product_data.get("extSubtype"), + ext_oracle_text=product_data.get("extOracleText"), + ext_number=product_data.get("extNumber"), + low_price=float(product_data.get("lowPrice")) if product_data.get("lowPrice") else None, + mid_price=float(product_data.get("midPrice")) if product_data.get("midPrice") else None, + high_price=float(product_data.get("highPrice")) if product_data.get("highPrice") else None, + market_price=float(product_data.get("marketPrice")) if product_data.get("marketPrice") else None, + direct_low_price=float(product_data.get("directLowPrice")) if product_data.get("directLowPrice") else None, + sub_type_name=product_data.get("subTypeName"), + ext_power=product_data.get("extPower"), + ext_toughness=product_data.get("extToughness"), + ext_flavor_text=product_data.get("extFlavorText") + + ) + db.add(new_product) + + # Commit after each batch + db.commit() + logger.info(f"Processed {min(i + batch_size, total_products)}/{total_products} products") - if not products_data: - print(f"Fetching products for group {group.name} (game ID {game_id}) from API...") - products_data = await self.tcgcsv_service.get_products_and_prices([game_id], group.group_id) - if use_cache: - await self._cache_products([game_id], group.group_id, products_data) + async def init_products(self, db: Session, use_cache: bool = True, game_ids: List[int] = None) -> bool: + """Initialize products data""" + logger.info(f"Starting products initialization for game IDs: {game_ids}") + tcgcsv_service = self.get_service('tcgcsv') + for game_id in game_ids: + groups = db.query(TCGPlayerGroup).filter(TCGPlayerGroup.category_id == game_id).all() + logger.info(f"Processing {len(groups)} groups for game ID {game_id}") + for group in groups: + if use_cache: + products_data = await self._load_cached_data(db, f"products_{game_id}_{group.group_id}.json") + if products_data: + await self.sync_products(db, products_data) + logger.info(f"Products initialized from cache for group {group.group_id}") + else: + logger.warning(f"No cached products data found for group {group.group_id}") + continue + else: + # Get CSV data from API + csv_data = await tcgcsv_service.get_products_and_prices(game_id, group.group_id) + + # Save the CSV file + await self.file_service.save_file( + db, + csv_data, + f"products_{game_id}_{group.group_id}.csv", + "tcgcsv/products", + file_type="csv", + content_type="text/csv" + ) + + # Parse and sync the CSV data + await self.sync_products(db, csv_data) + logger.info(f"Products initialized from API for group {group.group_id}") + return True - # Sync products to database - synced_products = [] - for product_data in products_data: - existing_product = db.query(TCGPlayerProduct).filter(TCGPlayerProduct.product_id == int(product_data["productId"])).first() - if existing_product: - synced_products.append(existing_product) - else: - new_product = TCGPlayerProduct( - product_id=int(product_data["productId"]), - name=product_data["name"], - clean_name=product_data.get("cleanName"), - image_url=product_data.get("imageUrl"), - category_id=int(product_data["categoryId"]), - group_id=int(product_data["groupId"]), - url=product_data.get("url"), - modified_on=datetime.fromisoformat(product_data["modifiedOn"].replace("Z", "+00:00")) if product_data.get("modifiedOn") else None, - image_count=int(product_data.get("imageCount", 0)), - ext_rarity=product_data.get("extRarity"), - ext_number=product_data.get("extNumber"), - low_price=float(product_data.get("lowPrice")) if product_data.get("lowPrice") else None, - mid_price=float(product_data.get("midPrice")) if product_data.get("midPrice") else None, - high_price=float(product_data.get("highPrice")) if product_data.get("highPrice") else None, - market_price=float(product_data.get("marketPrice")) if product_data.get("marketPrice") else None, - direct_low_price=float(product_data.get("directLowPrice")) if product_data.get("directLowPrice") else None, - sub_type_name=product_data.get("subTypeName") - ) - db.add(new_product) - synced_products.append(new_product) - db.commit() - results["products"][game_id][group.group_id] = len(synced_products) - print(f"Synced {len(synced_products)} products for group {group.name} (game ID {game_id})") - - if init_archived_prices: - if not archived_prices_start_date or not archived_prices_end_date: - raise ValueError("Both start_date and end_date are required for archived prices initialization") - - print(f"\nInitializing archived prices from {archived_prices_start_date} to {archived_prices_end_date}...") - await self.tcgcsv_service.get_archived_prices_for_date_range(archived_prices_start_date, archived_prices_end_date) - results["archived_prices"] = True - print("Archived prices initialization completed") - - if init_mtgjson: - print("\nInitializing MTGJSON data...") - identifiers_result = await self.mtgjson_service.download_and_process_identifiers(db) - skus_result = await self.mtgjson_service.download_and_process_skus(db) - results["mtgjson"] = { - "cards_processed": identifiers_result["cards_processed"], - "skus_processed": skus_result["skus_processed"] + async def sync_archived_prices(self, db: Session, archived_prices_data: dict, date: datetime): + """Sync archived prices data to the database using bulk operations. + Note: Historical prices are never updated, only new records are inserted.""" + from sqlalchemy import insert + from app.models.tcgplayer_price_history import TCGPlayerPriceHistory + + # Prepare data for bulk operations + price_records = [] + + for price_data in archived_prices_data.get("results", []): + record = { + "product_id": price_data["productId"], + "date": date, + "sub_type_name": price_data["subTypeName"], + "low_price": price_data.get("lowPrice"), + "mid_price": price_data.get("midPrice"), + "high_price": price_data.get("highPrice"), + "market_price": price_data.get("marketPrice"), + "direct_low_price": price_data.get("directLowPrice") } + price_records.append(record) + + if not price_records: + return + + # Get existing records in bulk to avoid duplicates + product_ids = [r["product_id"] for r in price_records] + sub_type_names = [r["sub_type_name"] for r in price_records] + + existing_records = db.query(TCGPlayerPriceHistory).filter( + TCGPlayerPriceHistory.product_id.in_(product_ids), + TCGPlayerPriceHistory.date == date, + TCGPlayerPriceHistory.sub_type_name.in_(sub_type_names) + ).all() + + # Filter out existing records + existing_keys = {(r.product_id, r.date, r.sub_type_name) for r in existing_records} + to_insert = [ + record for record in price_records + if (record["product_id"], record["date"], record["sub_type_name"]) not in existing_keys + ] + + # Perform bulk insert for new records only + if to_insert: + stmt = insert(TCGPlayerPriceHistory) + db.execute(stmt, to_insert) + db.commit() + async def init_archived_prices(self, db: Session, start_date: datetime, end_date: datetime, use_cache: bool = True, game_ids: List[int] = None) -> bool: + """Initialize archived prices data""" + logger.info(f"Starting archived prices initialization from {start_date} to {end_date}") + tcgcsv_service = self.get_service('tcgcsv') + processed_dates = await tcgcsv_service.get_tcgcsv_date_range(start_date, end_date) + logger.info(f"Processing {len(processed_dates)} dates") + + # Convert game_ids to set for faster lookups + desired_game_ids = set(game_ids) if game_ids else set() + + for date in processed_dates: + date_path = f"app/data/cache/tcgcsv/prices/{date}" + + # Check if we already have the data for this date + if use_cache and os.path.exists(date_path): + logger.info(f"Using cached price data for {date}") + else: + logger.info(f"Downloading and processing archived prices for {date}") + # Download and extract the archive + archive_data = await tcgcsv_service.get_archived_prices_for_date(date) + + # Save the archive file + file_record = await self.file_service.save_file( + db, + archive_data, + f"prices-{date}.ppmd.7z", + "tcgcsv/prices/zip", + file_type="application/x-7z-compressed", + content_type="application/x-7z-compressed" + ) + + # Extract the 7z file to a temporary directory + temp_extract_path = f"app/data/cache/tcgcsv/prices/temp_{date}" + os.makedirs(temp_extract_path, exist_ok=True) + + with py7zr.SevenZipFile(file_record.path, 'r') as archive: + archive.extractall(path=temp_extract_path) + + # Find the date subdirectory in the temp directory + date_subdir = os.path.join(temp_extract_path, str(date)) + if os.path.exists(date_subdir): + # Remove existing directory if it exists + if os.path.exists(date_path): + shutil.rmtree(date_path) + + # Create the destination directory + os.makedirs(date_path, exist_ok=True) + + # Move contents from the date subdirectory to the final path + for item in os.listdir(date_subdir): + src = os.path.join(date_subdir, item) + dst = os.path.join(date_path, item) + os.rename(src, dst) + + # Clean up the temporary directory + os.rmdir(date_subdir) + os.rmdir(temp_extract_path) + + # Process each category directory + for category_id in os.listdir(date_path): + # Skip categories that aren't in our desired game IDs + if int(category_id) not in desired_game_ids: + continue + + category_path = os.path.join(date_path, category_id) + if not os.path.isdir(category_path): + continue + + # Process each group directory + for group_id in os.listdir(category_path): + group_path = os.path.join(category_path, group_id) + if not os.path.isdir(group_path): + continue + + # Process the prices file + prices_file = os.path.join(group_path, "prices") + if not os.path.exists(prices_file): + continue + + try: + with open(prices_file, 'r') as f: + price_data = json.load(f) + if price_data.get("success"): + await self.sync_archived_prices(db, price_data, datetime.strptime(date, "%Y-%m-%d")) + logger.info(f"Processed prices for category {category_id}, group {group_id} on {date}") + except Exception as e: + logger.error(f"Error processing prices file {prices_file}: {str(e)}") + continue + + return True + + async def init_mtgjson(self, db: Session, use_cache: bool = True) -> Dict[str, Any]: + """Initialize MTGJSON data""" + logger.info("Starting MTGJSON initialization") + mtgjson_service = self.get_service('mtgjson') + identifiers_count = 0 + skus_count = 0 + + # Process identifiers + if use_cache: + cached_file = await self.file_service.get_file_by_filename(db, "mtgjson_identifiers.json") + if cached_file and os.path.exists(cached_file.path): + logger.info("MTGJSON identifiers initialized from cache") + identifiers_count = await self._process_streamed_data( + db, + self._stream_json_file(cached_file.path), + "mtgjson_identifiers.json", + "mtgjson", + self.sync_mtgjson_identifiers + ) + else: + logger.info("Downloading MTGJSON identifiers from API") + identifiers_count = await self._process_streamed_data( + db, + await mtgjson_service.get_identifiers(db), + "mtgjson_identifiers.json", + "mtgjson", + self.sync_mtgjson_identifiers + ) + else: + logger.info("Downloading MTGJSON identifiers from API") + identifiers_count = await self._process_streamed_data( + db, + await mtgjson_service.get_identifiers(db), + "mtgjson_identifiers.json", + "mtgjson", + self.sync_mtgjson_identifiers + ) + + # Process SKUs + if use_cache: + cached_file = await self.file_service.get_file_by_filename(db, "mtgjson_skus.json") + if cached_file and os.path.exists(cached_file.path): + logger.info("MTGJSON SKUs initialized from cache") + skus_count = await self._process_streamed_data( + db, + self._stream_json_file(cached_file.path), + "mtgjson_skus.json", + "mtgjson", + self.sync_mtgjson_skus + ) + else: + logger.info("Downloading MTGJSON SKUs from API") + skus_count = await self._process_streamed_data( + db, + await mtgjson_service.get_skus(db), + "mtgjson_skus.json", + "mtgjson", + self.sync_mtgjson_skus + ) + else: + logger.info("Downloading MTGJSON SKUs from API") + skus_count = await self._process_streamed_data( + db, + await mtgjson_service.get_skus(db), + "mtgjson_skus.json", + "mtgjson", + self.sync_mtgjson_skus + ) + + return { + "identifiers_processed": identifiers_count, + "skus_processed": skus_count + } + + async def _process_streamed_data( + self, + db: Session, + data_stream: Generator[Dict[str, Any], None, None], + filename: str, + subdir: str, + sync_func: Callable + ) -> int: + """Process streamed data and sync to database""" + count = 0 + items = [] + batch_size = 1000 + + for item in data_stream: + if item["type"] == "meta": + # Handle meta data separately + continue + + count += 1 + items.append(item["data"]) + + # Process in batches + if len(items) >= batch_size: + await sync_func(db, items) + items = [] + + # Process any remaining items + if items: + await sync_func(db, items) + + return count + + async def sync_mtgjson_identifiers(self, db: Session, identifiers_data: dict): + """Sync MTGJSON identifiers data to the database""" + from app.models.mtgjson_card import MTGJSONCard + + with transaction(db): + for card_id, card_data in identifiers_data.items(): + existing_card = db.query(MTGJSONCard).filter(MTGJSONCard.card_id == card_id).first() + if existing_card: + # Update existing card + for key, value in { + "name": card_data.get("name"), + "set_code": card_data.get("setCode"), + "uuid": card_data.get("uuid"), + "abu_id": card_data.get("identifiers", {}).get("abuId"), + "card_kingdom_etched_id": card_data.get("identifiers", {}).get("cardKingdomEtchedId"), + "card_kingdom_foil_id": card_data.get("identifiers", {}).get("cardKingdomFoilId"), + "card_kingdom_id": card_data.get("identifiers", {}).get("cardKingdomId"), + "cardsphere_id": card_data.get("identifiers", {}).get("cardsphereId"), + "cardsphere_foil_id": card_data.get("identifiers", {}).get("cardsphereFoilId"), + "cardtrader_id": card_data.get("identifiers", {}).get("cardtraderId"), + "csi_id": card_data.get("identifiers", {}).get("csiId"), + "mcm_id": card_data.get("identifiers", {}).get("mcmId"), + "mcm_meta_id": card_data.get("identifiers", {}).get("mcmMetaId"), + "miniaturemarket_id": card_data.get("identifiers", {}).get("miniaturemarketId"), + "mtg_arena_id": card_data.get("identifiers", {}).get("mtgArenaId"), + "mtgjson_foil_version_id": card_data.get("identifiers", {}).get("mtgjsonFoilVersionId"), + "mtgjson_non_foil_version_id": card_data.get("identifiers", {}).get("mtgjsonNonFoilVersionId"), + "mtgjson_v4_id": card_data.get("identifiers", {}).get("mtgjsonV4Id"), + "mtgo_foil_id": card_data.get("identifiers", {}).get("mtgoFoilId"), + "mtgo_id": card_data.get("identifiers", {}).get("mtgoId"), + "multiverse_id": card_data.get("identifiers", {}).get("multiverseId"), + "scg_id": card_data.get("identifiers", {}).get("scgId"), + "scryfall_id": card_data.get("identifiers", {}).get("scryfallId"), + "scryfall_card_back_id": card_data.get("identifiers", {}).get("scryfallCardBackId"), + "scryfall_oracle_id": card_data.get("identifiers", {}).get("scryfallOracleId"), + "scryfall_illustration_id": card_data.get("identifiers", {}).get("scryfallIllustrationId"), + "tcgplayer_product_id": card_data.get("identifiers", {}).get("tcgplayerProductId"), + "tcgplayer_etched_product_id": card_data.get("identifiers", {}).get("tcgplayerEtchedProductId"), + "tnt_id": card_data.get("identifiers", {}).get("tntId") + }.items(): + setattr(existing_card, key, value) + else: + new_card = MTGJSONCard( + card_id=card_id, + name=card_data.get("name"), + set_code=card_data.get("setCode"), + uuid=card_data.get("uuid"), + abu_id=card_data.get("identifiers", {}).get("abuId"), + card_kingdom_etched_id=card_data.get("identifiers", {}).get("cardKingdomEtchedId"), + card_kingdom_foil_id=card_data.get("identifiers", {}).get("cardKingdomFoilId"), + card_kingdom_id=card_data.get("identifiers", {}).get("cardKingdomId"), + cardsphere_id=card_data.get("identifiers", {}).get("cardsphereId"), + cardsphere_foil_id=card_data.get("identifiers", {}).get("cardsphereFoilId"), + cardtrader_id=card_data.get("identifiers", {}).get("cardtraderId"), + csi_id=card_data.get("identifiers", {}).get("csiId"), + mcm_id=card_data.get("identifiers", {}).get("mcmId"), + mcm_meta_id=card_data.get("identifiers", {}).get("mcmMetaId"), + miniaturemarket_id=card_data.get("identifiers", {}).get("miniaturemarketId"), + mtg_arena_id=card_data.get("identifiers", {}).get("mtgArenaId"), + mtgjson_foil_version_id=card_data.get("identifiers", {}).get("mtgjsonFoilVersionId"), + mtgjson_non_foil_version_id=card_data.get("identifiers", {}).get("mtgjsonNonFoilVersionId"), + mtgjson_v4_id=card_data.get("identifiers", {}).get("mtgjsonV4Id"), + mtgo_foil_id=card_data.get("identifiers", {}).get("mtgoFoilId"), + mtgo_id=card_data.get("identifiers", {}).get("mtgoId"), + multiverse_id=card_data.get("identifiers", {}).get("multiverseId"), + scg_id=card_data.get("identifiers", {}).get("scgId"), + scryfall_id=card_data.get("identifiers", {}).get("scryfallId"), + scryfall_card_back_id=card_data.get("identifiers", {}).get("scryfallCardBackId"), + scryfall_oracle_id=card_data.get("identifiers", {}).get("scryfallOracleId"), + scryfall_illustration_id=card_data.get("identifiers", {}).get("scryfallIllustrationId"), + tcgplayer_product_id=card_data.get("identifiers", {}).get("tcgplayerProductId"), + tcgplayer_etched_product_id=card_data.get("identifiers", {}).get("tcgplayerEtchedProductId"), + tnt_id=card_data.get("identifiers", {}).get("tntId") + ) + db.add(new_card) + + async def sync_mtgjson_skus(self, db: Session, skus_data: dict): + """Sync MTGJSON SKUs data to the database""" + from app.models.mtgjson_sku import MTGJSONSKU + + with transaction(db): + for card_uuid, sku_list in skus_data.items(): + for sku in sku_list: + # Handle case where sku is a string (skuId) + if isinstance(sku, str): + sku_id = sku + existing_sku = db.query(MTGJSONSKU).filter(MTGJSONSKU.sku_id == sku_id).first() + if existing_sku: + # Update existing SKU + existing_sku.card_id = card_uuid + else: + new_sku = MTGJSONSKU( + sku_id=sku_id, + card_id=card_uuid + ) + db.add(new_sku) + # Handle case where sku is a dictionary + else: + sku_id = str(sku.get("skuId")) + existing_sku = db.query(MTGJSONSKU).filter(MTGJSONSKU.sku_id == sku_id).first() + if existing_sku: + # Update existing SKU + for key, value in { + "product_id": str(sku.get("productId")), + "condition": sku.get("condition"), + "finish": sku.get("finish"), + "language": sku.get("language"), + "printing": sku.get("printing"), + "card_id": card_uuid + }.items(): + setattr(existing_sku, key, value) + else: + new_sku = MTGJSONSKU( + sku_id=sku_id, + product_id=str(sku.get("productId")), + condition=sku.get("condition"), + finish=sku.get("finish"), + language=sku.get("language"), + printing=sku.get("printing"), + card_id=card_uuid + ) + db.add(new_sku) + + async def initialize_data( + self, + db: Session, + game_ids: List[int], + use_cache: bool = False, + init_categories: bool = True, + init_groups: bool = True, + init_products: bool = True, + init_archived_prices: bool = True, + archived_prices_start_date: Optional[str] = None, + archived_prices_end_date: Optional[str] = None, + init_mtgjson: bool = True + ) -> Dict[str, Any]: + """Initialize 3rd party API data loads with configurable steps""" + logger.info("Starting data initialization process") + results = {} + if init_categories: + logger.info("Initializing categories...") + results["categories"] = await self.init_categories(db, use_cache) + if init_groups: + logger.info("Initializing groups...") + results["groups"] = await self.init_groups(db, use_cache, game_ids) + if init_products: + logger.info("Initializing products...") + results["products"] = await self.init_products(db, use_cache, game_ids) + if init_archived_prices: + logger.info("Initializing archived prices...") + results["archived_prices"] = await self.init_archived_prices( + db, + archived_prices_start_date, + archived_prices_end_date, + use_cache, + game_ids + ) + if init_mtgjson: + logger.info("Initializing MTGJSON data...") + results["mtgjson"] = await self.init_mtgjson(db, use_cache) + + logger.info("Data initialization completed") return results - async def clear_cache(self) -> None: + async def clear_cache(self, db: Session) -> None: """Clear all cached data""" + # Delete all files in categories, groups, and products directories for subdir in ["categories", "groups", "products"]: - dir_path = os.path.join(self.cache_dir, subdir) - if os.path.exists(dir_path): - for filename in os.listdir(dir_path): - file_path = os.path.join(dir_path, filename) - if os.path.isfile(file_path): - os.unlink(file_path) + files = await self.file_service.list_files(db, file_type="json") + for file in files: + if file.path.startswith(subdir): + await self.file_service.delete_file(db, file.id) await self.mtgjson_service.clear_cache() - print("Cache cleared") - - async def close(self): - await self.tcgcsv_service.close() \ No newline at end of file + print("Cache cleared") \ No newline at end of file diff --git a/app/services/external_api/base_external_service.py b/app/services/external_api/base_external_service.py index 3c3927f..0b75e86 100644 --- a/app/services/external_api/base_external_service.py +++ b/app/services/external_api/base_external_service.py @@ -92,24 +92,3 @@ class BaseExternalService: def file_service(self): """Convenience property for file service""" return self.get_service('file') - - async def save_file(self, db: Session, file_data: Union[bytes, list[dict]], file_name: str, subdir: str, file_type: Optional[str] = None) -> FileInDB: - """Save a file using the FileService""" - if isinstance(file_data, list): - # Convert list of dictionaries to CSV bytes - output = io.StringIO() - writer = csv.DictWriter(output, fieldnames=file_data[0].keys()) - writer.writeheader() - writer.writerows(file_data) - file_data = output.getvalue().encode('utf-8') - file_type = file_type or 'text/csv' - - # Use FileService to save the file - file_service = self.get_service('file') - return await file_service.save_file( - db=db, - file_data=file_data, - filename=file_name, - subdir=subdir, - file_type=file_type - ) \ No newline at end of file diff --git a/app/services/external_api/mtgjson/mtgjson_service.py b/app/services/external_api/mtgjson/mtgjson_service.py index 41b6279..b564d58 100644 --- a/app/services/external_api/mtgjson/mtgjson_service.py +++ b/app/services/external_api/mtgjson/mtgjson_service.py @@ -1,29 +1,24 @@ import os import json import zipfile -import aiohttp -import asyncio import time -import sys from typing import Dict, Any, Optional, Generator from sqlalchemy.orm import Session -from datetime import datetime -from app.models.mtgjson_card import MTGJSONCard -from app.models.mtgjson_sku import MTGJSONSKU -from app.db.database import get_db, transaction from app.services.external_api.base_external_service import BaseExternalService from app.schemas.file import FileInDB +import logging + +logger = logging.getLogger(__name__) class MTGJSONService(BaseExternalService): - def __init__(self, cache_dir: str = "app/data/cache/mtgjson", batch_size: int = 1000): + def __init__(self, cache_dir: str = "app/data/cache/mtgjson"): super().__init__(base_url="https://mtgjson.com/api/v5/") + # Ensure the cache directory exists + os.makedirs(cache_dir, exist_ok=True) self.cache_dir = cache_dir self.identifiers_dir = os.path.join(cache_dir, "identifiers") self.skus_dir = os.path.join(cache_dir, "skus") - self.batch_size = batch_size - - # Create necessary directories - os.makedirs(cache_dir, exist_ok=True) + # Ensure subdirectories exist os.makedirs(self.identifiers_dir, exist_ok=True) os.makedirs(self.skus_dir, exist_ok=True) @@ -46,112 +41,133 @@ class MTGJSONService(BaseExternalService): print(f"Downloading {url}...") start_time = time.time() - async with aiohttp.ClientSession() as session: - async with session.get(url) as response: - if response.status == 200: - file_data = await response.read() - return await self.save_file( - db=db, - file_data=file_data, - file_name=filename, - subdir=f"mtgjson/{subdir}", - file_type=response.headers.get('content-type', 'application/octet-stream') - ) - else: - raise Exception(f"Failed to download file from {url}. Status: {response.status}") + # Use the base external service's _make_request method + file_data = await self._make_request( + method="GET", + endpoint=url.replace(self.base_url, ""), + binary=True + ) + + # Save the file using the file service + return await self.file_service.save_file( + db=db, + file_data=file_data, + filename=filename, + subdir=f"mtgjson/{subdir}", + file_type="application/zip", + content_type="application/zip" + ) - async def _unzip_file(self, zip_path: str, extract_dir: str) -> str: - """Unzip a file to the specified directory and return the path to the extracted JSON file""" - with zipfile.ZipFile(zip_path, 'r') as zip_ref: - json_filename = zip_ref.namelist()[0] - zip_ref.extractall(extract_dir) - return os.path.join(extract_dir, json_filename) + async def _unzip_file(self, file_record: FileInDB, subdir: str, db: Session) -> str: + """Unzip a file to the specified subdirectory and return the path to the extracted JSON file""" + try: + # Use the appropriate subdirectory based on the type + extract_path = self.identifiers_dir if subdir == "identifiers" else self.skus_dir + os.makedirs(extract_path, exist_ok=True) + + with zipfile.ZipFile(file_record.path, 'r') as zip_ref: + json_filename = zip_ref.namelist()[0] + zip_ref.extractall(extract_path) + json_path = os.path.join(extract_path, json_filename) + + # Create a file record for the extracted JSON file + with open(json_path, 'r') as f: + json_data = f.read() + json_file_record = await self.file_service.save_file( + db=db, + file_data=json_data, + filename=json_filename, + subdir=f"mtgjson/{subdir}", + file_type="application/json", + content_type="application/json" + ) + + return str(json_file_record.path) + except Exception as e: + logger.error(f"Error unzipping file: {e}") + raise def _stream_json_file(self, file_path: str) -> Generator[Dict[str, Any], None, None]: - """Stream a JSON file and yield items one at a time""" - print(f"Starting to stream JSON file: {file_path}") - with open(file_path, 'r') as f: - # Load the entire file since MTGJSON uses a specific format - data = json.load(f) - - # First yield the meta data - if "meta" in data: - yield {"type": "meta", "data": data["meta"]} - - # Then yield each item in the data section - if "data" in data: - for key, value in data["data"].items(): - yield {"type": "item", "data": {key: value}} - - async def _process_batch(self, db: Session, items: list, model_class) -> int: - """Process a batch of items and add them to the database""" - processed = 0 - with transaction(db): - for item in items: - if model_class == MTGJSONCard: - # Check if card already exists - existing_card = db.query(MTGJSONCard).filter(MTGJSONCard.card_id == item["card_id"]).first() - if existing_card: + """Stream a JSON file and yield items one at a time using a streaming parser""" + logger.info(f"Starting to stream JSON file: {file_path}") + try: + with open(file_path, 'r') as f: + # First, we need to find the start of the data section + data_started = False + current_key = None + current_value = [] + brace_count = 0 + + for line in f: + line = line.strip() + if not line: continue - new_item = MTGJSONCard( - card_id=item["card_id"], - name=item["name"], - set_code=item["set_code"], - uuid=item["uuid"], - abu_id=item.get("abu_id"), - card_kingdom_etched_id=item.get("card_kingdom_etched_id"), - card_kingdom_foil_id=item.get("card_kingdom_foil_id"), - card_kingdom_id=item.get("card_kingdom_id"), - cardsphere_id=item.get("cardsphere_id"), - cardsphere_foil_id=item.get("cardsphere_foil_id"), - cardtrader_id=item.get("cardtrader_id"), - csi_id=item.get("csi_id"), - mcm_id=item.get("mcm_id"), - mcm_meta_id=item.get("mcm_meta_id"), - miniaturemarket_id=item.get("miniaturemarket_id"), - mtg_arena_id=item.get("mtg_arena_id"), - mtgjson_foil_version_id=item.get("mtgjson_foil_version_id"), - mtgjson_non_foil_version_id=item.get("mtgjson_non_foil_version_id"), - mtgjson_v4_id=item.get("mtgjson_v4_id"), - mtgo_foil_id=item.get("mtgo_foil_id"), - mtgo_id=item.get("mtgo_id"), - multiverse_id=item.get("multiverse_id"), - scg_id=item.get("scg_id"), - scryfall_id=item.get("scryfall_id"), - scryfall_card_back_id=item.get("scryfall_card_back_id"), - scryfall_oracle_id=item.get("scryfall_oracle_id"), - scryfall_illustration_id=item.get("scryfall_illustration_id"), - tcgplayer_product_id=item.get("tcgplayer_product_id"), - tcgplayer_etched_product_id=item.get("tcgplayer_etched_product_id"), - tnt_id=item.get("tnt_id") - ) - else: # MTGJSONSKU - # Check if SKU already exists - existing_sku = db.query(MTGJSONSKU).filter(MTGJSONSKU.sku_id == item["sku_id"]).first() - if existing_sku: - continue - - new_item = MTGJSONSKU( - sku_id=str(item["sku_id"]), - product_id=str(item["product_id"]), - condition=item["condition"], - finish=item["finish"], - language=item["language"], - printing=item["printing"], - card_id=item["card_id"] - ) - db.add(new_item) - processed += 1 + if not data_started: + if '"data":' in line: + data_started = True + # Skip the opening brace of the data object + line = line[line.find('"data":') + 7:].strip() + if line.startswith('{'): + line = line[1:].strip() + else: + # Yield meta data if found + if '"meta":' in line: + meta_start = line.find('"meta":') + 7 + meta_end = line.rfind('}') + if meta_end > meta_start: + meta_json = line[meta_start:meta_end + 1] + try: + meta_data = json.loads(meta_json) + yield {"type": "meta", "data": meta_data} + except json.JSONDecodeError as e: + logger.warning(f"Failed to parse meta data: {e}") + continue + + # Process the data section + if data_started: + if not current_key: + # Look for a new key + if '"' in line: + key_start = line.find('"') + 1 + key_end = line.find('"', key_start) + if key_end > key_start: + current_key = line[key_start:key_end] + # Get the rest of the line after the key + line = line[key_end + 1:].strip() + if ':' in line: + line = line[line.find(':') + 1:].strip() + + if current_key: + # Accumulate the value + current_value.append(line) + brace_count += line.count('{') - line.count('}') + + if brace_count == 0 and line.endswith(','): + # We have a complete value + value_str = ''.join(current_value).rstrip(',') + try: + value = json.loads(value_str) + yield {"type": "item", "data": {current_key: value}} + except json.JSONDecodeError as e: + logger.warning(f"Failed to parse value for key {current_key}: {e}") + current_key = None + current_value = [] + + except Exception as e: + logger.error(f"Error streaming JSON file: {e}") + raise - return processed - - async def download_and_process_identifiers(self, db: Session) -> Dict[str, int]: - """Download, unzip and process AllIdentifiers.json.zip using streaming""" - self._print_progress("Starting MTGJSON identifiers processing...") - start_time = time.time() + async def get_identifiers(self, db: Session) -> Generator[Dict[str, Any], None, None]: + """Download and get MTGJSON identifiers data""" + # Check if we have a cached version + cached_file = await self.file_service.get_file_by_filename(db, "AllIdentifiers.json") + if cached_file: + # Ensure the file exists at the path + if os.path.exists(cached_file.path): + return self._stream_json_file(cached_file.path) - # Download the file using FileService + # Download and process the file file_record = await self._download_file( db=db, url="https://mtgjson.com/api/v5/AllIdentifiers.json.zip", @@ -159,87 +175,22 @@ class MTGJSONService(BaseExternalService): subdir="identifiers" ) - # Get the file path from the database record - zip_path = file_record.path + # Unzip and process the file + json_path = await self._unzip_file(file_record, "identifiers", db) - cards_processed = 0 - current_batch = [] - total_cards = 0 - last_progress_time = time.time() - - self._print_progress("Processing cards...") - try: - for item in self._stream_json_file(zip_path): - if item["type"] == "meta": - self._print_progress(f"Processing MTGJSON data version {item['data'].get('version')} from {item['data'].get('date')}") - continue - - card_data = item["data"] - card_id = list(card_data.keys())[0] - card_info = card_data[card_id] - total_cards += 1 - - current_batch.append({ - "card_id": card_id, - "name": card_info.get("name"), - "set_code": card_info.get("setCode"), - "uuid": card_info.get("uuid"), - "abu_id": card_info.get("identifiers", {}).get("abuId"), - "card_kingdom_etched_id": card_info.get("identifiers", {}).get("cardKingdomEtchedId"), - "card_kingdom_foil_id": card_info.get("identifiers", {}).get("cardKingdomFoilId"), - "card_kingdom_id": card_info.get("identifiers", {}).get("cardKingdomId"), - "cardsphere_id": card_info.get("identifiers", {}).get("cardsphereId"), - "cardsphere_foil_id": card_info.get("identifiers", {}).get("cardsphereFoilId"), - "cardtrader_id": card_info.get("identifiers", {}).get("cardtraderId"), - "csi_id": card_info.get("identifiers", {}).get("csiId"), - "mcm_id": card_info.get("identifiers", {}).get("mcmId"), - "mcm_meta_id": card_info.get("identifiers", {}).get("mcmMetaId"), - "miniaturemarket_id": card_info.get("identifiers", {}).get("miniaturemarketId"), - "mtg_arena_id": card_info.get("identifiers", {}).get("mtgArenaId"), - "mtgjson_foil_version_id": card_info.get("identifiers", {}).get("mtgjsonFoilVersionId"), - "mtgjson_non_foil_version_id": card_info.get("identifiers", {}).get("mtgjsonNonFoilVersionId"), - "mtgjson_v4_id": card_info.get("identifiers", {}).get("mtgjsonV4Id"), - "mtgo_foil_id": card_info.get("identifiers", {}).get("mtgoFoilId"), - "mtgo_id": card_info.get("identifiers", {}).get("mtgoId"), - "multiverse_id": card_info.get("identifiers", {}).get("multiverseId"), - "scg_id": card_info.get("identifiers", {}).get("scgId"), - "scryfall_id": card_info.get("identifiers", {}).get("scryfallId"), - "scryfall_card_back_id": card_info.get("identifiers", {}).get("scryfallCardBackId"), - "scryfall_oracle_id": card_info.get("identifiers", {}).get("scryfallOracleId"), - "scryfall_illustration_id": card_info.get("identifiers", {}).get("scryfallIllustrationId"), - "tcgplayer_product_id": card_info.get("identifiers", {}).get("tcgplayerProductId"), - "tcgplayer_etched_product_id": card_info.get("identifiers", {}).get("tcgplayerEtchedProductId"), - "tnt_id": card_info.get("identifiers", {}).get("tntId"), - "data": card_info - }) - - if len(current_batch) >= self.batch_size: - batch_processed = await self._process_batch(db, current_batch, MTGJSONCard) - cards_processed += batch_processed - current_batch = [] - current_time = time.time() - if current_time - last_progress_time >= 1.0: # Update progress every second - self._print_progress(f"\r{self._format_progress(cards_processed, total_cards, start_time)}", end="") - last_progress_time = current_time - except Exception as e: - self._print_progress(f"\nError during processing: {str(e)}") - raise - - # Process remaining items - if current_batch: - batch_processed = await self._process_batch(db, current_batch, MTGJSONCard) - cards_processed += batch_processed - - total_time = time.time() - start_time - self._print_progress(f"\nProcessing complete! Processed {cards_processed} cards in {total_time:.1f} seconds") - return {"cards_processed": cards_processed} + # Return a generator that streams the JSON file + return self._stream_json_file(json_path) - async def download_and_process_skus(self, db: Session) -> Dict[str, int]: - """Download, unzip and process TcgplayerSkus.json.zip using streaming""" - self._print_progress("Starting MTGJSON SKUs processing...") - start_time = time.time() + async def get_skus(self, db: Session) -> Generator[Dict[str, Any], None, None]: + """Download and get MTGJSON SKUs data""" + # Check if we have a cached version + cached_file = await self.file_service.get_file_by_filename(db, "TcgplayerSkus.json") + if cached_file: + # Ensure the file exists at the path + if os.path.exists(cached_file.path): + return self._stream_json_file(cached_file.path) - # Download the file using FileService + # Download and process the file file_record = await self._download_file( db=db, url="https://mtgjson.com/api/v5/TcgplayerSkus.json.zip", @@ -247,64 +198,21 @@ class MTGJSONService(BaseExternalService): subdir="skus" ) - # Get the file path from the database record - zip_path = file_record.path + # Unzip and process the file + json_path = await self._unzip_file(file_record, "skus", db) - skus_processed = 0 - current_batch = [] - total_skus = 0 - last_progress_time = time.time() - - self._print_progress("Processing SKUs...") - try: - for item in self._stream_json_file(zip_path): - if item["type"] == "meta": - self._print_progress(f"Processing MTGJSON SKUs version {item['data'].get('version')} from {item['data'].get('date')}") - continue - - # The data structure is {card_uuid: [sku1, sku2, ...]} - for card_uuid, sku_list in item["data"].items(): - for sku in sku_list: - total_skus += 1 - current_batch.append({ - "sku_id": str(sku.get("skuId")), - "product_id": str(sku.get("productId")), - "condition": sku.get("condition"), - "finish": sku.get("finish"), - "language": sku.get("language"), - "printing": sku.get("printing"), - "card_id": card_uuid, - "data": sku - }) - - if len(current_batch) >= self.batch_size: - batch_processed = await self._process_batch(db, current_batch, MTGJSONSKU) - skus_processed += batch_processed - current_batch = [] - current_time = time.time() - if current_time - last_progress_time >= 1.0: # Update progress every second - self._print_progress(f"\r{self._format_progress(skus_processed, total_skus, start_time)}", end="") - last_progress_time = current_time - except Exception as e: - self._print_progress(f"\nError during processing: {str(e)}") - raise - - # Process remaining items - if current_batch: - batch_processed = await self._process_batch(db, current_batch, MTGJSONSKU) - skus_processed += batch_processed - - total_time = time.time() - start_time - self._print_progress(f"\nProcessing complete! Processed {skus_processed} SKUs in {total_time:.1f} seconds") - return {"skus_processed": skus_processed} + # Return a generator that streams the JSON file + return self._stream_json_file(json_path) - async def clear_cache(self) -> None: + async def clear_cache(self, db: Session) -> None: """Clear all cached data""" - for subdir in ["identifiers", "skus"]: - dir_path = os.path.join(self.cache_dir, subdir) - if os.path.exists(dir_path): - for filename in os.listdir(dir_path): - file_path = os.path.join(dir_path, filename) - if os.path.isfile(file_path): - os.unlink(file_path) - print("MTGJSON cache cleared") + try: + # Delete all files in the mtgjson subdirectory + files = await self.file_service.list_files(db, file_type=["json", "zip"]) + for file in files: + if file.path.startswith("mtgjson/"): + await self.file_service.delete_file(db, file.id) + logger.info("MTGJSON cache cleared") + except Exception as e: + logger.error(f"Error clearing cache: {e}") + raise diff --git a/app/services/external_api/tcgcsv/tcgcsv_service.py b/app/services/external_api/tcgcsv/tcgcsv_service.py index 35c86b1..529b51b 100644 --- a/app/services/external_api/tcgcsv/tcgcsv_service.py +++ b/app/services/external_api/tcgcsv/tcgcsv_service.py @@ -3,256 +3,49 @@ from datetime import datetime, timedelta import csv import io from app.services.external_api.base_external_service import BaseExternalService -from app.models.tcgplayer_group import TCGPlayerGroup -from app.models.tcgplayer_product import TCGPlayerProduct -from app.models.tcgplayer_category import TCGPlayerCategory -from app.db.database import get_db, transaction -from sqlalchemy.orm import Session -import py7zr -import os -from app.schemas.file import FileInDB class TCGCSVService(BaseExternalService): def __init__(self): super().__init__(base_url="https://tcgcsv.com/") - async def get_groups(self, game_ids: List[int]) -> Dict[str, Any]: + async def get_groups(self, game_id: int) -> Dict[str, Any]: """Fetch groups for specific game IDs from TCGCSV API""" - game_ids_str = ",".join(map(str, game_ids)) - endpoint = f"tcgplayer/{game_ids_str}/groups" + endpoint = f"tcgplayer/{game_id}/groups" return await self._make_request("GET", endpoint) - async def get_products_and_prices(self, game_ids: List[int], group_id: int) -> List[Dict[str, Any]]: + async def get_products_and_prices(self, game_id: str, group_id: int) -> str: """Fetch products and prices for a specific group from TCGCSV API""" - game_ids_str = ",".join(map(str, game_ids)) - endpoint = f"tcgplayer/{game_ids_str}/{group_id}/ProductsAndPrices.csv" - response = await self._make_request("GET", endpoint, headers={"Accept": "text/csv"}) - - # Parse CSV response - csv_data = io.StringIO(response) - reader = csv.DictReader(csv_data) - return list(reader) + endpoint = f"tcgplayer/{game_id}/{group_id}/ProductsAndPrices.csv" + return await self._make_request("GET", endpoint, headers={"Accept": "text/csv"}) async def get_categories(self) -> Dict[str, Any]: """Fetch all categories from TCGCSV API""" endpoint = "tcgplayer/categories" return await self._make_request("GET", endpoint) - async def get_archived_prices_for_date(self, db: Session, date_str: str) -> str: + async def get_archived_prices_for_date(self, date_str: str) -> bytes: """Fetch archived prices from TCGCSV API""" - # Download the archive file endpoint = f"archive/tcgplayer/prices-{date_str}.ppmd.7z" - response = await self._make_request("GET", endpoint, binary=True) - - # Save the archive file using FileService - file_record = await self.save_file( - db=db, - file_data=response, - file_name=f"prices-{date_str}.ppmd.7z", - subdir=f"tcgcsv/prices/zip", - file_type="application/x-7z-compressed" - ) - - # Extract the 7z file - with py7zr.SevenZipFile(file_record.path, 'r') as archive: - # Extract to a directory named after the date - extract_path = f"app/data/cache/tcgcsv/prices/{date_str}" - os.makedirs(extract_path, exist_ok=True) - archive.extractall(path=extract_path) - - return date_str + return await self._make_request("GET", endpoint, binary=True) - async def get_archived_prices_for_date_range(self, start_date: str, end_date: str): - """Fetch archived prices for a date range from TCGCSV API""" - # Convert string dates to datetime objects + async def get_tcgcsv_date_range(self, start_date: datetime, end_date: datetime) -> List[datetime]: + """Get a date range for a given start and end date""" start_dt = datetime.strptime(start_date, "%Y-%m-%d") end_dt = datetime.strptime(end_date, "%Y-%m-%d") - - # Set minimum start date - min_start_date = datetime.strptime("2025-02-08", "%Y-%m-%d") + min_start_date = datetime.strptime("2024-02-08", "%Y-%m-%d") + max_end_date = datetime.now() if start_dt < min_start_date: start_dt = min_start_date - - # Set maximum end date to today - today = datetime.now() - if end_dt > today: - end_dt = today - - # Generate date range + if end_dt > max_end_date: + end_dt = max_end_date date_range = [] current_dt = start_dt while current_dt <= end_dt: date_range.append(current_dt.strftime("%Y-%m-%d")) current_dt += timedelta(days=1) - - # Process each date - for date_str in date_range: - await self.get_archived_prices_for_date(date_str) - - async def sync_groups_to_db(self, db: Session, game_ids: List[int]) -> List[TCGPlayerGroup]: - """Fetch groups from API and sync them to the database""" - response = await self.get_groups(game_ids) - - if not response.get("success"): - raise Exception(f"Failed to fetch groups: {response.get('errors')}") - - groups = response.get("results", []) - synced_groups = [] - with transaction(db): - for group_data in groups: - # Convert string dates to datetime objects - published_on = datetime.fromisoformat(group_data["publishedOn"].replace("Z", "+00:00")) if group_data.get("publishedOn") else None - modified_on = datetime.fromisoformat(group_data["modifiedOn"].replace("Z", "+00:00")) if group_data.get("modifiedOn") else None - - # Check if group already exists - existing_group = db.query(TCGPlayerGroup).filter(TCGPlayerGroup.group_id == group_data["groupId"]).first() - - if existing_group: - # Update existing group - for key, value in { - "name": group_data["name"], - "abbreviation": group_data.get("abbreviation"), - "is_supplemental": group_data.get("isSupplemental", False), - "published_on": published_on, - "modified_on": modified_on, - "category_id": group_data.get("categoryId") - }.items(): - setattr(existing_group, key, value) - synced_groups.append(existing_group) - else: - # Create new group - new_group = TCGPlayerGroup( - group_id=group_data["groupId"], - name=group_data["name"], - abbreviation=group_data.get("abbreviation"), - is_supplemental=group_data.get("isSupplemental", False), - published_on=published_on, - modified_on=modified_on, - category_id=group_data.get("categoryId") - ) - db.add(new_group) - synced_groups.append(new_group) - - return synced_groups - - async def sync_products_to_db(self, db: Session, game_id: int, group_id: int) -> List[TCGPlayerProduct]: - """Fetch products and prices for a group and sync them to the database""" - products_data = await self.get_products_and_prices(game_id, group_id) - synced_products = [] - - for product_data in products_data: - # Convert string dates to datetime objects - modified_on = datetime.fromisoformat(product_data["modifiedOn"].replace("Z", "+00:00")) if product_data.get("modifiedOn") else None - - # Convert price strings to floats, handling empty strings - def parse_price(price_str): - return float(price_str) if price_str else None - - # Check if product already exists - existing_product = db.query(TCGPlayerProduct).filter(TCGPlayerProduct.product_id == int(product_data["productId"])).first() - - if existing_product: - # Update existing product - for key, value in { - "name": product_data["name"], - "clean_name": product_data.get("cleanName"), - "image_url": product_data.get("imageUrl"), - "category_id": int(product_data["categoryId"]), - "group_id": int(product_data["groupId"]), - "url": product_data.get("url"), - "modified_on": modified_on, - "image_count": int(product_data.get("imageCount", 0)), - "ext_rarity": product_data.get("extRarity"), - "ext_number": product_data.get("extNumber"), - "low_price": parse_price(product_data.get("lowPrice")), - "mid_price": parse_price(product_data.get("midPrice")), - "high_price": parse_price(product_data.get("highPrice")), - "market_price": parse_price(product_data.get("marketPrice")), - "direct_low_price": parse_price(product_data.get("directLowPrice")), - "sub_type_name": product_data.get("subTypeName") - }.items(): - setattr(existing_product, key, value) - synced_products.append(existing_product) - else: - # Create new product - with transaction(db): - new_product = TCGPlayerProduct( - product_id=int(product_data["productId"]), - name=product_data["name"], - clean_name=product_data.get("cleanName"), - image_url=product_data.get("imageUrl"), - category_id=int(product_data["categoryId"]), - group_id=int(product_data["groupId"]), - url=product_data.get("url"), - modified_on=modified_on, - image_count=int(product_data.get("imageCount", 0)), - ext_rarity=product_data.get("extRarity"), - ext_number=product_data.get("extNumber"), - low_price=parse_price(product_data.get("lowPrice")), - mid_price=parse_price(product_data.get("midPrice")), - high_price=parse_price(product_data.get("highPrice")), - market_price=parse_price(product_data.get("marketPrice")), - direct_low_price=parse_price(product_data.get("directLowPrice")), - sub_type_name=product_data.get("subTypeName") - ) - db.add(new_product) - synced_products.append(new_product) - - return synced_products - - async def sync_categories_to_db(self, db: Session) -> List[TCGPlayerCategory]: - """Fetch categories from API and sync them to the database""" - response = await self.get_categories() - - if not response.get("success"): - raise Exception(f"Failed to fetch categories: {response.get('errors')}") - - categories = response.get("results", []) - synced_categories = [] - with transaction(db): - for category_data in categories: - # Convert string dates to datetime objects - modified_on = datetime.fromisoformat(category_data["modifiedOn"].replace("Z", "+00:00")) if category_data.get("modifiedOn") else None - - # Check if category already exists - existing_category = db.query(TCGPlayerCategory).filter(TCGPlayerCategory.category_id == category_data["categoryId"]).first() - - if existing_category: - # Update existing category - for key, value in { - "name": category_data["name"], - "display_name": category_data.get("displayName"), - "seo_category_name": category_data.get("seoCategoryName"), - "category_description": category_data.get("categoryDescription"), - "category_page_title": category_data.get("categoryPageTitle"), - "sealed_label": category_data.get("sealedLabel"), - "non_sealed_label": category_data.get("nonSealedLabel"), - "condition_guide_url": category_data.get("conditionGuideUrl"), - "is_scannable": category_data.get("isScannable", False), - "popularity": category_data.get("popularity", 0), - "is_direct": category_data.get("isDirect", False), - "modified_on": modified_on - }.items(): - setattr(existing_category, key, value) - synced_categories.append(existing_category) - else: - # Create new category - new_category = TCGPlayerCategory( - category_id=category_data["categoryId"], - name=category_data["name"], - display_name=category_data.get("displayName"), - seo_category_name=category_data.get("seoCategoryName"), - category_description=category_data.get("categoryDescription"), - category_page_title=category_data.get("categoryPageTitle"), - sealed_label=category_data.get("sealedLabel"), - non_sealed_label=category_data.get("nonSealedLabel"), - condition_guide_url=category_data.get("conditionGuideUrl"), - is_scannable=category_data.get("isScannable", False), - popularity=category_data.get("popularity", 0), - is_direct=category_data.get("isDirect", False), - modified_on=modified_on - ) - db.add(new_category) - synced_categories.append(new_category) - - return synced_categories + return date_range + + async def get_archived_prices_for_date_range(self, start_date: datetime, end_date: datetime) -> List[datetime]: + """Fetch archived prices for a date range from TCGCSV API""" + date_range = await self.get_tcgcsv_date_range(start_date, end_date) + return date_range diff --git a/app/services/file_service.py b/app/services/file_service.py index 0685d79..c6c1a40 100644 --- a/app/services/file_service.py +++ b/app/services/file_service.py @@ -150,3 +150,10 @@ class FileService: return FileInDB.model_validate(file_record) else: return None + + async def get_file_by_filename(self, db: Session, filename: str) -> Optional[FileInDB]: + """Get a file record from the database by filename""" + file_record = db.query(File).filter(File.name == filename).first() + if file_record: + return FileInDB.model_validate(file_record) + return None diff --git a/app/services/label_printer_service.py b/app/services/label_printer_service.py index 6e95fda..18ca827 100644 --- a/app/services/label_printer_service.py +++ b/app/services/label_printer_service.py @@ -142,13 +142,14 @@ class LabelPrinterService: logger.error(f"Unexpected error in _send_print_request: {e}") return False - async def print_file(self, file_path: Union[str, Path, FileInDB], label_size: Literal["dk1201", "dk1241"], label_type: Optional[Literal["address_label", "packing_slip", "set_label"]] = None) -> bool: + async def print_file(self, file_path: Union[str, Path, FileInDB], label_size: Literal["dk1201", "dk1241"], label_type: Optional[Literal["address_label", "packing_slip", "set_label", "return_label", "pirate_ship_label"]] = None, copies: Optional[int] = None) -> bool: """Print a PDF or PNG file to the label printer. Args: file_path: Path to the PDF or PNG file, or a FileInDB object label_size: Size of label to use ("dk1201" or "dk1241") label_type: Type of label to use ("address_label" or "packing_slip" or "set_label") + copies: Optional number of copies to print. If None, prints once. Returns: bool: True if print was successful, False otherwise @@ -206,7 +207,7 @@ class LabelPrinterService: resized_image = resized_image.resize((991, 306), Image.Resampling.LANCZOS) # if file path contains address_label, rotate image 90 degrees - if label_type == "address_label" or label_type == "set_label": + if label_type == "address_label" or label_type == "set_label" or label_type == "return_label": rotate = "90" cut = False else: @@ -240,16 +241,30 @@ class LabelPrinterService: with open(cache_path, "wb") as f: f.write(converted_image) - # Send to API - if not await self._send_print_request(cache_path): - logger.error(f"Failed to print page {i+1}") - return False - - # Wait for printer to be ready before processing next page - if i < len(images) - 1: # Don't wait after the last page - if not await self._wait_for_printer_ready(): - logger.error("Printer not ready for next page") + if copies: + # Send to API for each copy + for copy in range(copies): + logger.info(f"Printing copy {copy + 1} of {copies}") + if not await self._send_print_request(cache_path): + logger.error(f"Failed to print page {i+1}, copy {copy + 1}") + return False + + # Wait for printer to be ready before next copy or page + if copy < copies - 1 or i < len(images) - 1: + if not await self._wait_for_printer_ready(): + logger.error("Printer not ready for next copy/page") + return False + else: + # Send to API once (original behavior) + if not await self._send_print_request(cache_path): + logger.error(f"Failed to print page {i+1}") return False + + # Wait for printer to be ready before processing next page + if i < len(images) - 1: # Don't wait after the last page + if not await self._wait_for_printer_ready(): + logger.error("Printer not ready for next page") + return False return True diff --git a/app/services/scheduler/scheduler_service.py b/app/services/scheduler/scheduler_service.py index 0a01300..fc0b569 100644 --- a/app/services/scheduler/scheduler_service.py +++ b/app/services/scheduler/scheduler_service.py @@ -1,4 +1,4 @@ -from app.db.database import transaction, get_db +from app.db.database import transaction from app.services.scheduler.base_scheduler import BaseScheduler import logging @@ -17,11 +17,10 @@ class SchedulerService: self._service_manager = ServiceManager() return self._service_manager - async def update_open_orders_hourly(self): + async def update_open_orders_hourly(self, db): """ Hourly update of orders from TCGPlayer API to database """ - db = next(get_db()) try: logger.info("Starting hourly order update") # Get order management service @@ -39,14 +38,11 @@ class SchedulerService: except Exception as e: logger.error(f"Error updating open orders: {str(e)}") raise - finally: - db.close() - async def update_all_orders_daily(self): + async def update_all_orders_daily(self, db): """ Daily update of all orders from TCGPlayer API to database """ - db = next(get_db()) try: logger.info("Starting daily order update") # Get order management service @@ -64,21 +60,19 @@ class SchedulerService: except Exception as e: logger.error(f"Error updating all orders: {str(e)}") raise - finally: - db.close() - async def start_scheduled_tasks(self): + async def start_scheduled_tasks(self, db): """Start all scheduled tasks""" # Schedule open orders update to run hourly at 00 minutes await self.scheduler.schedule_task( task_name="update_open_orders_hourly", - func=self.update_open_orders_hourly, + func=lambda: self.update_open_orders_hourly(db), interval_seconds=60 * 60, # 1 hour ) # Schedule all orders update to run daily at 1 AM await self.scheduler.schedule_task( task_name="update_all_orders_daily", - func=self.update_all_orders_daily, + func=lambda: self.update_all_orders_daily(db), interval_seconds=24 * 60 * 60, # 24 hours ) diff --git a/app/services/service_manager.py b/app/services/service_manager.py index a01c213..5379d2c 100644 --- a/app/services/service_manager.py +++ b/app/services/service_manager.py @@ -26,7 +26,9 @@ class ServiceManager: 'set_label': 'app.services.set_label_service.SetLabelService', 'data_initialization': 'app.services.data_initialization.DataInitializationService', 'scheduler': 'app.services.scheduler.scheduler_service.SchedulerService', - 'file': 'app.services.file_service.FileService' + 'file': 'app.services.file_service.FileService', + 'tcgcsv': 'app.services.external_api.tcgcsv.tcgcsv_service.TCGCSVService', + 'mtgjson': 'app.services.external_api.mtgjson.mtgjson_service.MTGJSONService' } self._service_configs = { 'label_printer': {'printer_api_url': "http://192.168.1.110:8000"}, diff --git a/app/static/app.js b/app/static/app.js index 1e68cfb..b6c9785 100644 --- a/app/static/app.js +++ b/app/static/app.js @@ -228,6 +228,114 @@ async function generateAddressLabels() { } } +// Show return labels modal +function showReturnLabelsModal() { + const modal = document.getElementById('returnLabelsModal'); + modal.classList.remove('hidden'); + modal.classList.add('flex'); +} + +// Close return labels modal +function closeReturnLabelsModal() { + const modal = document.getElementById('returnLabelsModal'); + modal.classList.remove('flex'); + modal.classList.add('hidden'); +} + +// Submit return labels request +async function submitReturnLabels() { + try { + const numberOfLabels = document.getElementById('numberOfLabels').value; + if (!numberOfLabels || numberOfLabels < 1) { + showToast('Please enter a valid number of labels', 'error'); + return; + } + + setLoading(true); + const response = await fetch(`${API_BASE_URL}/orders/generate-return-labels`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + number_of_labels: parseInt(numberOfLabels) + }) + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.detail || 'Failed to generate return labels'); + } + + showToast('Return labels generated successfully'); + closeReturnLabelsModal(); + } catch (error) { + showToast('Error generating return labels: ' + error.message, 'error'); + } finally { + setLoading(false); + } +} + +// Generate return labels (opens modal) +function generateReturnLabels() { + showReturnLabelsModal(); +} + +// Show Pirate Ship label modal +function showPirateShipModal() { + const modal = document.getElementById('pirateShipModal'); + modal.classList.remove('hidden'); + modal.classList.add('flex'); +} + +// Close Pirate Ship label modal +function closePirateShipModal() { + const modal = document.getElementById('pirateShipModal'); + modal.classList.remove('flex'); + modal.classList.add('hidden'); + // Reset file input + document.getElementById('pirateShipFile').value = ''; +} + +// Submit Pirate Ship label +async function submitPirateShipLabel() { + try { + const fileInput = document.getElementById('pirateShipFile'); + const file = fileInput.files[0]; + + if (!file) { + showToast('Please select a PDF file', 'error'); + return; + } + + if (file.type !== 'application/pdf') { + showToast('Please select a valid PDF file', 'error'); + return; + } + + setLoading(true); + const formData = new FormData(); + formData.append('file', file); + + const response = await fetch(`${API_BASE_URL}/orders/print-pirate-ship-label`, { + method: 'POST', + body: formData + }); + + if (!response.ok) { + const errorData = await response.json(); + throw new Error(errorData.detail || 'Failed to print Pirate Ship label'); + } + + showToast('Pirate Ship label printed successfully'); + closePirateShipModal(); + } catch (error) { + showToast('Error printing Pirate Ship label: ' + error.message, 'error'); + } finally { + setLoading(false); + } +} + // Load orders when page loads document.addEventListener('DOMContentLoaded', () => { fetchOrders(); diff --git a/app/static/index.html b/app/static/index.html index 2c5ab1d..450564b 100644 --- a/app/static/index.html +++ b/app/static/index.html @@ -39,6 +39,12 @@ + +
@@ -49,6 +55,44 @@
+ + + + + +