diff --git a/bun.lock b/bun.lock index 2e1249299..c62d46703 100644 --- a/bun.lock +++ b/bun.lock @@ -15,7 +15,7 @@ }, "admin": { "name": "admin", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "@iconify/json": "^2.2.228", "@popperjs/core": "^2.11.8", @@ -84,7 +84,7 @@ }, "backend": { "name": "backend", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "cross-env": "^7.0.3", "email-templates": "^10.0.1", @@ -170,7 +170,7 @@ }, "database": { "name": "database", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "@types/uuid": "^8.3.4", "cross-env": "^7.0.3", @@ -178,6 +178,7 @@ "dotenv": "^10.0.0", "esbuild": "^0.25.2", "geojson": "^0.5.0", + "log4js": "^6.9.1", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", @@ -196,7 +197,7 @@ }, "dht-node": { "name": "dht-node", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "cross-env": "^7.0.3", "dht-rpc": "6.18.1", @@ -227,7 +228,7 @@ }, "federation": { "name": "federation", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "cross-env": "^7.0.3", "sodium-native": "^3.4.1", @@ -277,7 +278,7 @@ }, "frontend": { "name": "frontend", - "version": "2.5.2", + "version": "2.6.0", "dependencies": { "@morev/vue-transitions": "^3.0.2", "@types/leaflet": "^1.9.12", diff --git a/database/esbuild.config.ts b/database/esbuild.config.ts index ebdb10e2a..790a2094f 100644 --- a/database/esbuild.config.ts +++ b/database/esbuild.config.ts @@ -1,9 +1,9 @@ import { build } from 'esbuild' import fs from 'node:fs' -import { latestDbVersion } from './src/config/detectLastDBVersion' +import { latestDbVersion } from '@/detectLastDBVersion' build({ - entryPoints: ['entity/index.ts'], + entryPoints: ['src/index.ts'], bundle: true, target: 'node18.20.7', platform: 'node', diff --git a/database/src/clear.ts b/database/migration/clear.ts similarity index 97% rename from database/src/clear.ts rename to database/migration/clear.ts index e2999bbf9..8a3696ffd 100644 --- a/database/src/clear.ts +++ b/database/migration/clear.ts @@ -1,5 +1,5 @@ import { Connection } from 'mysql2/promise' -import { CONFIG } from './config' +import { CONFIG } from '@/config' import { connectToDatabaseServer } from './prepare' export async function truncateTables(connection: Connection) { diff --git a/database/migration/index.ts b/database/migration/index.ts new file mode 100644 index 000000000..c5e055a36 --- /dev/null +++ b/database/migration/index.ts @@ -0,0 +1,102 @@ +import { CONFIG } from '@/config' +import { DatabaseState, getDatabaseState } from './prepare' + +import path from 'node:path' +import { createPool } from 'mysql' +import { Migration } from 'ts-mysql-migrate' +import { clearDatabase } from './clear' +import { latestDbVersion } from '@/detectLastDBVersion' + +const run = async (command: string) => { + if (command === 'clear') { + if (CONFIG.NODE_ENV === 'production') { + throw new Error('Clearing database in production is not allowed') + } + await clearDatabase() + return + } + // Database actions not supported by our migration library + // await createDatabase() + const state = await getDatabaseState() + if (state === DatabaseState.NOT_CONNECTED) { + throw new Error( + `Database not connected, is database server running? + host: ${CONFIG.DB_HOST} + port: ${CONFIG.DB_PORT} + user: ${CONFIG.DB_USER} + password: ${CONFIG.DB_PASSWORD.slice(-2)} + database: ${CONFIG.DB_DATABASE}`, + ) + } + if (state === DatabaseState.HIGHER_VERSION) { + throw new Error('Database version is higher than required, please switch to the correct branch') + } + if (state === DatabaseState.SAME_VERSION) { + if (command === 'up') { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log('Database is up to date') + return + } + } + // Initialize Migrations + const pool = createPool({ + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + user: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE, + }) + const migration = new Migration({ + conn: pool, + tableName: CONFIG.MIGRATIONS_TABLE, + silent: true, + dir: path.join(__dirname, 'migrations'), + }) + await migration.initialize() + + // Execute command + switch (command) { + case 'up': + await migration.up() // use for upgrade script + break + case 'down': + await migration.down() // use for downgrade script + break + case 'reset': + if (CONFIG.NODE_ENV === 'production') { + throw new Error('Resetting database in production is not allowed') + } + await migration.reset() + break + default: + throw new Error(`Unsupported command ${command}`) + } + if (command === 'reset') { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log('Database was reset') + } else { + const currentDbVersion = await migration.getLastVersion() + // biome-ignore lint/suspicious/noConsole: no logger present + console.log(`Database was ${command} migrated to version: ${currentDbVersion.fileName}`) + if (latestDbVersion === currentDbVersion.fileName.split('.')[0]) { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log('Database is now up to date') + } else { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log('The latest database version is: ', latestDbVersion) + } + } + + // Terminate connections gracefully + pool.end() +} + +run(process.argv[2]) + .catch((err) => { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log(err) + process.exit(1) + }) + .then(() => { + process.exit() + }) diff --git a/database/migrations/0001-init_db.ts b/database/migration/migrations/0001-init_db.ts similarity index 100% rename from database/migrations/0001-init_db.ts rename to database/migration/migrations/0001-init_db.ts diff --git a/database/migrations/0002-add_settings.ts b/database/migration/migrations/0002-add_settings.ts similarity index 100% rename from database/migrations/0002-add_settings.ts rename to database/migration/migrations/0002-add_settings.ts diff --git a/database/migrations/0003-login_server_tables.ts b/database/migration/migrations/0003-login_server_tables.ts similarity index 100% rename from database/migrations/0003-login_server_tables.ts rename to database/migration/migrations/0003-login_server_tables.ts diff --git a/database/migrations/0004-login_server_data.ts b/database/migration/migrations/0004-login_server_data.ts similarity index 100% rename from database/migrations/0004-login_server_data.ts rename to database/migration/migrations/0004-login_server_data.ts diff --git a/database/migrations/0005-admin_tables.ts b/database/migration/migrations/0005-admin_tables.ts similarity index 100% rename from database/migrations/0005-admin_tables.ts rename to database/migration/migrations/0005-admin_tables.ts diff --git a/database/migrations/0006-login_users_collation.ts b/database/migration/migrations/0006-login_users_collation.ts similarity index 100% rename from database/migrations/0006-login_users_collation.ts rename to database/migration/migrations/0006-login_users_collation.ts diff --git a/database/migrations/0007-login_pending_tasks_delete.ts b/database/migration/migrations/0007-login_pending_tasks_delete.ts similarity index 100% rename from database/migrations/0007-login_pending_tasks_delete.ts rename to database/migration/migrations/0007-login_pending_tasks_delete.ts diff --git a/database/migrations/0008-state_users_plug_holes.ts b/database/migration/migrations/0008-state_users_plug_holes.ts similarity index 100% rename from database/migrations/0008-state_users_plug_holes.ts rename to database/migration/migrations/0008-state_users_plug_holes.ts diff --git a/database/migrations/0009-login_users_plug_holes.ts b/database/migration/migrations/0009-login_users_plug_holes.ts similarity index 100% rename from database/migrations/0009-login_users_plug_holes.ts rename to database/migration/migrations/0009-login_users_plug_holes.ts diff --git a/database/migrations/0010-login_users_state_users_sync.ts b/database/migration/migrations/0010-login_users_state_users_sync.ts similarity index 100% rename from database/migrations/0010-login_users_state_users_sync.ts rename to database/migration/migrations/0010-login_users_state_users_sync.ts diff --git a/database/migrations/0011-login_user_backups_plug_holes.ts b/database/migration/migrations/0011-login_user_backups_plug_holes.ts similarity index 100% rename from database/migrations/0011-login_user_backups_plug_holes.ts rename to database/migration/migrations/0011-login_user_backups_plug_holes.ts diff --git a/database/migrations/0012-login_user_backups_unify_wordlist.ts b/database/migration/migrations/0012-login_user_backups_unify_wordlist.ts similarity index 88% rename from database/migrations/0012-login_user_backups_unify_wordlist.ts rename to database/migration/migrations/0012-login_user_backups_unify_wordlist.ts index ad8244f66..914197baf 100644 --- a/database/migrations/0012-login_user_backups_unify_wordlist.ts +++ b/database/migration/migrations/0012-login_user_backups_unify_wordlist.ts @@ -11,15 +11,15 @@ import path from 'path' const TARGET_MNEMONIC_TYPE = 2 const PHRASE_WORD_COUNT = 24 const WORDS_MNEMONIC_0 = fs - .readFileSync(path.resolve(__dirname, '../src/config/mnemonic.uncompressed_buffer18112.txt')) + .readFileSync(path.resolve(__dirname, '../../src/config/mnemonic.uncompressed_buffer18112.txt')) .toString() .split(',') const WORDS_MNEMONIC_1 = fs - .readFileSync(path.resolve(__dirname, '../src/config/mnemonic.uncompressed_buffer18113.txt')) + .readFileSync(path.resolve(__dirname, '../../src/config/mnemonic.uncompressed_buffer18113.txt')) .toString() .split(',') const WORDS_MNEMONIC_2 = fs - .readFileSync(path.resolve(__dirname, '../src/config/mnemonic.uncompressed_buffer13116.txt')) + .readFileSync(path.resolve(__dirname, '../../src/config/mnemonic.uncompressed_buffer13116.txt')) .toString() .split(',') const WORDS_MNEMONIC = [WORDS_MNEMONIC_0, WORDS_MNEMONIC_1, WORDS_MNEMONIC_2] diff --git a/database/migrations/0013-drop_unused_tables.ts b/database/migration/migrations/0013-drop_unused_tables.ts similarity index 100% rename from database/migrations/0013-drop_unused_tables.ts rename to database/migration/migrations/0013-drop_unused_tables.ts diff --git a/database/migrations/0014-drop_unused_tables_with_data.ts b/database/migration/migrations/0014-drop_unused_tables_with_data.ts similarity index 100% rename from database/migrations/0014-drop_unused_tables_with_data.ts rename to database/migration/migrations/0014-drop_unused_tables_with_data.ts diff --git a/database/migrations/0015-admin_pending_creations.ts b/database/migration/migrations/0015-admin_pending_creations.ts similarity index 100% rename from database/migrations/0015-admin_pending_creations.ts rename to database/migration/migrations/0015-admin_pending_creations.ts diff --git a/database/migrations/0016-transaction_signatures.ts b/database/migration/migrations/0016-transaction_signatures.ts similarity index 100% rename from database/migrations/0016-transaction_signatures.ts rename to database/migration/migrations/0016-transaction_signatures.ts diff --git a/database/migrations/0017-combine_user_tables.ts b/database/migration/migrations/0017-combine_user_tables.ts similarity index 100% rename from database/migrations/0017-combine_user_tables.ts rename to database/migration/migrations/0017-combine_user_tables.ts diff --git a/database/migrations/0018-combine_login_user_backups_and_user_table.ts b/database/migration/migrations/0018-combine_login_user_backups_and_user_table.ts similarity index 100% rename from database/migrations/0018-combine_login_user_backups_and_user_table.ts rename to database/migration/migrations/0018-combine_login_user_backups_and_user_table.ts diff --git a/database/migrations/0019-replace_login_user_id_with_state_user_id.ts b/database/migration/migrations/0019-replace_login_user_id_with_state_user_id.ts similarity index 100% rename from database/migrations/0019-replace_login_user_id_with_state_user_id.ts rename to database/migration/migrations/0019-replace_login_user_id_with_state_user_id.ts diff --git a/database/migrations/0020-rename_and_clean_state_users.ts b/database/migration/migrations/0020-rename_and_clean_state_users.ts similarity index 100% rename from database/migrations/0020-rename_and_clean_state_users.ts rename to database/migration/migrations/0020-rename_and_clean_state_users.ts diff --git a/database/migrations/0021-elopagebuys_fields_nullable.ts b/database/migration/migrations/0021-elopagebuys_fields_nullable.ts similarity index 100% rename from database/migrations/0021-elopagebuys_fields_nullable.ts rename to database/migration/migrations/0021-elopagebuys_fields_nullable.ts diff --git a/database/migrations/0022-delete_decay_start_block.ts b/database/migration/migrations/0022-delete_decay_start_block.ts similarity index 100% rename from database/migrations/0022-delete_decay_start_block.ts rename to database/migration/migrations/0022-delete_decay_start_block.ts diff --git a/database/migrations/0023-users_disabled_soft_delete.ts b/database/migration/migrations/0023-users_disabled_soft_delete.ts similarity index 100% rename from database/migrations/0023-users_disabled_soft_delete.ts rename to database/migration/migrations/0023-users_disabled_soft_delete.ts diff --git a/database/migrations/0024-combine_transaction_tables.ts b/database/migration/migrations/0024-combine_transaction_tables.ts similarity index 100% rename from database/migrations/0024-combine_transaction_tables.ts rename to database/migration/migrations/0024-combine_transaction_tables.ts diff --git a/database/migrations/0025-emails_to_lower.ts b/database/migration/migrations/0025-emails_to_lower.ts similarity index 100% rename from database/migrations/0025-emails_to_lower.ts rename to database/migration/migrations/0025-emails_to_lower.ts diff --git a/database/migrations/0026-combine_transaction_tables2.ts b/database/migration/migrations/0026-combine_transaction_tables2.ts similarity index 100% rename from database/migrations/0026-combine_transaction_tables2.ts rename to database/migration/migrations/0026-combine_transaction_tables2.ts diff --git a/database/migrations/0027-clean_transaction_table.ts b/database/migration/migrations/0027-clean_transaction_table.ts similarity index 100% rename from database/migrations/0027-clean_transaction_table.ts rename to database/migration/migrations/0027-clean_transaction_table.ts diff --git a/database/migrations/0028-decimal_types.ts b/database/migration/migrations/0028-decimal_types.ts similarity index 100% rename from database/migrations/0028-decimal_types.ts rename to database/migration/migrations/0028-decimal_types.ts diff --git a/database/migrations/0029-clean_transaction_table.ts b/database/migration/migrations/0029-clean_transaction_table.ts similarity index 100% rename from database/migrations/0029-clean_transaction_table.ts rename to database/migration/migrations/0029-clean_transaction_table.ts diff --git a/database/migrations/0030-transaction_link.ts b/database/migration/migrations/0030-transaction_link.ts similarity index 100% rename from database/migrations/0030-transaction_link.ts rename to database/migration/migrations/0030-transaction_link.ts diff --git a/database/migrations/0031-remove_sendEmail_from_transaction_link.ts b/database/migration/migrations/0031-remove_sendEmail_from_transaction_link.ts similarity index 100% rename from database/migrations/0031-remove_sendEmail_from_transaction_link.ts rename to database/migration/migrations/0031-remove_sendEmail_from_transaction_link.ts diff --git a/database/migrations/0032-add-transaction-link-to-transaction.ts b/database/migration/migrations/0032-add-transaction-link-to-transaction.ts similarity index 100% rename from database/migrations/0032-add-transaction-link-to-transaction.ts rename to database/migration/migrations/0032-add-transaction-link-to-transaction.ts diff --git a/database/migrations/0033-add_referrer_id.ts b/database/migration/migrations/0033-add_referrer_id.ts similarity index 100% rename from database/migrations/0033-add_referrer_id.ts rename to database/migration/migrations/0033-add_referrer_id.ts diff --git a/database/migrations/0034-drop_server_user_table.ts b/database/migration/migrations/0034-drop_server_user_table.ts similarity index 100% rename from database/migrations/0034-drop_server_user_table.ts rename to database/migration/migrations/0034-drop_server_user_table.ts diff --git a/database/migrations/0035-admin_pending_creations_decimal.ts b/database/migration/migrations/0035-admin_pending_creations_decimal.ts similarity index 100% rename from database/migrations/0035-admin_pending_creations_decimal.ts rename to database/migration/migrations/0035-admin_pending_creations_decimal.ts diff --git a/database/migrations/0036-unique_previous_in_transactions.ts b/database/migration/migrations/0036-unique_previous_in_transactions.ts similarity index 100% rename from database/migrations/0036-unique_previous_in_transactions.ts rename to database/migration/migrations/0036-unique_previous_in_transactions.ts diff --git a/database/migrations/0037-drop_user_setting_table.ts b/database/migration/migrations/0037-drop_user_setting_table.ts similarity index 100% rename from database/migrations/0037-drop_user_setting_table.ts rename to database/migration/migrations/0037-drop_user_setting_table.ts diff --git a/database/migrations/0038-add_contribution_links_table.ts b/database/migration/migrations/0038-add_contribution_links_table.ts similarity index 100% rename from database/migrations/0038-add_contribution_links_table.ts rename to database/migration/migrations/0038-add_contribution_links_table.ts diff --git a/database/migrations/0039-contributions_table.ts b/database/migration/migrations/0039-contributions_table.ts similarity index 100% rename from database/migrations/0039-contributions_table.ts rename to database/migration/migrations/0039-contributions_table.ts diff --git a/database/migrations/0040-add_contribution_link_id_to_user.ts b/database/migration/migrations/0040-add_contribution_link_id_to_user.ts similarity index 100% rename from database/migrations/0040-add_contribution_link_id_to_user.ts rename to database/migration/migrations/0040-add_contribution_link_id_to_user.ts diff --git a/database/migrations/0041-move_users_creation_date.ts b/database/migration/migrations/0041-move_users_creation_date.ts similarity index 100% rename from database/migrations/0041-move_users_creation_date.ts rename to database/migration/migrations/0041-move_users_creation_date.ts diff --git a/database/migrations/0042-update_transactions_for_blockchain.ts b/database/migration/migrations/0042-update_transactions_for_blockchain.ts similarity index 100% rename from database/migrations/0042-update_transactions_for_blockchain.ts rename to database/migration/migrations/0042-update_transactions_for_blockchain.ts diff --git a/database/migrations/0043-add_event_protocol_table.ts b/database/migration/migrations/0043-add_event_protocol_table.ts similarity index 100% rename from database/migrations/0043-add_event_protocol_table.ts rename to database/migration/migrations/0043-add_event_protocol_table.ts diff --git a/database/migrations/0044-insert_missing_contributions.ts b/database/migration/migrations/0044-insert_missing_contributions.ts similarity index 100% rename from database/migrations/0044-insert_missing_contributions.ts rename to database/migration/migrations/0044-insert_missing_contributions.ts diff --git a/database/migrations/0045-add_denied_type_and_status_to_contributions.ts b/database/migration/migrations/0045-add_denied_type_and_status_to_contributions.ts similarity index 100% rename from database/migrations/0045-add_denied_type_and_status_to_contributions.ts rename to database/migration/migrations/0045-add_denied_type_and_status_to_contributions.ts diff --git a/database/migrations/0046-adapt_users_table_for_gradidoid.ts b/database/migration/migrations/0046-adapt_users_table_for_gradidoid.ts similarity index 100% rename from database/migrations/0046-adapt_users_table_for_gradidoid.ts rename to database/migration/migrations/0046-adapt_users_table_for_gradidoid.ts diff --git a/database/migrations/0047-messages_tables.ts b/database/migration/migrations/0047-messages_tables.ts similarity index 100% rename from database/migrations/0047-messages_tables.ts rename to database/migration/migrations/0047-messages_tables.ts diff --git a/database/migrations/0048-add_is_moderator_to_contribution_messages.ts b/database/migration/migrations/0048-add_is_moderator_to_contribution_messages.ts similarity index 100% rename from database/migrations/0048-add_is_moderator_to_contribution_messages.ts rename to database/migration/migrations/0048-add_is_moderator_to_contribution_messages.ts diff --git a/database/migrations/0049-add_user_contacts_table.ts b/database/migration/migrations/0049-add_user_contacts_table.ts similarity index 100% rename from database/migrations/0049-add_user_contacts_table.ts rename to database/migration/migrations/0049-add_user_contacts_table.ts diff --git a/database/migrations/0050-add_messageId_to_event_protocol.ts b/database/migration/migrations/0050-add_messageId_to_event_protocol.ts similarity index 100% rename from database/migrations/0050-add_messageId_to_event_protocol.ts rename to database/migration/migrations/0050-add_messageId_to_event_protocol.ts diff --git a/database/migrations/0051-add_delete_by_to_contributions.ts b/database/migration/migrations/0051-add_delete_by_to_contributions.ts similarity index 100% rename from database/migrations/0051-add_delete_by_to_contributions.ts rename to database/migration/migrations/0051-add_delete_by_to_contributions.ts diff --git a/database/migrations/0052-add_updated_at_to_contributions.ts b/database/migration/migrations/0052-add_updated_at_to_contributions.ts similarity index 100% rename from database/migrations/0052-add_updated_at_to_contributions.ts rename to database/migration/migrations/0052-add_updated_at_to_contributions.ts diff --git a/database/migrations/0053-change_password_encryption.ts b/database/migration/migrations/0053-change_password_encryption.ts similarity index 100% rename from database/migrations/0053-change_password_encryption.ts rename to database/migration/migrations/0053-change_password_encryption.ts diff --git a/database/migrations/0054-recalculate_balance_and_decay.ts b/database/migration/migrations/0054-recalculate_balance_and_decay.ts similarity index 100% rename from database/migrations/0054-recalculate_balance_and_decay.ts rename to database/migration/migrations/0054-recalculate_balance_and_decay.ts diff --git a/database/migrations/0055-consistent_deleted_users.ts b/database/migration/migrations/0055-consistent_deleted_users.ts similarity index 100% rename from database/migrations/0055-consistent_deleted_users.ts rename to database/migration/migrations/0055-consistent_deleted_users.ts diff --git a/database/migrations/0056-consistent_transactions_table.ts b/database/migration/migrations/0056-consistent_transactions_table.ts similarity index 100% rename from database/migrations/0056-consistent_transactions_table.ts rename to database/migration/migrations/0056-consistent_transactions_table.ts diff --git a/database/migrations/0057-clear_old_password_junk.ts b/database/migration/migrations/0057-clear_old_password_junk.ts similarity index 100% rename from database/migrations/0057-clear_old_password_junk.ts rename to database/migration/migrations/0057-clear_old_password_junk.ts diff --git a/database/migrations/0058-add_communities_table.ts b/database/migration/migrations/0058-add_communities_table.ts similarity index 100% rename from database/migrations/0058-add_communities_table.ts rename to database/migration/migrations/0058-add_communities_table.ts diff --git a/database/migrations/0059-add_hide_amount_to_users.ts b/database/migration/migrations/0059-add_hide_amount_to_users.ts similarity index 100% rename from database/migrations/0059-add_hide_amount_to_users.ts rename to database/migration/migrations/0059-add_hide_amount_to_users.ts diff --git a/database/migrations/0060-update_communities_table.ts b/database/migration/migrations/0060-update_communities_table.ts similarity index 100% rename from database/migrations/0060-update_communities_table.ts rename to database/migration/migrations/0060-update_communities_table.ts diff --git a/database/migrations/0061-event_refactoring.ts b/database/migration/migrations/0061-event_refactoring.ts similarity index 100% rename from database/migrations/0061-event_refactoring.ts rename to database/migration/migrations/0061-event_refactoring.ts diff --git a/database/migrations/0062-event_contribution_confirm.ts b/database/migration/migrations/0062-event_contribution_confirm.ts similarity index 100% rename from database/migrations/0062-event_contribution_confirm.ts rename to database/migration/migrations/0062-event_contribution_confirm.ts diff --git a/database/migrations/0063-event_link_fields.ts b/database/migration/migrations/0063-event_link_fields.ts similarity index 100% rename from database/migrations/0063-event_link_fields.ts rename to database/migration/migrations/0063-event_link_fields.ts diff --git a/database/migrations/0064-event_rename.ts b/database/migration/migrations/0064-event_rename.ts similarity index 100% rename from database/migrations/0064-event_rename.ts rename to database/migration/migrations/0064-event_rename.ts diff --git a/database/migrations/0065-refactor_communities_table.ts b/database/migration/migrations/0065-refactor_communities_table.ts similarity index 100% rename from database/migrations/0065-refactor_communities_table.ts rename to database/migration/migrations/0065-refactor_communities_table.ts diff --git a/database/migrations/0066-x-community-sendcoins-transactions_table.ts b/database/migration/migrations/0066-x-community-sendcoins-transactions_table.ts similarity index 100% rename from database/migrations/0066-x-community-sendcoins-transactions_table.ts rename to database/migration/migrations/0066-x-community-sendcoins-transactions_table.ts diff --git a/database/migrations/0067-private_key_in_community_table.ts b/database/migration/migrations/0067-private_key_in_community_table.ts similarity index 100% rename from database/migrations/0067-private_key_in_community_table.ts rename to database/migration/migrations/0067-private_key_in_community_table.ts diff --git a/database/migrations/0068-community_tables_public_key_length.ts b/database/migration/migrations/0068-community_tables_public_key_length.ts similarity index 100% rename from database/migrations/0068-community_tables_public_key_length.ts rename to database/migration/migrations/0068-community_tables_public_key_length.ts diff --git a/database/migrations/0069-add_user_roles_table.ts b/database/migration/migrations/0069-add_user_roles_table.ts similarity index 100% rename from database/migrations/0069-add_user_roles_table.ts rename to database/migration/migrations/0069-add_user_roles_table.ts diff --git a/database/migrations/0070-add_dlt_transactions_table.ts b/database/migration/migrations/0070-add_dlt_transactions_table.ts similarity index 100% rename from database/migrations/0070-add_dlt_transactions_table.ts rename to database/migration/migrations/0070-add_dlt_transactions_table.ts diff --git a/database/migrations/0071-add-pending_transactions-table.ts b/database/migration/migrations/0071-add-pending_transactions-table.ts similarity index 100% rename from database/migrations/0071-add-pending_transactions-table.ts rename to database/migration/migrations/0071-add-pending_transactions-table.ts diff --git a/database/migrations/0072-add_communityuuid_to_transactions_table.ts b/database/migration/migrations/0072-add_communityuuid_to_transactions_table.ts similarity index 100% rename from database/migrations/0072-add_communityuuid_to_transactions_table.ts rename to database/migration/migrations/0072-add_communityuuid_to_transactions_table.ts diff --git a/database/migrations/0073-introduce_foreign_user_in_users_table.ts b/database/migration/migrations/0073-introduce_foreign_user_in_users_table.ts similarity index 100% rename from database/migrations/0073-introduce_foreign_user_in_users_table.ts rename to database/migration/migrations/0073-introduce_foreign_user_in_users_table.ts diff --git a/database/migrations/0074-insert_communityuuid in_existing_users.ts b/database/migration/migrations/0074-insert_communityuuid in_existing_users.ts similarity index 100% rename from database/migrations/0074-insert_communityuuid in_existing_users.ts rename to database/migration/migrations/0074-insert_communityuuid in_existing_users.ts diff --git a/database/migrations/0075-contribution_message_add_index.ts b/database/migration/migrations/0075-contribution_message_add_index.ts similarity index 100% rename from database/migrations/0075-contribution_message_add_index.ts rename to database/migration/migrations/0075-contribution_message_add_index.ts diff --git a/database/migrations/0076-add_updated_by_contribution.ts b/database/migration/migrations/0076-add_updated_by_contribution.ts similarity index 100% rename from database/migrations/0076-add_updated_by_contribution.ts rename to database/migration/migrations/0076-add_updated_by_contribution.ts diff --git a/database/migrations/0077-add_resubmission_date_contribution_message.ts b/database/migration/migrations/0077-add_resubmission_date_contribution_message.ts similarity index 100% rename from database/migrations/0077-add_resubmission_date_contribution_message.ts rename to database/migration/migrations/0077-add_resubmission_date_contribution_message.ts diff --git a/database/migrations/0078-move_resubmission_date.ts b/database/migration/migrations/0078-move_resubmission_date.ts similarity index 100% rename from database/migrations/0078-move_resubmission_date.ts rename to database/migration/migrations/0078-move_resubmission_date.ts diff --git a/database/migrations/0079-fill_linked_user_id_of_contributions.ts b/database/migration/migrations/0079-fill_linked_user_id_of_contributions.ts similarity index 100% rename from database/migrations/0079-fill_linked_user_id_of_contributions.ts rename to database/migration/migrations/0079-fill_linked_user_id_of_contributions.ts diff --git a/database/migrations/0080-fill_linked_user_gradidoId_of_contributions.ts b/database/migration/migrations/0080-fill_linked_user_gradidoId_of_contributions.ts similarity index 100% rename from database/migrations/0080-fill_linked_user_gradidoId_of_contributions.ts rename to database/migration/migrations/0080-fill_linked_user_gradidoId_of_contributions.ts diff --git a/database/migrations/0081-user_join_community.ts b/database/migration/migrations/0081-user_join_community.ts similarity index 100% rename from database/migrations/0081-user_join_community.ts rename to database/migration/migrations/0081-user_join_community.ts diff --git a/database/migrations/0082-introduce_gms_registration.ts b/database/migration/migrations/0082-introduce_gms_registration.ts similarity index 100% rename from database/migrations/0082-introduce_gms_registration.ts rename to database/migration/migrations/0082-introduce_gms_registration.ts diff --git a/database/migrations/0083-join_community_federated_communities.ts b/database/migration/migrations/0083-join_community_federated_communities.ts similarity index 100% rename from database/migrations/0083-join_community_federated_communities.ts rename to database/migration/migrations/0083-join_community_federated_communities.ts diff --git a/database/migrations/0084-introduce_humhub_registration.ts b/database/migration/migrations/0084-introduce_humhub_registration.ts similarity index 100% rename from database/migrations/0084-introduce_humhub_registration.ts rename to database/migration/migrations/0084-introduce_humhub_registration.ts diff --git a/database/migrations/0085-add_index_transactions_user_id.ts b/database/migration/migrations/0085-add_index_transactions_user_id.ts similarity index 100% rename from database/migrations/0085-add_index_transactions_user_id.ts rename to database/migration/migrations/0085-add_index_transactions_user_id.ts diff --git a/database/migrations/0086-add_community_location.ts b/database/migration/migrations/0086-add_community_location.ts similarity index 100% rename from database/migrations/0086-add_community_location.ts rename to database/migration/migrations/0086-add_community_location.ts diff --git a/database/migrations/0087-add_index_on_user_roles.ts b/database/migration/migrations/0087-add_index_on_user_roles.ts similarity index 100% rename from database/migrations/0087-add_index_on_user_roles.ts rename to database/migration/migrations/0087-add_index_on_user_roles.ts diff --git a/database/migrations/0088-create_project_brandings.ts b/database/migration/migrations/0088-create_project_brandings.ts similarity index 100% rename from database/migrations/0088-create_project_brandings.ts rename to database/migration/migrations/0088-create_project_brandings.ts diff --git a/database/migrations/0089-add_openai_threads.ts b/database/migration/migrations/0089-add_openai_threads.ts similarity index 100% rename from database/migrations/0089-add_openai_threads.ts rename to database/migration/migrations/0089-add_openai_threads.ts diff --git a/database/migrations/0090-drop_unused_tables.ts b/database/migration/migrations/0090-drop_unused_tables.ts similarity index 100% rename from database/migrations/0090-drop_unused_tables.ts rename to database/migration/migrations/0090-drop_unused_tables.ts diff --git a/database/src/prepare.ts b/database/migration/prepare.ts similarity index 97% rename from database/src/prepare.ts rename to database/migration/prepare.ts index e29fc1422..8db24b3a4 100644 --- a/database/src/prepare.ts +++ b/database/migration/prepare.ts @@ -1,7 +1,7 @@ import { Connection, ResultSetHeader, RowDataPacket, createConnection } from 'mysql2/promise' -import { CONFIG } from './config' -import { latestDbVersion } from './config/detectLastDBVersion' +import { CONFIG } from '@/config' +import { latestDbVersion } from '@/detectLastDBVersion' export enum DatabaseState { NOT_CONNECTED = 'NOT_CONNECTED', diff --git a/database/package.json b/database/package.json index d7c7d8fae..cf9d1963b 100644 --- a/database/package.json +++ b/database/package.json @@ -3,7 +3,7 @@ "version": "2.6.0", "description": "Gradido Database Tool to execute database migrations", "main": "./build/index.js", - "types": "./entity/index.ts", + "types": "./src/index.ts", "exports": { ".": { "import": "./build/index.js", @@ -19,13 +19,13 @@ "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", - "clear": "cross-env TZ=UTC tsx src/index.ts clear", - "up": "cross-env TZ=UTC tsx src/index.ts up", - "down": "cross-env TZ=UTC tsx src/index.ts down", - "reset": "cross-env TZ=UTC tsx src/index.ts reset", - "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx src/index.ts up", - "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx src/index.ts up", - "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx src/index.ts up" + "clear": "cross-env TZ=UTC tsx migration/index.ts clear", + "up": "cross-env TZ=UTC tsx migration/index.ts up", + "down": "cross-env TZ=UTC tsx migration/index.ts down", + "reset": "cross-env TZ=UTC tsx migration/index.ts reset", + "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx migration/index.ts up", + "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx migration/index.ts up", + "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx migration/index.ts up" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -41,6 +41,7 @@ "dotenv": "^10.0.0", "esbuild": "^0.25.2", "geojson": "^0.5.0", + "log4js": "^6.9.1", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", diff --git a/database/src/AppDatabase.ts b/database/src/AppDatabase.ts new file mode 100644 index 000000000..458bd4c75 --- /dev/null +++ b/database/src/AppDatabase.ts @@ -0,0 +1,103 @@ +import { DataSource as DBDataSource, FileLogger } from 'typeorm' +import { entities, Migration } from '@/entity' + +import { CONFIG } from '@/config' +import { logger } from '@/logging' +import { latestDbVersion } from '.' + +export class AppDatabase { + private static instance: AppDatabase + private connection: DBDataSource | undefined + + /** + * The Singleton's constructor should always be private to prevent direct + * construction calls with the `new` operator. + */ + private constructor() {} + + /** + * The static method that controls the access to the singleton instance. + * + * This implementation let you subclass the Singleton class while keeping + * just one instance of each subclass around. + */ + public static getInstance(): AppDatabase { + if (!AppDatabase.instance) { + AppDatabase.instance = new AppDatabase() + } + return AppDatabase.instance + } + + public getDataSource(): DBDataSource { + if (!this.connection) { + throw new Error('Connection not initialized') + } + return this.connection + } + + // create database connection, initialize with automatic retry and check for correct database version + public async init(): Promise { + if (this.connection?.isInitialized) return + + // log sql query only of enable by .env, this produce so much data it should be only used when really needed + const logging: boolean = CONFIG.TYPEORM_LOGGING_ACTIVE + this.connection = new DBDataSource({ + type: 'mysql', + legacySpatialSupport: false, + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + username: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE, + entities, + synchronize: false, + logging, + logger: logging ? new FileLogger('all', { + logPath: CONFIG.TYPEORM_LOGGING_RELATIVE_PATH, + }) : undefined, + extra: { + charset: 'utf8mb4_unicode_ci', + }, + }) + // retry connection on failure some times to allow database to catch up + for (let attempt = 1; attempt <= CONFIG.DB_CONNECT_RETRY_COUNT; attempt++) { + try { + await this.connection.initialize() + if(this.connection.isInitialized) { + logger.info(`Database connection established on attempt ${attempt}`) + break + } + } catch (error) { + logger.warn(`Attempt ${attempt} failed to connect to DB:`, error) + await new Promise((resolve) => setTimeout(resolve, CONFIG.DB_CONNECT_RETRY_DELAY_MS)) + } + } + if (!this.connection?.isInitialized) { + throw new Error('Could not connect to database') + } + // check for correct database version + await this.checkDBVersion() + } + + public async close(): Promise { + await this.connection?.destroy() + } + // ###################################### + // private methods + // ###################################### + private async checkDBVersion(): Promise { + const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) + if(!dbVersion) { + throw new Error('Could not find database version') + } + if (!dbVersion.fileName.startsWith(latestDbVersion)) { + throw new Error( + `Wrong database version detected - the backend requires '${latestDbVersion}' but found '${ + dbVersion.fileName + }`, + ) + } + } +} + +export const getDataSource = () => AppDatabase.getInstance().getDataSource() diff --git a/database/src/config/index.ts b/database/src/config/index.ts index fdfb1b57e..a576e7ec1 100644 --- a/database/src/config/index.ts +++ b/database/src/config/index.ts @@ -8,6 +8,7 @@ const constants = { EXPECTED: 'v1.2022-03-18', CURRENT: '', }, + LOG4JS_CATEGORY_NAME: 'database' } const database = { @@ -22,6 +23,8 @@ const database = { DB_USER: process.env.DB_USER ?? 'root', DB_PASSWORD: process.env.DB_PASSWORD ?? '', DB_DATABASE: process.env.DB_DATABASE ?? 'gradido_community', + TYPEORM_LOGGING_RELATIVE_PATH: process.env.TYPEORM_LOGGING_RELATIVE_PATH ?? 'typeorm.database.log', + TYPEORM_LOGGING_ACTIVE: process.env.TYPEORM_LOGGING_ACTIVE === 'true' || false, } const migrations = { diff --git a/database/src/config/detectLastDBVersion.ts b/database/src/detectLastDBVersion.ts similarity index 94% rename from database/src/config/detectLastDBVersion.ts rename to database/src/detectLastDBVersion.ts index b91ac2949..8dedb813f 100644 --- a/database/src/config/detectLastDBVersion.ts +++ b/database/src/detectLastDBVersion.ts @@ -5,7 +5,7 @@ import path from 'node:path' const DB_VERSION_PATTERN = /^(\d{4}-[a-z0-9-_]+)/ // Define the paths to check -const migrationsDir = path.join(__dirname, '..', '..', 'migrations') +const migrationsDir = path.join(__dirname, '..', 'migration', 'migrations') // Helper function to get the highest version number from the directory function getLatestDbVersion(dir: string): string { diff --git a/database/entity/Community.ts b/database/src/entity/Community.ts similarity index 97% rename from database/entity/Community.ts rename to database/src/entity/Community.ts index fde1f0df0..11142f0ff 100644 --- a/database/entity/Community.ts +++ b/database/src/entity/Community.ts @@ -9,7 +9,7 @@ import { PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm' -import { GeometryTransformer } from '../src/typeorm/GeometryTransformer' +import { GeometryTransformer } from './transformer/GeometryTransformer' import { FederatedCommunity } from './FederatedCommunity' import { User } from './User' diff --git a/database/entity/Contribution.ts b/database/src/entity/Contribution.ts similarity index 97% rename from database/entity/Contribution.ts rename to database/src/entity/Contribution.ts index c7173a79c..d4daa4e64 100644 --- a/database/entity/Contribution.ts +++ b/database/src/entity/Contribution.ts @@ -10,7 +10,7 @@ import { OneToOne, PrimaryGeneratedColumn, } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' import { ContributionMessage } from './ContributionMessage' import { Transaction } from './Transaction' import { User } from './User' diff --git a/database/entity/ContributionLink.ts b/database/src/entity/ContributionLink.ts similarity index 96% rename from database/entity/ContributionLink.ts rename to database/src/entity/ContributionLink.ts index 8f79f6b85..fd66c8946 100644 --- a/database/entity/ContributionLink.ts +++ b/database/src/entity/ContributionLink.ts @@ -1,6 +1,6 @@ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, DeleteDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' @Entity('contribution_links') export class ContributionLink extends BaseEntity { diff --git a/database/entity/ContributionMessage.ts b/database/src/entity/ContributionMessage.ts similarity index 100% rename from database/entity/ContributionMessage.ts rename to database/src/entity/ContributionMessage.ts diff --git a/database/entity/DltTransaction.ts b/database/src/entity/DltTransaction.ts similarity index 100% rename from database/entity/DltTransaction.ts rename to database/src/entity/DltTransaction.ts diff --git a/database/entity/Event.ts b/database/src/entity/Event.ts similarity index 97% rename from database/entity/Event.ts rename to database/src/entity/Event.ts index 868ddaf60..f5280d9a2 100644 --- a/database/entity/Event.ts +++ b/database/src/entity/Event.ts @@ -8,7 +8,7 @@ import { ManyToOne, PrimaryGeneratedColumn, } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' import { Contribution } from './Contribution' import { ContributionLink } from './ContributionLink' import { ContributionMessage } from './ContributionMessage' diff --git a/database/entity/FederatedCommunity.ts b/database/src/entity/FederatedCommunity.ts similarity index 100% rename from database/entity/FederatedCommunity.ts rename to database/src/entity/FederatedCommunity.ts diff --git a/database/entity/LoginElopageBuys.ts b/database/src/entity/LoginElopageBuys.ts similarity index 100% rename from database/entity/LoginElopageBuys.ts rename to database/src/entity/LoginElopageBuys.ts diff --git a/database/entity/Migration.ts b/database/src/entity/Migration.ts similarity index 100% rename from database/entity/Migration.ts rename to database/src/entity/Migration.ts diff --git a/database/entity/OpenaiThreads.ts b/database/src/entity/OpenaiThreads.ts similarity index 100% rename from database/entity/OpenaiThreads.ts rename to database/src/entity/OpenaiThreads.ts diff --git a/database/entity/PendingTransaction.ts b/database/src/entity/PendingTransaction.ts similarity index 97% rename from database/entity/PendingTransaction.ts rename to database/src/entity/PendingTransaction.ts index 5281e38ff..71d3b5f30 100644 --- a/database/entity/PendingTransaction.ts +++ b/database/src/entity/PendingTransaction.ts @@ -1,7 +1,7 @@ /* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' @Entity('pending_transactions') export class PendingTransaction extends BaseEntity { diff --git a/database/entity/ProjectBranding.ts b/database/src/entity/ProjectBranding.ts similarity index 100% rename from database/entity/ProjectBranding.ts rename to database/src/entity/ProjectBranding.ts diff --git a/database/entity/Transaction.ts b/database/src/entity/Transaction.ts similarity index 98% rename from database/entity/Transaction.ts rename to database/src/entity/Transaction.ts index 196005ef6..50c4d3102 100644 --- a/database/entity/Transaction.ts +++ b/database/src/entity/Transaction.ts @@ -1,7 +1,7 @@ /* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' import { Contribution } from './Contribution' import { DltTransaction } from './DltTransaction' diff --git a/database/entity/TransactionLink.ts b/database/src/entity/TransactionLink.ts similarity index 94% rename from database/entity/TransactionLink.ts rename to database/src/entity/TransactionLink.ts index 68e8c4b68..e1ccfa675 100644 --- a/database/entity/TransactionLink.ts +++ b/database/src/entity/TransactionLink.ts @@ -1,6 +1,6 @@ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, DeleteDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm' -import { DecimalTransformer } from '../src/typeorm/DecimalTransformer' +import { DecimalTransformer } from './transformer/DecimalTransformer' @Entity('transaction_links') export class TransactionLink extends BaseEntity { diff --git a/database/entity/User.ts b/database/src/entity/User.ts similarity index 98% rename from database/entity/User.ts rename to database/src/entity/User.ts index 9ff7d50f8..3c8d31cd9 100644 --- a/database/entity/User.ts +++ b/database/src/entity/User.ts @@ -10,7 +10,7 @@ import { OneToOne, PrimaryGeneratedColumn, } from 'typeorm' -import { GeometryTransformer } from '../src/typeorm/GeometryTransformer' +import { GeometryTransformer } from './transformer/GeometryTransformer' import { Community } from './Community' import { Contribution } from './Contribution' import { ContributionMessage } from './ContributionMessage' diff --git a/database/entity/UserContact.ts b/database/src/entity/UserContact.ts similarity index 100% rename from database/entity/UserContact.ts rename to database/src/entity/UserContact.ts diff --git a/database/entity/UserRole.ts b/database/src/entity/UserRole.ts similarity index 100% rename from database/entity/UserRole.ts rename to database/src/entity/UserRole.ts diff --git a/database/entity/index.ts b/database/src/entity/index.ts similarity index 92% rename from database/entity/index.ts rename to database/src/entity/index.ts index b6ecd8f6c..01195c37e 100644 --- a/database/entity/index.ts +++ b/database/src/entity/index.ts @@ -1,4 +1,3 @@ -import { latestDbVersion } from '../src/config/detectLastDBVersion' import { Community } from './Community' import { Contribution } from './Contribution' import { ContributionLink } from './ContributionLink' @@ -35,9 +34,7 @@ export { User, UserContact, UserRole, - latestDbVersion, } -export * from '../logging' export const entities = [ Community, diff --git a/database/src/typeorm/DecimalTransformer.ts b/database/src/entity/transformer/DecimalTransformer.ts similarity index 100% rename from database/src/typeorm/DecimalTransformer.ts rename to database/src/entity/transformer/DecimalTransformer.ts diff --git a/database/src/typeorm/GeometryTransformer.ts b/database/src/entity/transformer/GeometryTransformer.ts similarity index 100% rename from database/src/typeorm/GeometryTransformer.ts rename to database/src/entity/transformer/GeometryTransformer.ts diff --git a/database/src/index.ts b/database/src/index.ts index ca5878f1a..0eb4bb14d 100644 --- a/database/src/index.ts +++ b/database/src/index.ts @@ -1,102 +1,5 @@ -import { CONFIG } from './config' -import { DatabaseState, getDatabaseState } from './prepare' - -import path from 'node:path' -import { createPool } from 'mysql' -import { Migration } from 'ts-mysql-migrate' -import { clearDatabase } from './clear' -import { latestDbVersion } from './config/detectLastDBVersion' - -const run = async (command: string) => { - if (command === 'clear') { - if (CONFIG.NODE_ENV === 'production') { - throw new Error('Clearing database in production is not allowed') - } - await clearDatabase() - return - } - // Database actions not supported by our migration library - // await createDatabase() - const state = await getDatabaseState() - if (state === DatabaseState.NOT_CONNECTED) { - throw new Error( - `Database not connected, is database server running? - host: ${CONFIG.DB_HOST} - port: ${CONFIG.DB_PORT} - user: ${CONFIG.DB_USER} - password: ${CONFIG.DB_PASSWORD.slice(-2)} - database: ${CONFIG.DB_DATABASE}`, - ) - } - if (state === DatabaseState.HIGHER_VERSION) { - throw new Error('Database version is higher than required, please switch to the correct branch') - } - if (state === DatabaseState.SAME_VERSION) { - if (command === 'up') { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('Database is up to date') - return - } - } - // Initialize Migrations - const pool = createPool({ - host: CONFIG.DB_HOST, - port: CONFIG.DB_PORT, - user: CONFIG.DB_USER, - password: CONFIG.DB_PASSWORD, - database: CONFIG.DB_DATABASE, - }) - const migration = new Migration({ - conn: pool, - tableName: CONFIG.MIGRATIONS_TABLE, - silent: true, - dir: path.join(__dirname, '..', 'migrations'), - }) - await migration.initialize() - - // Execute command - switch (command) { - case 'up': - await migration.up() // use for upgrade script - break - case 'down': - await migration.down() // use for downgrade script - break - case 'reset': - if (CONFIG.NODE_ENV === 'production') { - throw new Error('Resetting database in production is not allowed') - } - await migration.reset() - break - default: - throw new Error(`Unsupported command ${command}`) - } - if (command === 'reset') { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('Database was reset') - } else { - const currentDbVersion = await migration.getLastVersion() - // biome-ignore lint/suspicious/noConsole: no logger present - console.log(`Database was ${command} migrated to version: ${currentDbVersion.fileName}`) - if (latestDbVersion === currentDbVersion.fileName.split('.')[0]) { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('Database is now up to date') - } else { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('The latest database version is: ', latestDbVersion) - } - } - - // Terminate connections gracefully - pool.end() -} - -run(process.argv[2]) - .catch((err) => { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log(err) - process.exit(1) - }) - .then(() => { - process.exit() - }) +import { latestDbVersion } from '@/detectLastDBVersion' +export { latestDbVersion } +export * from '@/entity' +export * from '@/logging' +export * from '@/AppDatabase' diff --git a/database/logging/AbstractLogging.view.ts b/database/src/logging/AbstractLogging.view.ts similarity index 100% rename from database/logging/AbstractLogging.view.ts rename to database/src/logging/AbstractLogging.view.ts diff --git a/database/logging/CommunityLogging.view.ts b/database/src/logging/CommunityLogging.view.ts similarity index 94% rename from database/logging/CommunityLogging.view.ts rename to database/src/logging/CommunityLogging.view.ts index 0108aefd8..ce167e87b 100644 --- a/database/logging/CommunityLogging.view.ts +++ b/database/src/logging/CommunityLogging.view.ts @@ -1,4 +1,4 @@ -import { Community } from '../entity/Community' +import { Community } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' diff --git a/database/logging/ContributionLogging.view.ts b/database/src/logging/ContributionLogging.view.ts similarity index 97% rename from database/logging/ContributionLogging.view.ts rename to database/src/logging/ContributionLogging.view.ts index 9896fac4e..19b9e0de3 100644 --- a/database/logging/ContributionLogging.view.ts +++ b/database/src/logging/ContributionLogging.view.ts @@ -1,4 +1,4 @@ -import { Contribution } from '../entity/Contribution' +import { Contribution } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { ContributionMessageLoggingView } from './ContributionMessageLogging.view' import { TransactionLoggingView } from './TransactionLogging.view' diff --git a/database/logging/ContributionMessageLogging.view.ts b/database/src/logging/ContributionMessageLogging.view.ts similarity index 93% rename from database/logging/ContributionMessageLogging.view.ts rename to database/src/logging/ContributionMessageLogging.view.ts index 741820a3c..b18f8eff5 100644 --- a/database/logging/ContributionMessageLogging.view.ts +++ b/database/src/logging/ContributionMessageLogging.view.ts @@ -1,4 +1,4 @@ -import { ContributionMessage } from '../entity/ContributionMessage' +import { ContributionMessage } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { ContributionLoggingView } from './ContributionLogging.view' import { UserLoggingView } from './UserLogging.view' diff --git a/database/logging/DltTransactionLogging.view.ts b/database/src/logging/DltTransactionLogging.view.ts similarity index 92% rename from database/logging/DltTransactionLogging.view.ts rename to database/src/logging/DltTransactionLogging.view.ts index 1a51121c8..8f55e9b98 100644 --- a/database/logging/DltTransactionLogging.view.ts +++ b/database/src/logging/DltTransactionLogging.view.ts @@ -1,4 +1,4 @@ -import { DltTransaction } from '../entity/DltTransaction' +import { DltTransaction } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { TransactionLoggingView } from './TransactionLogging.view' diff --git a/database/logging/FederatedCommunityLogging.view.ts b/database/src/logging/FederatedCommunityLogging.view.ts similarity index 91% rename from database/logging/FederatedCommunityLogging.view.ts rename to database/src/logging/FederatedCommunityLogging.view.ts index ccfc9f005..b5e603a50 100644 --- a/database/logging/FederatedCommunityLogging.view.ts +++ b/database/src/logging/FederatedCommunityLogging.view.ts @@ -1,4 +1,4 @@ -import { FederatedCommunity } from '../entity/FederatedCommunity' +import { FederatedCommunity } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' export class FederatedCommunityLoggingView extends AbstractLoggingView { diff --git a/database/logging/PendingTransactionLogging.view.ts b/database/src/logging/PendingTransactionLogging.view.ts similarity index 83% rename from database/logging/PendingTransactionLogging.view.ts rename to database/src/logging/PendingTransactionLogging.view.ts index 78035004b..4f7ba905a 100644 --- a/database/logging/PendingTransactionLogging.view.ts +++ b/database/src/logging/PendingTransactionLogging.view.ts @@ -1,5 +1,4 @@ -import { PendingTransaction } from '../entity/PendingTransaction' -import { Transaction } from '../entity/Transaction' +import { PendingTransaction, Transaction } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { TransactionLoggingView } from './TransactionLogging.view' diff --git a/database/logging/TransactionLogging.view.ts b/database/src/logging/TransactionLogging.view.ts similarity index 97% rename from database/logging/TransactionLogging.view.ts rename to database/src/logging/TransactionLogging.view.ts index e0a039a4b..ce7b82852 100644 --- a/database/logging/TransactionLogging.view.ts +++ b/database/src/logging/TransactionLogging.view.ts @@ -1,4 +1,4 @@ -import { Transaction } from '../entity/Transaction' +import { Transaction } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { ContributionLoggingView } from './ContributionLogging.view' import { DltTransactionLoggingView } from './DltTransactionLogging.view' diff --git a/database/logging/UserContactLogging.view.ts b/database/src/logging/UserContactLogging.view.ts similarity index 95% rename from database/logging/UserContactLogging.view.ts rename to database/src/logging/UserContactLogging.view.ts index e843ca738..7fbe258bf 100644 --- a/database/logging/UserContactLogging.view.ts +++ b/database/src/logging/UserContactLogging.view.ts @@ -1,4 +1,4 @@ -import { UserContact } from '../entity/UserContact' +import { UserContact } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { UserLoggingView } from './UserLogging.view' diff --git a/database/logging/UserLogging.view.ts b/database/src/logging/UserLogging.view.ts similarity index 98% rename from database/logging/UserLogging.view.ts rename to database/src/logging/UserLogging.view.ts index 375068ff7..a930a6f16 100644 --- a/database/logging/UserLogging.view.ts +++ b/database/src/logging/UserLogging.view.ts @@ -1,4 +1,4 @@ -import { User } from '../entity/User' +import { User } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { ContributionLoggingView } from './ContributionLogging.view' import { ContributionMessageLoggingView } from './ContributionMessageLogging.view' diff --git a/database/logging/UserRoleLogging.view.ts b/database/src/logging/UserRoleLogging.view.ts similarity index 92% rename from database/logging/UserRoleLogging.view.ts rename to database/src/logging/UserRoleLogging.view.ts index 9b4914f15..98a0c60ea 100644 --- a/database/logging/UserRoleLogging.view.ts +++ b/database/src/logging/UserRoleLogging.view.ts @@ -1,4 +1,4 @@ -import { UserRole } from '../entity/UserRole' +import { UserRole } from '@/entity' import { AbstractLoggingView } from './AbstractLogging.view' import { UserLoggingView } from './UserLogging.view' diff --git a/database/logging/index.ts b/database/src/logging/index.ts similarity index 89% rename from database/logging/index.ts rename to database/src/logging/index.ts index 9a436ca47..2a582c235 100644 --- a/database/logging/index.ts +++ b/database/src/logging/index.ts @@ -9,6 +9,8 @@ import { TransactionLoggingView } from './TransactionLogging.view' import { UserContactLoggingView } from './UserContactLogging.view' import { UserLoggingView } from './UserLogging.view' import { UserRoleLoggingView } from './UserRoleLogging.view' +import { CONFIG } from '@/config' +import { getLogger } from 'log4js' export { AbstractLoggingView, @@ -23,3 +25,5 @@ export { UserLoggingView, UserRoleLoggingView, } + +export const logger = getLogger(CONFIG.LOG4JS_CATEGORY_NAME) \ No newline at end of file diff --git a/database/src/typeorm.ts b/database/src/typeorm.ts deleted file mode 100644 index 4b4f494f1..000000000 --- a/database/src/typeorm.ts +++ /dev/null @@ -1 +0,0 @@ -export * from 'typeorm' diff --git a/database/tsconfig.json b/database/tsconfig.json index 37347b875..a7b8834cd 100644 --- a/database/tsconfig.json +++ b/database/tsconfig.json @@ -45,8 +45,10 @@ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "baseUrl": ".", /* Base directory to resolve non-absolute module names. */ + "paths": { + "@/*": ["src/*"], /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + }, // "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ "types": ["node"], /* Type declaration files to be included in compilation. */