71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
const { createContainer, asClass, asFunction, asValue } = require('awilix');
|
|
const { Sequelize } = require('sequelize');
|
|
const mongoose = require('mongoose');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const config = require('../config');
|
|
|
|
function setupContainer() {
|
|
const container = createContainer();
|
|
|
|
container.register({
|
|
sequelize: asFunction(() => {
|
|
const sequelize = new Sequelize(
|
|
config.database.postgres.uri,
|
|
config.database.postgres.options
|
|
);
|
|
|
|
const modelsDir = path.join(__dirname, '../models');
|
|
fs.readdirSync(modelsDir)
|
|
.filter(
|
|
file =>
|
|
file.indexOf('.') !== 0 &&
|
|
file.slice(-3) === '.js' &&
|
|
file !== 'bet.model.js' &&
|
|
file !== 'associations.js'
|
|
)
|
|
.forEach(file => {
|
|
require(path.join(modelsDir, file))(sequelize);
|
|
});
|
|
|
|
const defineAssociations = require('../models/associations');
|
|
defineAssociations(sequelize);
|
|
|
|
return sequelize;
|
|
}).singleton(),
|
|
|
|
mongoose: asValue(mongoose),
|
|
});
|
|
|
|
container.register({
|
|
usersRepository: asClass(require('../repositories/postgres/users.repository')).scoped(),
|
|
groupsRepository: asClass(require('../repositories/postgres/groups.repository')).scoped(),
|
|
friendshipsRepository: asClass(
|
|
require('../repositories/postgres/friendships.repository')
|
|
).scoped(),
|
|
friendRequestsRepository: asClass(
|
|
require('../repositories/postgres/friendRequests.repository')
|
|
).scoped(),
|
|
betsRepository: asClass(require('../repositories/mongo/bets.repository')).scoped(),
|
|
});
|
|
|
|
container.register({
|
|
dataStitchingService: asClass(require('../services/data-stitching.service')).scoped(),
|
|
usersService: asClass(require('../services/users.service')).scoped(),
|
|
groupsService: asClass(require('../services/groups.service')).scoped(),
|
|
friendsService: asClass(require('../services/friends.service')).scoped(),
|
|
betsService: asClass(require('../services/bets.service')).scoped(),
|
|
});
|
|
|
|
container.register({
|
|
betsController: asClass(require('../controllers/bets.controller')).scoped(),
|
|
groupsController: asClass(require('../controllers/groups.controller')).scoped(),
|
|
usersController: asClass(require('../controllers/users.controller')).scoped(),
|
|
friendsController: asClass(require('../controllers/friends.controller')).scoped(),
|
|
});
|
|
|
|
return container;
|
|
}
|
|
|
|
module.exports = setupContainer;
|