import "dotenv/config"; import "reflect-metadata"; import { DataSource } from "typeorm"; import { DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_TYPE, DB_PORT } from "./env.defaults"; import { user } from "./entity/user/user"; import { refresh } from "./entity/refresh"; import { invite } from "./entity/user/invite"; import { userPermission } from "./entity/user/user_permission"; import { role } from "./entity/user/role"; import { rolePermission } from "./entity/user/role_permission"; import { award } from "./entity/settings/award"; import { communication } from "./entity/club/member/communication"; import { communicationType } from "./entity/settings/communicationType"; import { executivePosition } from "./entity/settings/executivePosition"; import { membershipStatus } from "./entity/settings/membershipStatus"; import { qualification } from "./entity/settings/qualification"; import { member } from "./entity/club/member/member"; import { memberAwards } from "./entity/club/member/memberAwards"; import { memberExecutivePositions } from "./entity/club/member/memberExecutivePositions"; import { memberQualifications } from "./entity/club/member/memberQualifications"; import { membership } from "./entity/club/member/membership"; import { protocol } from "./entity/club/protocol/protocol"; import { protocolAgenda } from "./entity/club/protocol/protocolAgenda"; import { protocolDecision } from "./entity/club/protocol/protocolDecision"; import { protocolPresence } from "./entity/club/protocol/protocolPresence"; import { protocolVoting } from "./entity/club/protocol/protocolVoting"; import { protocolPrintout } from "./entity/club/protocol/protocolPrintout"; import { calendar } from "./entity/club/calendar"; import { calendarType } from "./entity/settings/calendarType"; import { reset } from "./entity/reset"; import { query } from "./entity/settings/query"; import { memberView } from "./views/memberView"; import { memberExecutivePositionsView } from "./views/memberExecutivePositionView"; import { memberQualificationsView } from "./views/memberQualificationsView"; import { membershipView } from "./views/membershipsView"; import { template } from "./entity/settings/template"; import { templateUsage } from "./entity/settings/templateUsage"; import { newsletter } from "./entity/club/newsletter/newsletter"; import { newsletterDates } from "./entity/club/newsletter/newsletterDates"; import { newsletterRecipients } from "./entity/club/newsletter/newsletterRecipients"; import { newsletterConfig } from "./entity/settings/newsletterConfig"; import { webapi } from "./entity/user/webapi"; import { webapiPermission } from "./entity/user/webapi_permission"; import { salutation } from "./entity/settings/salutation"; import { BackupAndResetDatabase1738166124200 } from "./migrations/1738166124200-BackupAndResetDatabase"; const dataSource = new DataSource({ type: DB_TYPE as any, host: process.env.NODE_ENV || process.env.DBMODE ? "localhost" : DB_HOST, port: DB_PORT, username: DB_USERNAME, password: DB_PASSWORD, database: DB_NAME, synchronize: false, logging: process.env.NODE_ENV ? true : ["schema", "error", "warn", "log", "migration"], bigNumberStrings: false, entities: [ user, refresh, invite, reset, userPermission, role, rolePermission, award, communication, communicationType, executivePosition, membershipStatus, qualification, salutation, member, memberAwards, memberExecutivePositions, memberQualifications, membership, protocol, protocolAgenda, protocolDecision, protocolPresence, protocolVoting, protocolPrintout, calendar, calendarType, query, template, templateUsage, newsletter, newsletterDates, newsletterRecipients, newsletterConfig, memberView, memberExecutivePositionsView, memberQualificationsView, membershipView, webapi, webapiPermission, ], migrations: [BackupAndResetDatabase1738166124200], migrationsRun: true, migrationsTransactionMode: "each", subscribers: [], }); type ORMType = "int" | "bigint" | "boolean" | "date" | "datetime" | "text" | "varchar"; function getTypeByORM(type: ORMType): string { const dbType = process.env.DB_TYPE; const typeMap: Record> = { mysql: { int: "int", bigint: "bigint", boolean: "tinyint", date: "date", datetime: "datetime", text: "text", varchar: "varchar", }, postgres: { int: "integer", bigint: "bigint", boolean: "boolean", date: "date", datetime: "timestamp", text: "text", varchar: "varchar", }, sqlite: { int: "integer", bigint: "integer", boolean: "integer", date: "text", datetime: "text", text: "text", varchar: "text", }, }; return typeMap[dbType]?.[type] || type; } export { dataSource, getTypeByORM };