procbay-schema 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +189 -0
- package/package.json +77 -0
- package/prisma/.env +13 -0
- package/prisma/migrations/20250116142512_init_user_table/migration.sql +38 -0
- package/prisma/migrations/20250116142709_init_role_table/migration.sql +20 -0
- package/prisma/migrations/20250116143847_init_user_role_table/migration.sql +20 -0
- package/prisma/migrations/20250116144035_init_permission_table/migration.sql +21 -0
- package/prisma/migrations/20250116144140_init_role_permission_table/migration.sql +21 -0
- package/prisma/migrations/20250116144233_init_department_table/migration.sql +20 -0
- package/prisma/migrations/20250116144345_init_user_department_table/migration.sql +20 -0
- package/prisma/migrations/20250116152941_init_serial_number_table/migration.sql +17 -0
- package/prisma/migrations/20250116153048_init_category_table/migration.sql +22 -0
- package/prisma/migrations/20250116153415_init_attributes_table/migration.sql +28 -0
- package/prisma/migrations/20250116153628_init_attribute_values_table/migration.sql +27 -0
- package/prisma/migrations/20250116153900_init_purchase_intake_table/migration.sql +32 -0
- package/prisma/migrations/20250116154038_init_purchase_intake_item_table/migration.sql +15 -0
- package/prisma/migrations/20250120090355_added_reset_token_column_in_user_table/migration.sql +10 -0
- package/prisma/migrations/20250120100616_init_item_table/migration.sql +42 -0
- package/prisma/migrations/20250120123720_init_vendor_table/migration.sql +39 -0
- package/prisma/migrations/20250120124526_init_vendor_categories_table/migration.sql +20 -0
- package/prisma/migrations/20250122114935_added_email_template_and_smtp_config_table/migration.sql +41 -0
- package/prisma/migrations/20250123095637_chnages_in_vendr_table/migration.sql +3 -0
- package/prisma/migrations/20250123103705_added_delated_filed_in_email_template_table/migration.sql +4 -0
- package/prisma/migrations/20250123103810_added_delated_filed_in_smtp_config_table/migration.sql +13 -0
- package/prisma/migrations/20250127123900_create_approval_heirarchy_table/migration.sql +72 -0
- package/prisma/migrations/20250128054523_make_optional_role_and_user_in_approval_hierachy/migration.sql +3 -0
- package/prisma/migrations/20250129084223_item_table_chnages/migration.sql +151 -0
- package/prisma/migrations/20250130115331_chnages_in_item_table/migration.sql +9 -0
- package/prisma/migrations/20250131054132_added_approval_journey_table/migration.sql +22 -0
- package/prisma/migrations/20250131064653_added_default_for_product_id_in_item_table/migration.sql +2 -0
- package/prisma/migrations/20250204101253_chnages_in_approval_table/migration.sql +39 -0
- package/prisma/migrations/20250206091422_added_item_document_table/migration.sql +17 -0
- package/prisma/migrations/20250207113110_added_new_column_media/migration.sql +9 -0
- package/prisma/migrations/20250207125224_added_chnages_in_pr_table/migration.sql +12 -0
- package/prisma/migrations/20250212092048_vendor_contact_table/migration.sql +30 -0
- package/prisma/migrations/20250212133620_added_tamplate_master_table/migration.sql +43 -0
- package/prisma/migrations/20250213111908_created_faq_catgory_and_faq_table/migration.sql +58 -0
- package/prisma/migrations/20250214065142_chnages_in_uom_table/migration.sql +50 -0
- package/prisma/migrations/20250217061122_corrected_email_teamplate_table/migration.sql +11 -0
- package/prisma/migrations/20250218073530_init_events/migration.sql +120 -0
- package/prisma/migrations/20250218092119_corrected_table_name/migration.sql +37 -0
- package/prisma/migrations/20250218120935_chnages_in_event_table/migration.sql +5 -0
- package/prisma/migrations/20250219083326_added_new_table_for_event_startegy/migration.sql +60 -0
- package/prisma/migrations/20250219083416_added_cms_table/migration.sql +29 -0
- package/prisma/migrations/20250219092918_alter_event_table/migration.sql +5 -0
- package/prisma/migrations/20250219093046_alter_event_to_draft/migration.sql +2 -0
- package/prisma/migrations/20250220080337_altered_event_table/migration.sql +9 -0
- package/prisma/migrations/20250221105922_added_unique_to_email_in_user_table/migration.sql +8 -0
- package/prisma/migrations/20250225063838_created_vendor_kyc_table/migration.sql +23 -0
- package/prisma/migrations/20250227060646_template_field_types_added_enum/migration.sql +14 -0
- package/prisma/migrations/20250227110306_updated_event_items_and_event_vendor_table/migration.sql +7 -0
- package/prisma/migrations/20250228060440_added_country_code_in_vendor_contact_person/migration.sql +2 -0
- package/prisma/migrations/20250228095319_init_currencies_table/migration.sql +23 -0
- package/prisma/migrations/20250303082614_added_support_ticket_table/migration.sql +89 -0
- package/prisma/migrations/20250304050248_alter_support_ticket_relations/migration.sql +35 -0
- package/prisma/migrations/20250304050613_alter_support_ticket_realtions/migration.sql +36 -0
- package/prisma/migrations/20250304061954_init_support_category_table/migration.sql +261 -0
- package/prisma/migrations/20250304092346_alter_event_vendor_table/migration.sql +2 -0
- package/prisma/migrations/20250305065430_alter_vendor_kyc_table/migration.sql +2 -0
- package/prisma/migrations/20250305111735_alter_vendor_and_user_table/migration.sql +5 -0
- package/prisma/migrations/20250307033751_alter_token_version_in_user_and_vendor_token/migration.sql +5 -0
- package/prisma/migrations/20250307034907_alter_user_and_vendor_table/migration.sql +14 -0
- package/prisma/migrations/20250307064359_chnages_in_approval_herarcy_table/migration.sql +2 -0
- package/prisma/migrations/20250307105352_alter_itme_and_vendorkyc_table/migration.sql +21 -0
- package/prisma/migrations/20250310103914_init_vendor_status_table/migration.sql +21 -0
- package/prisma/migrations/20250310105209_alter_vendor_status_table/migration.sql +18 -0
- package/prisma/migrations/20250310105413_init_vendor_kyc_status_table/migration.sql +23 -0
- package/prisma/migrations/20250311090552_alter_vendor_kyc_status_table/migration.sql +2 -0
- package/prisma/migrations/20250312055258_alter_status_column_in_event_vendors/migration.sql +12 -0
- package/prisma/migrations/20250312072145_init_vendor_event_watchlist_table/migration.sql +26 -0
- package/prisma/migrations/20250312083842_alter_vendor_event_watchlisst_table/migration.sql +41 -0
- package/prisma/migrations/20250312134730_added_chnages_in_kyc_table/migration.sql +19 -0
- package/prisma/migrations/20250317040841_init_admin_and_vendor_tables/migration.sql +38 -0
- package/prisma/migrations/20250317044110_alter_event_vendor_table/migration.sql +2 -0
- package/prisma/migrations/20250317071807_alter_rejected_reason_in_approval_journey_and_purchase_intak_table/migration.sql +5 -0
- package/prisma/migrations/20250318085504_init_customer_notification_table/migration.sql +31 -0
- package/prisma/migrations/20250318085856_alter_purchase_intake_table/migration.sql +18 -0
- package/prisma/migrations/20250319085159_alter_purchase_intake_table/migration.sql +12 -0
- package/prisma/migrations/20250320093356_init_bid_and_bidlog_table/migration.sql +75 -0
- package/prisma/migrations/20250320095501_alter_email_template_table/migration.sql +2 -0
- package/prisma/migrations/20250321053926_alter_approval_journey_table/migration.sql +2 -0
- package/prisma/migrations/20250324040851_alter_bidlog_table/migration.sql +2 -0
- package/prisma/migrations/20250324091328_init_form_master_and_dynamic_form_table/migration.sql +53 -0
- package/prisma/migrations/20250324103742_alter_bidlog_table/migration.sql +5 -0
- package/prisma/migrations/20250325052714_alter_form_master_table/migration.sql +27 -0
- package/prisma/migrations/20250327011625_init_module_and_tenant_configuration_table/migration.sql +39 -0
- package/prisma/migrations/20250403054008_alter_purchase_intake_table/migration.sql +5 -0
- package/prisma/migrations/20250404115613_init_approval_level_user/migration.sql +98 -0
- package/prisma/migrations/20250410060521_alter_approval_journey_enums/migration.sql +12 -0
- package/prisma/migrations/20250410110823_alter_purchase_intake/migration.sql +2 -0
- package/prisma/migrations/20250411062955_alter_template_field_table/migration.sql +2 -0
- package/prisma/migrations/20250414065640_alter_template/migration.sql +2 -0
- package/prisma/migrations/20250414111856_alter_event_vendors/migration.sql +2 -0
- package/prisma/migrations/20250414125356_alter_event_vendor/migration.sql +9 -0
- package/prisma/migrations/20250415063558_alter_alert_type_enum/migration.sql +2 -0
- package/prisma/migrations/20250416062508_alter_purchase_intake_table/migration.sql +15 -0
- package/prisma/migrations/20250417090325_alter_purchase_intake_table_updated_enum/migration.sql +13 -0
- package/prisma/migrations/20250417111024_alter_purchase_intake_and_purchase_intake_item/migration.sql +16 -0
- package/prisma/migrations/20250421061732_init_quotation_and_quotation_log_tables/migration.sql +96 -0
- package/prisma/migrations/20250421112331_alter_item_table_added_unique_to_slug/migration.sql +8 -0
- package/prisma/migrations/20250422060655_init_user_activity_table/migration.sql +17 -0
- package/prisma/migrations/20250423053027_/migration.sql +9 -0
- package/prisma/migrations/20250423103233_alter_user_login_activity_table/migration.sql +5 -0
- package/prisma/migrations/20250423111141_init_location_tables/migration.sql +141 -0
- package/prisma/migrations/20250424120106_alter_event_table_added_user_relation/migration.sql +2 -0
- package/prisma/migrations/20250424141637_alter_states_table/migration.sql +11 -0
- package/prisma/migrations/20250425105131_alter_user_login_activity_table/migration.sql +9 -0
- package/prisma/migrations/20250428092626_alter_location_tables/migration.sql +34 -0
- package/prisma/migrations/20250428114301_alter_location_table/migration.sql +14 -0
- package/prisma/migrations/20250429103436_alter_event_vendor_table/migration.sql +14 -0
- package/prisma/migrations/20250429135621_alter_event_vendor_table/migration.sql +5 -0
- package/prisma/migrations/20250430094809_alter_form_master_table_added_user_relation/migration.sql +2 -0
- package/prisma/migrations/20250430103440_alter_event_table/migration.sql +3 -0
- package/prisma/migrations/20250501125411_alter_strategies_table/migration.sql +2 -0
- package/prisma/migrations/20250502065554_init_location_table/migration.sql +41 -0
- package/prisma/migrations/20250505104038_alter_bid_quotation_and_dynamic_form/migration.sql +22 -0
- package/prisma/migrations/20250505105253_alter_quotation/migration.sql +5 -0
- package/prisma/migrations/20250505124851_alter_alert_enum/migration.sql +56 -0
- package/prisma/migrations/20250505133250_init_sub_module_table/migration.sql +17 -0
- package/prisma/migrations/20250506054325_alter_event_vendor_bid_status/migration.sql +14 -0
- package/prisma/migrations/20250506102135_init_counter_offer_table/migration.sql +38 -0
- package/prisma/migrations/20250506103355_alter_bid_and_quotaion_table/migration.sql +5 -0
- package/prisma/migrations/20250506110309_alter_tenant_configuration_table/migration.sql +3 -0
- package/prisma/migrations/20250506123527_alter_vendor_kyu_infor_verification_status/migration.sql +2 -0
- package/prisma/migrations/20250507055536_alter_dynamic_form_table/migration.sql +2 -0
- package/prisma/migrations/20250507070518_alter_bid_log_and_quotation_log/migration.sql +15 -0
- package/prisma/migrations/20250507130834_alter_bid_status/migration.sql +10 -0
- package/prisma/migrations/20250508065503_alter_purchase_intake_item_table/migration.sql +16 -0
- package/prisma/migrations/20250508130119_alter_purchase_intake_item/migration.sql +13 -0
- package/prisma/migrations/20250512082244_altered_template_table_to_add_currency_id/migration.sql +12 -0
- package/prisma/migrations/20250512100817_alter_approval_journey_table/migration.sql +3 -0
- package/prisma/migrations/20250513083700_alter_item_table/migration.sql +2 -0
- package/prisma/migrations/20250514100915_alter_event_table_added_template_realtion/migration.sql +2 -0
- package/prisma/migrations/20250514103503_alter_vendor_table_added_is_kyc_approved_column/migration.sql +2 -0
- package/prisma/migrations/20250520131556_init_purchase_order_table/migration.sql +52 -0
- package/prisma/migrations/20250521113946_alter_purchase_order_status_enum/migration.sql +16 -0
- package/prisma/migrations/20250522083917_alter_event_vendor_bid_status_enum/migration.sql +17 -0
- package/prisma/migrations/20250522131610_updated_vendor_table/migration.sql +16 -0
- package/prisma/migrations/20250523051058_alter_vendor_kyc_verificaiton_status_enum/migration.sql +2 -0
- package/prisma/migrations/20250526072120_alter_vendor_table/migration.sql +16 -0
- package/prisma/migrations/20250527055351_init_purchase_order_activity_log/migration.sql +41 -0
- package/prisma/migrations/20250528060657_alter_item_tale/migration.sql +14 -0
- package/prisma/migrations/20250528061946_alter_event_item_table/migration.sql +5 -0
- package/prisma/migrations/20250528081337_alter_item_table/migration.sql +2 -0
- package/prisma/migrations/20250528081524_removed_item_id_from_item_table/migration.sql +11 -0
- package/prisma/migrations/20250528081843_alter_item_table/migration.sql +2 -0
- package/prisma/migrations/20250528094057_alter_alert_type_enum/migration.sql +11 -0
- package/prisma/migrations/20250529053721_alter_added_quantity_in_purchase_order/migration.sql +2 -0
- package/prisma/migrations/20250602055114_alter_approval_journey_parent_id_to_string/migration.sql +2 -0
- package/prisma/migrations/20250602055748_alter_event_configuration_added_rule_slug/migration.sql +2 -0
- package/prisma/migrations/20250602111042_init_user_vendor_socket_token_table/migration.sql +17 -0
- package/prisma/migrations/20250602125833_alter_bidlog_and_quoatationlog_tableto_add_json_field/migration.sql +5 -0
- package/prisma/migrations/20250603063501_alter_bid_and_quoatation_table/migration.sql +29 -0
- package/prisma/migrations/20250606015045_alter_quotation_log_table/migration.sql +2 -0
- package/prisma/migrations/20250606020918_alter_quotation_table/migration.sql +2 -0
- package/prisma/migrations/20250606022901_alter_quotation_log_table/migration.sql +3 -0
- package/prisma/migrations/20250606054914_init_event_activity_logs_table/migration.sql +35 -0
- package/prisma/migrations/20250606100634_alter_added_counter_offer_status/migration.sql +5 -0
- package/prisma/migrations/20250606100908_alter_counter_offer_table/migration.sql +2 -0
- package/prisma/migrations/20250610055710_alter_enum/migration.sql +16 -0
- package/prisma/migrations/20250610060558_alter_event_and_event_vendor_db/migration.sql +14 -0
- package/prisma/migrations/20250610091013_alter_purchase_intak_item_table/migration.sql +4 -0
- package/prisma/migrations/20250610100156_alter_purchase_intake_item_table/migration.sql +19 -0
- package/prisma/migrations/20250610125706_alter_event_table/migration.sql +6 -0
- package/prisma/migrations/20250610133613_added_timestamp/migration.sql +319 -0
- package/prisma/migrations/20250611090439_init_contact_us_table/migration.sql +23 -0
- package/prisma/migrations/20250611121005_alter_event_vendor_table/migration.sql +10 -0
- package/prisma/migrations/20250612064335_alter_tenant_configuration/migration.sql +3 -0
- package/prisma/migrations/20250612094643_alter_event_vendor_bid_status_enum/migration.sql +2 -0
- package/prisma/migrations/20250618074558_alter_updated_bid_status_and_quotation_status/migration.sql +21 -0
- package/prisma/migrations/20250618122242_alter_added_event_phase_closed/migration.sql +2 -0
- package/prisma/migrations/20250620054518_alter_event_phase/migration.sql +2 -0
- package/prisma/migrations/20250620062723_alter_event_phase/migration.sql +2 -0
- package/prisma/migrations/20250620063056_alter_event_phase/migration.sql +2 -0
- package/prisma/migrations/20250620100507_alter_event_phase/migration.sql +2 -0
- package/prisma/migrations/20250627104958_alter_counter_offer_status/migration.sql +2 -0
- package/prisma/migrations/20250702095923_alter_item_table/migration.sql +74 -0
- package/prisma/migrations/20250702120134_/migration.sql +14 -0
- package/prisma/migrations/20250702150717_alter_attribute_table/migration.sql +9 -0
- package/prisma/migrations/20250703090321_alter_item_table/migration.sql +2 -0
- package/prisma/migrations/20250707054625_alter_purchase_order_table/migration.sql +15 -0
- package/prisma/migrations/20250707111354_alter_purchase_order_table_and_init_purchase_order_item_table/migration.sql +39 -0
- package/prisma/migrations/20250707111522_alter_purchase_order_item_table/migration.sql +17 -0
- package/prisma/migrations/20250710054113_alter_bid_and_quotation_status/migration.sql +31 -0
- package/prisma/migrations/20250710070813_alter_event_status/migration.sql +2 -0
- package/prisma/migrations/20250710082332_alter_bid_and_quotations_table/migration.sql +36 -0
- package/prisma/migrations/20250714102325_init_upload_log_table/migration.sql +27 -0
- package/prisma/migrations/20250716061012_alter_event_activity_logs_to_activity_logs/migration.sql +48 -0
- package/prisma/migrations/20250716071839_init_chat_thread_chat_message_and_ai_models/migration.sql +56 -0
- package/prisma/migrations/20250716135548_alter_admin_alerts_enum/migration.sql +2 -0
- package/prisma/migrations/20250717100515_init_user_event_configuration/migration.sql +21 -0
- package/prisma/migrations/20250717101037_alter_user_event_configuration_table/migration.sql +19 -0
- package/prisma/migrations/20250718071630_alter_added_module_in_upload_logs_table/migration.sql +5 -0
- package/prisma/migrations/20250718071732_alter_module_enum/migration.sql +15 -0
- package/prisma/migrations/20250721054851_init_export_log_table/migration.sql +34 -0
- package/prisma/migrations/20250722054549_init_fiscal_year_table/migration.sql +22 -0
- package/prisma/migrations/20250722072051_alter_fiscal_year_table_added_uuid/migration.sql +14 -0
- package/prisma/migrations/20250722095259_alter_fiscal_table/migration.sql +9 -0
- package/prisma/migrations/20250723071050_alter_department_table/migration.sql +14 -0
- package/prisma/migrations/20250724071201_alter_export_upload_log_enum/migration.sql +8 -0
- package/prisma/migrations/20250725094759_new_migrate/migration.sql +2 -0
- package/prisma/migrations/20250725095012_alter_migration/migration.sql +2 -0
- package/prisma/migrations/20250728072402_init_budget_management_tables/migration.sql +80 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +2609 -0
- package/prisma/seeders/approval-hierarchy.seed.js +340 -0
- package/prisma/seeders/attribute-value.seed.js +64 -0
- package/prisma/seeders/attribute.seed.js +61 -0
- package/prisma/seeders/category.seed.js +133 -0
- package/prisma/seeders/city.seed.js +147 -0
- package/prisma/seeders/country.seed.js +282 -0
- package/prisma/seeders/currency.seed.js +41 -0
- package/prisma/seeders/customer-notification.seed.js +83 -0
- package/prisma/seeders/department.seed.js +38 -0
- package/prisma/seeders/docs/CORE_SEEDER_OPTIMIZATIONS.md +270 -0
- package/prisma/seeders/docs/GEOGRAPHIC_PERFORMANCE_OPTIMIZATIONS.md +175 -0
- package/prisma/seeders/dynamic-form.seed.js +135 -0
- package/prisma/seeders/email-template.seed.js +68 -0
- package/prisma/seeders/faq-category.seed.js +56 -0
- package/prisma/seeders/faq.seed.js +61 -0
- package/prisma/seeders/form-master.seed.js +55 -0
- package/prisma/seeders/item.seed.js +133 -0
- package/prisma/seeders/permission.seed.js +102 -0
- package/prisma/seeders/region.seed.js +78 -0
- package/prisma/seeders/role-permission.seed.js +70 -0
- package/prisma/seeders/role.seed.js +38 -0
- package/prisma/seeders/seed.js +553 -0
- package/prisma/seeders/serial-number-config.seed.js +58 -0
- package/prisma/seeders/smtp-config.seed.js +61 -0
- package/prisma/seeders/state.seed.js +170 -0
- package/prisma/seeders/strategies.seed.js +54 -0
- package/prisma/seeders/subregion.seed.js +88 -0
- package/prisma/seeders/support-category.seed.js +56 -0
- package/prisma/seeders/template.seed.js +87 -0
- package/prisma/seeders/test-core-seeders.js +276 -0
- package/prisma/seeders/user-department.seed.js +66 -0
- package/prisma/seeders/user-event-configuration.seed.js +47 -0
- package/prisma/seeders/user-role.seed.js +74 -0
- package/prisma/seeders/user.seed.js +114 -0
- package/prisma/seeders/utils/bulk-seeder.js +300 -0
- package/prisma/seeders/utils/config.js +103 -0
- package/prisma/seeders/utils/connection-manager.js +380 -0
- package/prisma/seeders/utils/content-seeder.js +472 -0
- package/prisma/seeders/utils/core-seeder.js +330 -0
- package/prisma/seeders/utils/json-loader.js +69 -0
- package/prisma/seeders/utils/performance-config.js +341 -0
- package/prisma/seeders/utils/performance-helpers.js +206 -0
- package/prisma/seeders/utils/progress-tracker.js +364 -0
- package/prisma/seeders/utils/seeder-config-mapper.js +316 -0
- package/scripts/seed-databases.js +873 -0
- package/scripts/sync-schemas.js +865 -0
- package/scripts/truncate-tables.js +1048 -0
- package/src/prisma/client.d.ts +1 -0
- package/src/prisma/client.js +4 -0
- package/src/prisma/default.d.ts +1 -0
- package/src/prisma/default.js +4 -0
- package/src/prisma/edge.d.ts +1 -0
- package/src/prisma/edge.js +2084 -0
- package/src/prisma/index-browser.js +2043 -0
- package/src/prisma/index.d.ts +202051 -0
- package/src/prisma/index.js +2113 -0
- package/src/prisma/libquery_engine-darwin.dylib.node +0 -0
- package/src/prisma/libquery_engine-darwin.dylib.node.tmp24628 +0 -0
- package/src/prisma/libquery_engine-darwin.dylib.node.tmp29464 +0 -0
- package/src/prisma/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
- package/src/prisma/package.json +140 -0
- package/src/prisma/query_engine-windows.dll.node +0 -0
- package/src/prisma/query_engine-windows.dll.node.tmp4144 +0 -0
- package/src/prisma/runtime/edge-esm.js +34 -0
- package/src/prisma/runtime/edge.js +34 -0
- package/src/prisma/runtime/index-browser.d.ts +370 -0
- package/src/prisma/runtime/index-browser.js +16 -0
- package/src/prisma/runtime/library.d.ts +3647 -0
- package/src/prisma/runtime/library.js +146 -0
- package/src/prisma/runtime/react-native.js +83 -0
- package/src/prisma/runtime/wasm.js +35 -0
- package/src/prisma/schema.prisma +2609 -0
- package/src/prisma/wasm.d.ts +1 -0
- package/src/prisma/wasm.js +2043 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { PrismaClient } from "../../src/prisma/index.js";
|
|
2
|
+
import { loadContentData } from "./utils/json-loader.js";
|
|
3
|
+
import {
|
|
4
|
+
createProgressTracker,
|
|
5
|
+
logEntityError,
|
|
6
|
+
logSeederComplete,
|
|
7
|
+
logSeederStart,
|
|
8
|
+
} from "./utils/progress-tracker.js";
|
|
9
|
+
|
|
10
|
+
export const approvalHierarchy = async (prismaClient) => {
|
|
11
|
+
// Use the passed client or create new one only if needed (for standalone testing)
|
|
12
|
+
const prisma = prismaClient || new PrismaClient();
|
|
13
|
+
|
|
14
|
+
logSeederStart("approval-hierarchy");
|
|
15
|
+
|
|
16
|
+
// Load approval hierarchy from JSON
|
|
17
|
+
const hierarchyData = loadContentData("approval-hierarchy");
|
|
18
|
+
|
|
19
|
+
/// Create progress tracker
|
|
20
|
+
const tracker = createProgressTracker(
|
|
21
|
+
hierarchyData.length,
|
|
22
|
+
"approval hierarchies"
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// Get all active users (not deleted and active)
|
|
26
|
+
const activeUsers = await prisma.user.findMany({
|
|
27
|
+
where: {
|
|
28
|
+
is_deleted: false,
|
|
29
|
+
status: "Active",
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Create a map of user IDs for quick lookup
|
|
34
|
+
const activeUserMap = new Map();
|
|
35
|
+
activeUsers.forEach((user) => {
|
|
36
|
+
activeUserMap.set(user.id, user);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Make sure we have users to assign as approvers
|
|
40
|
+
if (activeUsers.length === 0) {
|
|
41
|
+
console.warn(
|
|
42
|
+
"No active users found for approval hierarchy. Please ensure users are seeded first."
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Get approver IDs from specified IDs or fallback to random selection
|
|
47
|
+
// Returns array of unique user IDs to prevent duplicates
|
|
48
|
+
const getApproverIds = (specifiedIds = [], count = 2) => {
|
|
49
|
+
// If specific IDs are provided and they exist in active users, use them
|
|
50
|
+
if (specifiedIds && specifiedIds.length > 0) {
|
|
51
|
+
// Filter specified IDs to only include active users and ensure uniqueness
|
|
52
|
+
const validApproverIds = [...new Set(specifiedIds)].filter((id) =>
|
|
53
|
+
activeUserMap.has(id)
|
|
54
|
+
);
|
|
55
|
+
if (validApproverIds.length > 0) {
|
|
56
|
+
return validApproverIds;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Fallback to random selection if no valid specified IDs
|
|
61
|
+
const userCount = Math.min(count, activeUsers.length);
|
|
62
|
+
const shuffled = [...activeUsers].sort(() => 0.5 - Math.random());
|
|
63
|
+
const selectedUsers = shuffled.slice(0, userCount);
|
|
64
|
+
return [...new Set(selectedUsers.map((user) => user.id))]; // Ensure uniqueness
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
for (const hierarchy of hierarchyData) {
|
|
68
|
+
try {
|
|
69
|
+
// Track used approvers across all levels in this hierarchy to prevent duplicates
|
|
70
|
+
const usedApproversInHierarchy = new Set();
|
|
71
|
+
|
|
72
|
+
// Check if hierarchy exists
|
|
73
|
+
const existingHierarchy = await prisma.approvalHierarchy.findFirst({
|
|
74
|
+
where: {
|
|
75
|
+
name: hierarchy.name,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
let hierarchyId;
|
|
80
|
+
|
|
81
|
+
if (!existingHierarchy) {
|
|
82
|
+
// Create approval hierarchy
|
|
83
|
+
const createdHierarchy = await prisma.approvalHierarchy.create({
|
|
84
|
+
data: {
|
|
85
|
+
name: hierarchy.name,
|
|
86
|
+
slug: hierarchy.slug,
|
|
87
|
+
module: hierarchy.module,
|
|
88
|
+
task: hierarchy.task,
|
|
89
|
+
initiator_type: hierarchy.initiator_type,
|
|
90
|
+
roleId: hierarchy.roleId,
|
|
91
|
+
userId: hierarchy.userId,
|
|
92
|
+
is_active: hierarchy.is_active,
|
|
93
|
+
is_deleted: hierarchy.is_deleted,
|
|
94
|
+
created_by: hierarchy.created_by,
|
|
95
|
+
updated_by: hierarchy.updated_by,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
hierarchyId = createdHierarchy.id;
|
|
100
|
+
} else {
|
|
101
|
+
await prisma.approvalHierarchy.update({
|
|
102
|
+
where: {
|
|
103
|
+
id: existingHierarchy.id,
|
|
104
|
+
},
|
|
105
|
+
data: {
|
|
106
|
+
name: hierarchy.name,
|
|
107
|
+
module: hierarchy.module,
|
|
108
|
+
task: hierarchy.task,
|
|
109
|
+
initiator_type: hierarchy.initiator_type,
|
|
110
|
+
roleId: hierarchy.roleId,
|
|
111
|
+
userId: hierarchy.userId,
|
|
112
|
+
is_active: hierarchy.is_active,
|
|
113
|
+
is_deleted: hierarchy.is_deleted,
|
|
114
|
+
created_by: hierarchy.created_by,
|
|
115
|
+
updated_by: hierarchy.updated_by,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
hierarchyId = existingHierarchy.id;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Seed approval conditions based on hierarchy
|
|
123
|
+
if (hierarchy.conditions && hierarchy.conditions.length > 0) {
|
|
124
|
+
for (const condition of hierarchy.conditions) {
|
|
125
|
+
const existingCondition = await prisma.approvalCondition.findFirst({
|
|
126
|
+
where: {
|
|
127
|
+
approval_hierarchy_id: hierarchyId,
|
|
128
|
+
conditions: condition.type,
|
|
129
|
+
price_from: condition.price_from,
|
|
130
|
+
price_to: condition.price_to,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
let conditionId;
|
|
135
|
+
|
|
136
|
+
if (!existingCondition) {
|
|
137
|
+
const createdCondition = await prisma.approvalCondition.create({
|
|
138
|
+
data: {
|
|
139
|
+
approval_hierarchy_id: hierarchyId,
|
|
140
|
+
conditions: condition.type,
|
|
141
|
+
price_from: condition.price_from,
|
|
142
|
+
price_to: condition.price_to,
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
conditionId = createdCondition.id;
|
|
147
|
+
} else {
|
|
148
|
+
await prisma.approvalCondition.update({
|
|
149
|
+
where: {
|
|
150
|
+
id: existingCondition.id,
|
|
151
|
+
},
|
|
152
|
+
data: {
|
|
153
|
+
conditions: condition.type,
|
|
154
|
+
price_from: condition.price_from,
|
|
155
|
+
price_to: condition.price_to,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
conditionId = existingCondition.id;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Seed approval levels for each condition
|
|
163
|
+
if (condition.levels && condition.levels.length > 0) {
|
|
164
|
+
for (const level of condition.levels) {
|
|
165
|
+
// Track used approvers for this level
|
|
166
|
+
const usedApproversInLevel = new Set();
|
|
167
|
+
|
|
168
|
+
const existingLevel = await prisma.approvalLevel.findFirst({
|
|
169
|
+
where: {
|
|
170
|
+
approval_hierarchy_id: hierarchyId,
|
|
171
|
+
approval_condition_id: conditionId,
|
|
172
|
+
level: level.level,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
let levelId;
|
|
177
|
+
|
|
178
|
+
if (!existingLevel) {
|
|
179
|
+
const createdLevel = await prisma.approvalLevel.create({
|
|
180
|
+
data: {
|
|
181
|
+
approval_hierarchy_id: hierarchyId,
|
|
182
|
+
approval_condition_id: conditionId,
|
|
183
|
+
level: level.level,
|
|
184
|
+
valid_till_hours: level.valid_till_hours,
|
|
185
|
+
valid_till_minutes: level.valid_till_minutes,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
levelId = createdLevel.id;
|
|
190
|
+
} else {
|
|
191
|
+
await prisma.approvalLevel.update({
|
|
192
|
+
where: {
|
|
193
|
+
id: existingLevel.id,
|
|
194
|
+
},
|
|
195
|
+
data: {
|
|
196
|
+
approval_hierarchy_id: hierarchyId,
|
|
197
|
+
approval_condition_id: conditionId,
|
|
198
|
+
level: level.level,
|
|
199
|
+
valid_till_hours: level.valid_till_hours,
|
|
200
|
+
valid_till_minutes: level.valid_till_minutes,
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
levelId = existingLevel.id;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Use specified approvers or get random ones if not specified
|
|
208
|
+
const approverIds = getApproverIds(level.approvers, 2);
|
|
209
|
+
|
|
210
|
+
// Delete existing level users if any (to ensure clean state)
|
|
211
|
+
await prisma.approvalLevelUser.deleteMany({
|
|
212
|
+
where: {
|
|
213
|
+
approval_level_id: levelId,
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Seed approval level users with active users, checking for duplicates
|
|
218
|
+
for (const approverId of approverIds) {
|
|
219
|
+
// Check if this approver has already been used in this level
|
|
220
|
+
if (!usedApproversInLevel.has(approverId)) {
|
|
221
|
+
await prisma.approvalLevelUser.create({
|
|
222
|
+
data: {
|
|
223
|
+
approval_level_id: levelId,
|
|
224
|
+
approver_id: approverId,
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Mark this approver as used in this level
|
|
229
|
+
usedApproversInLevel.add(approverId);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Seed approval level escalations
|
|
234
|
+
if (level.escalations && level.escalations.length > 0) {
|
|
235
|
+
for (const escalation of level.escalations) {
|
|
236
|
+
// Track used approvers for this escalation
|
|
237
|
+
const usedApproversInEscalation = new Set();
|
|
238
|
+
|
|
239
|
+
// Use specified escalation approver or get random one
|
|
240
|
+
const escalationApproverId =
|
|
241
|
+
escalation.escalation_approver_id &&
|
|
242
|
+
activeUserMap.has(escalation.escalation_approver_id)
|
|
243
|
+
? escalation.escalation_approver_id
|
|
244
|
+
: activeUsers.length > 0
|
|
245
|
+
? activeUsers[
|
|
246
|
+
Math.floor(Math.random() * activeUsers.length)
|
|
247
|
+
].id
|
|
248
|
+
: null;
|
|
249
|
+
|
|
250
|
+
if (!escalationApproverId) {
|
|
251
|
+
console.warn(
|
|
252
|
+
`No active users available for escalation approver in level ${level.level}`
|
|
253
|
+
);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const existingEscalation =
|
|
258
|
+
await prisma.approvalLevelEscalation.findFirst({
|
|
259
|
+
where: {
|
|
260
|
+
approval_level_id: levelId,
|
|
261
|
+
escalation_approver_id: escalationApproverId,
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
let escalationId;
|
|
266
|
+
|
|
267
|
+
if (!existingEscalation) {
|
|
268
|
+
const createdEscalation =
|
|
269
|
+
await prisma.approvalLevelEscalation.create({
|
|
270
|
+
data: {
|
|
271
|
+
approval_level_id: levelId,
|
|
272
|
+
escalation_approver_id: escalationApproverId,
|
|
273
|
+
valid_till_hours: escalation.valid_till_hours,
|
|
274
|
+
valid_till_minutes: escalation.valid_till_minutes,
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
escalationId = createdEscalation.id;
|
|
279
|
+
} else {
|
|
280
|
+
await prisma.approvalLevelEscalation.update({
|
|
281
|
+
where: {
|
|
282
|
+
id: existingEscalation.id,
|
|
283
|
+
},
|
|
284
|
+
data: {
|
|
285
|
+
approval_level_id: levelId,
|
|
286
|
+
escalation_approver_id: escalationApproverId,
|
|
287
|
+
valid_till_hours: escalation.valid_till_hours,
|
|
288
|
+
valid_till_minutes: escalation.valid_till_minutes,
|
|
289
|
+
},
|
|
290
|
+
});
|
|
291
|
+
escalationId = existingEscalation.id;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Use specified escalation approvers or get random ones
|
|
295
|
+
const escalationApproverIds = getApproverIds(
|
|
296
|
+
escalation.approvers,
|
|
297
|
+
2
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
// Delete existing escalation users if any (to ensure clean state)
|
|
301
|
+
await prisma.approvalLevelEscalationUser.deleteMany({
|
|
302
|
+
where: {
|
|
303
|
+
approval_level_escalation_id: escalationId,
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
// Seed approval level escalation users with active users, checking for duplicates
|
|
308
|
+
for (const approverId of escalationApproverIds) {
|
|
309
|
+
// Check if this approver has already been used in this escalation
|
|
310
|
+
if (!usedApproversInEscalation.has(approverId)) {
|
|
311
|
+
await prisma.approvalLevelEscalationUser.create({
|
|
312
|
+
data: {
|
|
313
|
+
approval_level_escalation_id: escalationId,
|
|
314
|
+
approver_id: approverId,
|
|
315
|
+
},
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
// Mark this approver as used in this escalation
|
|
319
|
+
usedApproversInEscalation.add(approverId);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
} catch (error) {
|
|
329
|
+
logEntityError("approval-hierarchy", hierarchy.name, error.message);
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
tracker.update();
|
|
333
|
+
}
|
|
334
|
+
logSeederComplete("Approval Hierarchy");
|
|
335
|
+
|
|
336
|
+
// Only disconnect if we created our own client
|
|
337
|
+
if (!prismaClient) {
|
|
338
|
+
await prisma.$disconnect();
|
|
339
|
+
}
|
|
340
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { PrismaClient } from "../../src/prisma/index.js";
|
|
2
|
+
import { loadContentData } from "./utils/json-loader.js";
|
|
3
|
+
import {
|
|
4
|
+
createProgressTracker,
|
|
5
|
+
logSeederStart,
|
|
6
|
+
logSeederComplete,
|
|
7
|
+
logEntityError,
|
|
8
|
+
} from "./utils/progress-tracker.js";
|
|
9
|
+
|
|
10
|
+
export async function seedAttributeValues(prismaClient) {
|
|
11
|
+
// Use the passed client or create new one only if needed (for standalone testing)
|
|
12
|
+
const prisma = prismaClient || new PrismaClient();
|
|
13
|
+
|
|
14
|
+
logSeederStart("attribute values");
|
|
15
|
+
|
|
16
|
+
// Load attribute values from JSON
|
|
17
|
+
const attributeValueData = loadContentData("attribute-values");
|
|
18
|
+
|
|
19
|
+
// Create progress tracker
|
|
20
|
+
const tracker = createProgressTracker(
|
|
21
|
+
attributeValueData.length,
|
|
22
|
+
"attribute values"
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
for (const attributeValue of attributeValueData) {
|
|
26
|
+
try {
|
|
27
|
+
await prisma.attributeValue.upsert({
|
|
28
|
+
where: {
|
|
29
|
+
attribute_id_attribute_value_name: {
|
|
30
|
+
attribute_id: attributeValue.attribute_id,
|
|
31
|
+
attribute_value_name: attributeValue.attribute_value_name,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
update: {
|
|
35
|
+
is_active: attributeValue.is_active,
|
|
36
|
+
slug: attributeValue.slug,
|
|
37
|
+
created_by: attributeValue.created_by,
|
|
38
|
+
updated_by: attributeValue.updated_by,
|
|
39
|
+
is_deleted: attributeValue.is_deleted,
|
|
40
|
+
},
|
|
41
|
+
create: {
|
|
42
|
+
uuid: attributeValue.uuid,
|
|
43
|
+
attribute_id: attributeValue.attribute_id,
|
|
44
|
+
attribute_value_name: attributeValue.attribute_value_name,
|
|
45
|
+
is_active: attributeValue.is_active,
|
|
46
|
+
slug: attributeValue.slug,
|
|
47
|
+
created_by: attributeValue.created_by,
|
|
48
|
+
updated_by: attributeValue.updated_by,
|
|
49
|
+
is_deleted: attributeValue.is_deleted,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
// Log error but don't interrupt progress bar
|
|
54
|
+
logEntityError(
|
|
55
|
+
"attribute value",
|
|
56
|
+
attributeValue.attribute_value_name,
|
|
57
|
+
error.message
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
tracker.update();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
logSeederComplete("Attribute values");
|
|
64
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { PrismaClient } from "../../src/prisma/index.js";
|
|
2
|
+
import { loadContentData } from "./utils/json-loader.js";
|
|
3
|
+
import {
|
|
4
|
+
createProgressTracker,
|
|
5
|
+
logSeederStart,
|
|
6
|
+
logSeederComplete,
|
|
7
|
+
logEntityError,
|
|
8
|
+
} from "./utils/progress-tracker.js";
|
|
9
|
+
|
|
10
|
+
export async function seedAttributes(prismaClient) {
|
|
11
|
+
// Use the passed client or create new one only if needed (for standalone testing)
|
|
12
|
+
const prisma = prismaClient || new PrismaClient();
|
|
13
|
+
|
|
14
|
+
logSeederStart("attributes");
|
|
15
|
+
|
|
16
|
+
// Load attributes from JSON
|
|
17
|
+
const attributeData = loadContentData("attributes");
|
|
18
|
+
|
|
19
|
+
// Create progress tracker
|
|
20
|
+
const tracker = createProgressTracker(attributeData.length, "attributes");
|
|
21
|
+
|
|
22
|
+
for (const attribute of attributeData) {
|
|
23
|
+
try {
|
|
24
|
+
await prisma.attribute.upsert({
|
|
25
|
+
where: {
|
|
26
|
+
uuid: attribute.uuid,
|
|
27
|
+
},
|
|
28
|
+
update: {
|
|
29
|
+
category_id: attribute.category_id,
|
|
30
|
+
attribute_name: attribute.attribute_name,
|
|
31
|
+
is_active: attribute.is_active,
|
|
32
|
+
slug: attribute.slug,
|
|
33
|
+
created_by: attribute.created_by,
|
|
34
|
+
updated_by: attribute.updated_by,
|
|
35
|
+
is_deleted: attribute.is_deleted,
|
|
36
|
+
},
|
|
37
|
+
create: {
|
|
38
|
+
uuid: attribute.uuid,
|
|
39
|
+
category_id: attribute.category_id,
|
|
40
|
+
attribute_name: attribute.attribute_name,
|
|
41
|
+
is_active: attribute.is_active,
|
|
42
|
+
slug: attribute.slug,
|
|
43
|
+
created_by: attribute.created_by,
|
|
44
|
+
updated_by: attribute.updated_by,
|
|
45
|
+
is_deleted: attribute.is_deleted,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
} catch (error) {
|
|
49
|
+
// Log error but don't interrupt progress bar
|
|
50
|
+
logEntityError("attribute", attribute.attribute_name, error.message);
|
|
51
|
+
}
|
|
52
|
+
tracker.update();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
logSeederComplete("Attributes");
|
|
56
|
+
|
|
57
|
+
// Only disconnect if we created our own client
|
|
58
|
+
if (!prismaClient) {
|
|
59
|
+
await prisma.$disconnect();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { PrismaClient } from "../../src/prisma/index.js";
|
|
2
|
+
import { loadContentData } from "./utils/json-loader.js";
|
|
3
|
+
import { createContentSeeder, seedContentData } from "./utils/content-seeder.js";
|
|
4
|
+
import {
|
|
5
|
+
logSeederStart,
|
|
6
|
+
logSeederComplete,
|
|
7
|
+
logEntityError,
|
|
8
|
+
} from "./utils/progress-tracker.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Enhanced category seeder with:
|
|
12
|
+
* - Medium batch processing (500-1000 records)
|
|
13
|
+
* - Unique constraint mapping for batch upserts
|
|
14
|
+
* - Memory monitoring during large operations
|
|
15
|
+
* - Connection pooling through manager
|
|
16
|
+
* - Exponential backoff retry logic
|
|
17
|
+
*/
|
|
18
|
+
export async function seedCategories(prismaClient) {
|
|
19
|
+
// Use the passed client or create new one only if needed (for standalone testing)
|
|
20
|
+
const prisma = prismaClient || new PrismaClient();
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
// Load categories from JSON
|
|
24
|
+
const categoryData = loadContentData("categories");
|
|
25
|
+
|
|
26
|
+
if (!categoryData || categoryData.length === 0) {
|
|
27
|
+
console.log("No category data found to seed.");
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Create enhanced content seeder with category-specific configuration
|
|
32
|
+
const seeder = await createContentSeeder('categories', {
|
|
33
|
+
// Use connection pooling if no client is provided
|
|
34
|
+
useConnectionPooling: !prismaClient,
|
|
35
|
+
// Enable all enhanced features
|
|
36
|
+
enableUniqueConstraintMapping: true,
|
|
37
|
+
enableMemoryMonitoring: true,
|
|
38
|
+
batchUpsertMode: true,
|
|
39
|
+
// Category-specific unique fields for constraint mapping
|
|
40
|
+
uniqueFields: ['name', 'slug'],
|
|
41
|
+
// Medium batch size as specified (500-1000)
|
|
42
|
+
batchSize: 750,
|
|
43
|
+
// Memory monitoring configuration
|
|
44
|
+
memoryCheckInterval: 100,
|
|
45
|
+
memoryThreshold: 0.5,
|
|
46
|
+
// Retry configuration for robustness
|
|
47
|
+
retryAttempts: 3,
|
|
48
|
+
retryDelay: 750,
|
|
49
|
+
exponentialBackoff: true,
|
|
50
|
+
// Logging
|
|
51
|
+
logProgress: true
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Custom processor for categories (fallback if batch upsert fails)
|
|
55
|
+
const categoryProcessor = async (chunk, chunkIndex, client) => {
|
|
56
|
+
let created = 0;
|
|
57
|
+
|
|
58
|
+
for (const category of chunk) {
|
|
59
|
+
try {
|
|
60
|
+
// Ensure parent_id defaults to 0 if not provided
|
|
61
|
+
const categoryRecord = {
|
|
62
|
+
...category,
|
|
63
|
+
parent_id: category.parent_id || 0
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
await client.category.upsert({
|
|
67
|
+
where: {
|
|
68
|
+
name: categoryRecord.name,
|
|
69
|
+
},
|
|
70
|
+
update: {
|
|
71
|
+
slug: categoryRecord.slug,
|
|
72
|
+
parent_id: categoryRecord.parent_id,
|
|
73
|
+
description: categoryRecord.description,
|
|
74
|
+
image_url: categoryRecord.image_url,
|
|
75
|
+
is_active: categoryRecord.is_active,
|
|
76
|
+
created_by: categoryRecord.created_by,
|
|
77
|
+
updated_by: categoryRecord.updated_by,
|
|
78
|
+
},
|
|
79
|
+
create: {
|
|
80
|
+
name: categoryRecord.name,
|
|
81
|
+
slug: categoryRecord.slug,
|
|
82
|
+
parent_id: categoryRecord.parent_id,
|
|
83
|
+
description: categoryRecord.description,
|
|
84
|
+
image_url: categoryRecord.image_url,
|
|
85
|
+
is_active: categoryRecord.is_active,
|
|
86
|
+
created_by: categoryRecord.created_by,
|
|
87
|
+
updated_by: categoryRecord.updated_by,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
created++;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
// Log error but continue processing
|
|
93
|
+
logEntityError("category", category.name, error.message);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return { created };
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// Execute enhanced seeding with all new features
|
|
101
|
+
const result = await seeder.seedContent(
|
|
102
|
+
'categories',
|
|
103
|
+
categoryData,
|
|
104
|
+
categoryProcessor,
|
|
105
|
+
prisma
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// Log summary
|
|
109
|
+
console.log(`\nCategory seeding summary:`);
|
|
110
|
+
console.log(`- Total processed: ${result.totalProcessed.toLocaleString()}`);
|
|
111
|
+
console.log(`- Total created: ${result.totalCreated.toLocaleString()}`);
|
|
112
|
+
console.log(`- Errors: ${result.errors.length}`);
|
|
113
|
+
console.log(`- Memory peak: ${((result.memoryStats.maxHeapUsed - result.memoryStats.startHeapUsed) / 1024 / 1024).toFixed(2)}MB`);
|
|
114
|
+
console.log(`- GC triggered: ${result.memoryStats.gcTriggered} times`);
|
|
115
|
+
|
|
116
|
+
if (result.errors.length > 0) {
|
|
117
|
+
console.log("\nErrors encountered:");
|
|
118
|
+
result.errors.slice(0, 5).forEach(error => console.log(` - ${error}`));
|
|
119
|
+
if (result.errors.length > 5) {
|
|
120
|
+
console.log(` ... and ${result.errors.length - 5} more errors`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
} catch (error) {
|
|
125
|
+
logEntityError("categories", "seeding process", error.message);
|
|
126
|
+
throw error;
|
|
127
|
+
} finally {
|
|
128
|
+
// Only disconnect if we created our own client
|
|
129
|
+
if (!prismaClient) {
|
|
130
|
+
await prisma.$disconnect();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|