74 lines
1.7 KiB
JavaScript
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;
|
|
|