const { Sequelize } = require('sequelize'); const Link = require('./Link'); const List = require('./List'); const LinkList = require('./LinkList'); // Database connection configuration const getDatabaseConfig = () => { // Support DATABASE_URL or individual connection parameters if (process.env.DATABASE_URL) { return { url: process.env.DATABASE_URL, dialect: 'postgres', dialectOptions: { ssl: process.env.DATABASE_SSL === 'true' ? { require: true, rejectUnauthorized: false } : false } }; } return { host: process.env.DB_HOST || 'localhost', port: process.env.DB_PORT || 5432, database: process.env.DB_NAME || 'linkding', username: process.env.DB_USER || 'postgres', password: process.env.DB_PASSWORD || 'postgres', dialect: 'postgres', logging: process.env.NODE_ENV === 'development' ? console.log : false }; }; // Initialize Sequelize const config = getDatabaseConfig(); const sequelize = config.url ? new Sequelize(config.url, { dialect: 'postgres', dialectOptions: config.dialectOptions, logging: config.logging }) : new Sequelize(config.database, config.username, config.password, { host: config.host, port: config.port, dialect: config.dialect, logging: config.logging }); // Initialize models const db = { sequelize, Sequelize, Link: Link(sequelize), List: List(sequelize), LinkList: LinkList(sequelize) }; // Set up associations db.Link.belongsToMany(db.List, { through: db.LinkList, foreignKey: 'link_id', otherKey: 'list_id', as: 'lists' }); db.List.belongsToMany(db.Link, { through: db.LinkList, foreignKey: 'list_id', otherKey: 'link_id', as: 'links' }); module.exports = db;