NotificationLatch/index.js

75 lines
2.2 KiB
JavaScript

const Container = require('./src/container');
const winston = require('winston');
const express = require('express');
const AsyncFs = require('./src/asyncfs');
const DateTimeProvider = require('./src/datetimeprovider');
const ApiRoutes = require('./src/routes/api');
const NotificationRepository = require('./src/notification/repository');
const NotificationFacade = require('./src/notification/facade');
const TransportProvider = require('./src/transport/provider');
const SubjectParser = require('./src/subjectparser');
const logger = winston.createLogger({
level: 'verbose',
});
logger.add(new winston.transports.Console({
format: winston.format.simple()
}))
const container = new Container();
container.register('Logger', c => logger);
container.register('AsyncFs', c => new AsyncFs());
container.register('DateTimeProvider', c => new DateTimeProvider());
container.register('ApiRoutes', c => new ApiRoutes(c.Logger, c.NotificationFacade, c.Config));
container.register('NotificationRepository', c => new NotificationRepository(c.Logger, c.DateTimeProvider, c.AsyncFs, c.Config));
container.register('NotificationFacade', c => new NotificationFacade(c.Logger, c.DateTimeProvider, c.TransportProvider, c.SubjectParser, c.NotificationRepository, c.Config));
container.register('TransportProvider', c => new TransportProvider());
container.register('SubjectParser', c => new SubjectParser());
async function asyncMain()
{
let config;
if (await container.AsyncFs.exists('config.js'))
{
logger.verbose('Using config.js');
config = require('./config.js');
}
else
{
logger.verbose('No config.js found, using config.default.js');
config = require('./config.default.js');
}
container.register('Config', c => config);
await container.NotificationRepository.init();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use('/api', container.ApiRoutes.create(express));
app.use('/', express.static('frontend/dist'));
app.listen(config.port, () =>
{
logger.info(`NotificationLatch listening at http://localhost:${config.port}`);
});
}
asyncMain()
.catch(err =>
{
logger.error(`Unhandled exception: ${err}`);
logger.verbose(err.stack);
});