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,380 @@
|
|
|
1
|
+
import { PrismaClient } from "../../../src/prisma/index.js";
|
|
2
|
+
import colors from "colors";
|
|
3
|
+
|
|
4
|
+
// Initialize colors theme
|
|
5
|
+
colors.setTheme({
|
|
6
|
+
info: "blue",
|
|
7
|
+
success: "green",
|
|
8
|
+
warn: "yellow",
|
|
9
|
+
error: "red",
|
|
10
|
+
debug: "gray",
|
|
11
|
+
highlight: "cyan",
|
|
12
|
+
bold: "bold",
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export class ConnectionManager {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.connections = new Map();
|
|
18
|
+
this.isShuttingDown = false;
|
|
19
|
+
|
|
20
|
+
// Register process exit handlers to clean up connections
|
|
21
|
+
process.on("exit", () => this.closeAllConnections());
|
|
22
|
+
process.on("SIGINT", () => this.handleShutdown());
|
|
23
|
+
process.on("SIGTERM", () => this.handleShutdown());
|
|
24
|
+
process.on("uncaughtException", (err) => {
|
|
25
|
+
console.error(colors.error(`Uncaught exception: ${err.message}`));
|
|
26
|
+
this.handleShutdown();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Gets a PrismaClient instance for the specified database
|
|
32
|
+
* @param {string} dbName - The database name
|
|
33
|
+
* @param {string} url - The database connection URL
|
|
34
|
+
* @param {object} options - Additional options
|
|
35
|
+
* @returns {PrismaClient} A PrismaClient instance
|
|
36
|
+
*/
|
|
37
|
+
getConnection(dbName, url, options = {}) {
|
|
38
|
+
const connectionKey = `${dbName}:${url}`;
|
|
39
|
+
|
|
40
|
+
// Extract our custom options from the Prisma options
|
|
41
|
+
const { autoRelease, ...prismaOptions } = options;
|
|
42
|
+
|
|
43
|
+
// If connection exists and is healthy, return it
|
|
44
|
+
if (this.connections.has(connectionKey)) {
|
|
45
|
+
const connection = this.connections.get(connectionKey);
|
|
46
|
+
console.log(colors.debug(`Reusing existing connection for ${dbName}`));
|
|
47
|
+
return connection;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Create new connection with custom logger and connection settings
|
|
51
|
+
const prisma = new PrismaClient({
|
|
52
|
+
datasources: {
|
|
53
|
+
db: {
|
|
54
|
+
url,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
log: prismaOptions.log || [
|
|
58
|
+
{ level: "warn", emit: "event" },
|
|
59
|
+
{ level: "error", emit: "event" },
|
|
60
|
+
],
|
|
61
|
+
...prismaOptions, // Pass only valid Prisma options
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Add event listeners for connection warnings and errors
|
|
65
|
+
prisma.$on("warn", (e) => {
|
|
66
|
+
console.warn(colors.warn(`Database warning for ${dbName}: ${e.message}`));
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
prisma.$on("error", (e) => {
|
|
70
|
+
console.error(colors.error(`Database error for ${dbName}: ${e.message}`));
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Store connection
|
|
74
|
+
this.connections.set(connectionKey, prisma);
|
|
75
|
+
console.log(colors.debug(`Created new connection for ${dbName}`));
|
|
76
|
+
|
|
77
|
+
return prisma;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Releases a connection back to the pool
|
|
82
|
+
* @param {string} dbName - The database name
|
|
83
|
+
* @param {string} url - The database connection URL
|
|
84
|
+
*/
|
|
85
|
+
releaseConnection(dbName, url) {
|
|
86
|
+
const connectionKey = `${dbName}:${url}`;
|
|
87
|
+
if (this.connections.has(connectionKey)) {
|
|
88
|
+
console.log(colors.debug(`Releasing connection for ${dbName}`));
|
|
89
|
+
this.connections.delete(connectionKey);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Close a specific connection
|
|
95
|
+
* @param {string} dbName - The database name
|
|
96
|
+
* @param {string} url - The database connection URL
|
|
97
|
+
*/
|
|
98
|
+
async closeConnection(dbName, url) {
|
|
99
|
+
const connectionKey = `${dbName}:${url}`;
|
|
100
|
+
if (this.connections.has(connectionKey)) {
|
|
101
|
+
const connection = this.connections.get(connectionKey);
|
|
102
|
+
console.log(colors.debug(`Closing connection for ${dbName}`));
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
await connection.$disconnect();
|
|
106
|
+
this.connections.delete(connectionKey);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error(
|
|
109
|
+
colors.error(
|
|
110
|
+
`Error closing connection for ${dbName}: ${error.message}`
|
|
111
|
+
)
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Close all open connections
|
|
119
|
+
*/
|
|
120
|
+
async closeAllConnections() {
|
|
121
|
+
if (this.connections.size === 0) return;
|
|
122
|
+
|
|
123
|
+
console.log(
|
|
124
|
+
colors.yellow(`Closing ${this.connections.size} database connections...`)
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
const closePromises = [];
|
|
128
|
+
for (const [key, connection] of this.connections.entries()) {
|
|
129
|
+
closePromises.push(
|
|
130
|
+
connection.$disconnect().catch((error) => {
|
|
131
|
+
console.error(
|
|
132
|
+
colors.error(`Error closing connection ${key}: ${error.message}`)
|
|
133
|
+
);
|
|
134
|
+
})
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
await Promise.all(closePromises);
|
|
140
|
+
this.connections.clear();
|
|
141
|
+
console.log(colors.green("All database connections closed"));
|
|
142
|
+
} catch (error) {
|
|
143
|
+
console.error(
|
|
144
|
+
colors.error(`Error closing connections: ${error.message}`)
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Handle process shutdown
|
|
151
|
+
*/
|
|
152
|
+
async handleShutdown() {
|
|
153
|
+
if (this.isShuttingDown) return;
|
|
154
|
+
this.isShuttingDown = true;
|
|
155
|
+
|
|
156
|
+
console.log(
|
|
157
|
+
colors.yellow("\nShutting down, closing database connections...")
|
|
158
|
+
);
|
|
159
|
+
await this.closeAllConnections();
|
|
160
|
+
process.exit(0);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Execute an operation with a database connection
|
|
165
|
+
* @param {string} dbName - The database name
|
|
166
|
+
* @param {string} url - The database connection URL
|
|
167
|
+
* @param {function} operation - Async function that uses the connection
|
|
168
|
+
* @param {object} options - Connection options
|
|
169
|
+
* @returns {Promise<*>} Result of the operation
|
|
170
|
+
*/
|
|
171
|
+
async executeWithConnection(dbName, url, operation, options = {}) {
|
|
172
|
+
// Separate our custom options from Prisma client options
|
|
173
|
+
const { autoRelease, ...prismaOptions } = options;
|
|
174
|
+
|
|
175
|
+
// Get a connection with only valid Prisma options
|
|
176
|
+
const connection = this.getConnection(dbName, url, prismaOptions);
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
// Execute the operation with the connection
|
|
180
|
+
const result = await operation(connection);
|
|
181
|
+
return result;
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error(
|
|
184
|
+
colors.error(`Error executing operation on ${dbName}: ${error.message}`)
|
|
185
|
+
);
|
|
186
|
+
throw error;
|
|
187
|
+
} finally {
|
|
188
|
+
// Only disconnect if autoRelease is true
|
|
189
|
+
if (autoRelease === true) {
|
|
190
|
+
await this.closeConnection(dbName, url);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Export a singleton instance
|
|
197
|
+
export const connectionManager = new ConnectionManager();
|
|
198
|
+
export default connectionManager;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Get singleton connection manager instance
|
|
202
|
+
*/
|
|
203
|
+
export function getConnectionManager(config = {}) {
|
|
204
|
+
return connectionManager;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Helper function for seeding operations
|
|
209
|
+
*/
|
|
210
|
+
export async function withOptimizedConnection(category, operation) {
|
|
211
|
+
const manager = getConnectionManager();
|
|
212
|
+
return await manager.executeWithConnection(category, operation);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Helper function for bulk operations
|
|
217
|
+
*/
|
|
218
|
+
export async function withBulkTransaction(category, operations) {
|
|
219
|
+
const manager = getConnectionManager();
|
|
220
|
+
return await manager.executeBulkTransaction(category, operations);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Enhanced connection pooling for content operations
|
|
225
|
+
*/
|
|
226
|
+
export class ContentConnectionPool {
|
|
227
|
+
constructor(options = {}) {
|
|
228
|
+
this.poolSize = options.poolSize || 8;
|
|
229
|
+
this.maxRetries = options.maxRetries || 3;
|
|
230
|
+
this.retryDelay = options.retryDelay || 1000;
|
|
231
|
+
this.connections = [];
|
|
232
|
+
this.activeConnections = new Set();
|
|
233
|
+
this.isInitialized = false;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Initialize connection pool
|
|
238
|
+
*/
|
|
239
|
+
async initialize(dbUrl, prismaOptions = {}) {
|
|
240
|
+
if (this.isInitialized) return;
|
|
241
|
+
|
|
242
|
+
console.log(colors.cyan(`Initializing content connection pool with ${this.poolSize} connections...`));
|
|
243
|
+
|
|
244
|
+
for (let i = 0; i < this.poolSize; i++) {
|
|
245
|
+
try {
|
|
246
|
+
const connection = new PrismaClient({
|
|
247
|
+
datasources: { db: { url: dbUrl } },
|
|
248
|
+
log: prismaOptions.log || [{ level: "error", emit: "event" }],
|
|
249
|
+
...prismaOptions
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// Test the connection
|
|
253
|
+
await connection.$connect();
|
|
254
|
+
this.connections.push(connection);
|
|
255
|
+
|
|
256
|
+
console.log(colors.debug(`Connection ${i + 1}/${this.poolSize} initialized`));
|
|
257
|
+
} catch (error) {
|
|
258
|
+
console.error(colors.error(`Failed to initialize connection ${i + 1}: ${error.message}`));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
this.isInitialized = true;
|
|
263
|
+
console.log(colors.green(`Content connection pool initialized with ${this.connections.length} connections`));
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Get an available connection from the pool
|
|
268
|
+
*/
|
|
269
|
+
async getConnection() {
|
|
270
|
+
if (!this.isInitialized) {
|
|
271
|
+
throw new Error('Connection pool not initialized');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Find an available connection
|
|
275
|
+
for (const connection of this.connections) {
|
|
276
|
+
if (!this.activeConnections.has(connection)) {
|
|
277
|
+
this.activeConnections.add(connection);
|
|
278
|
+
return connection;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// If no connections available, wait and retry
|
|
283
|
+
console.log(colors.yellow('No available connections, waiting...'));
|
|
284
|
+
await this.sleep(100);
|
|
285
|
+
return await this.getConnection();
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Release a connection back to the pool
|
|
290
|
+
*/
|
|
291
|
+
releaseConnection(connection) {
|
|
292
|
+
this.activeConnections.delete(connection);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Execute operation with pooled connection
|
|
297
|
+
*/
|
|
298
|
+
async executeWithPool(operation) {
|
|
299
|
+
let connection;
|
|
300
|
+
let retries = 0;
|
|
301
|
+
|
|
302
|
+
while (retries < this.maxRetries) {
|
|
303
|
+
try {
|
|
304
|
+
connection = await this.getConnection();
|
|
305
|
+
const result = await operation(connection);
|
|
306
|
+
return result;
|
|
307
|
+
} catch (error) {
|
|
308
|
+
retries++;
|
|
309
|
+
console.warn(colors.yellow(`Operation failed (attempt ${retries}/${this.maxRetries}): ${error.message}`));
|
|
310
|
+
|
|
311
|
+
if (retries < this.maxRetries) {
|
|
312
|
+
await this.sleep(this.retryDelay * retries);
|
|
313
|
+
} else {
|
|
314
|
+
throw error;
|
|
315
|
+
}
|
|
316
|
+
} finally {
|
|
317
|
+
if (connection) {
|
|
318
|
+
this.releaseConnection(connection);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Close all connections in the pool
|
|
326
|
+
*/
|
|
327
|
+
async closeAll() {
|
|
328
|
+
console.log(colors.yellow(`Closing ${this.connections.length} pooled connections...`));
|
|
329
|
+
|
|
330
|
+
const closePromises = this.connections.map(connection =>
|
|
331
|
+
connection.$disconnect().catch(error =>
|
|
332
|
+
console.error(colors.error(`Error closing pooled connection: ${error.message}`))
|
|
333
|
+
)
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
await Promise.all(closePromises);
|
|
337
|
+
this.connections = [];
|
|
338
|
+
this.activeConnections.clear();
|
|
339
|
+
this.isInitialized = false;
|
|
340
|
+
|
|
341
|
+
console.log(colors.green('All pooled connections closed'));
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
sleep(ms) {
|
|
345
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Global content connection pool instance
|
|
351
|
+
*/
|
|
352
|
+
let contentConnectionPool = null;
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Get or create content connection pool
|
|
356
|
+
*/
|
|
357
|
+
export function getContentConnectionPool(options = {}) {
|
|
358
|
+
if (!contentConnectionPool) {
|
|
359
|
+
contentConnectionPool = new ContentConnectionPool(options);
|
|
360
|
+
}
|
|
361
|
+
return contentConnectionPool;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Helper for content seeding with connection pooling
|
|
366
|
+
*/
|
|
367
|
+
export async function withContentPool(dbUrl, operation, poolOptions = {}) {
|
|
368
|
+
const pool = getContentConnectionPool(poolOptions);
|
|
369
|
+
|
|
370
|
+
if (!pool.isInitialized) {
|
|
371
|
+
await pool.initialize(dbUrl);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
try {
|
|
375
|
+
return await pool.executeWithPool(operation);
|
|
376
|
+
} catch (error) {
|
|
377
|
+
console.error(colors.error(`Content pool operation failed: ${error.message}`));
|
|
378
|
+
throw error;
|
|
379
|
+
}
|
|
380
|
+
}
|