Files
linkding/models/index.js
2025-11-16 10:33:59 +01:00

74 lines
1.7 KiB
JavaScript

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;