summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-11-14 16:31:59 +0300
committereug-vs <eug-vs@keemail.me>2020-11-14 16:31:59 +0300
commit36465387454cdb797f886f732d40a70faa92cbad (patch)
tree28616bd04e3e98c5bd40e82b0c674a0ea9437357 /src
parent2a791b8999dc08824baf6787021d45df676b4088 (diff)
downloadbsu-fantom-36465387454cdb797f886f732d40a70faa92cbad.tar.gz
refactor: reuse Mongoose connection in Agenda
Diffstat (limited to 'src')
-rw-r--r--src/app.js23
-rw-r--r--src/connectDb.js40
-rw-r--r--src/services/events/event.service.js35
-rw-r--r--src/services/index.js10
-rw-r--r--src/services/users/user.model.js6
-rw-r--r--src/services/users/user.schema.js14
-rw-r--r--src/services/users/user.service.js7
7 files changed, 135 insertions, 0 deletions
diff --git a/src/app.js b/src/app.js
new file mode 100644
index 0000000..45f9e61
--- /dev/null
+++ b/src/app.js
@@ -0,0 +1,23 @@
+const feathers = require('@feathersjs/feathers');
+const express = require('@feathersjs/express');
+const socketio = require('@feathersjs/socketio');
+const cors = require('cors')
+
+const services = require('./services');
+
+
+const app = express(feathers());
+
+app.use(express.json());
+app.use(express.urlencoded({ extended: true }));
+app.use(express.static(__dirname));
+app.use(express.errorHandler());
+app.use(cors());
+
+app.configure(express.rest());
+app.configure(socketio());
+app.configure(services);
+
+
+module.exports = app;
+
diff --git a/src/connectDb.js b/src/connectDb.js
new file mode 100644
index 0000000..c7ad13b
--- /dev/null
+++ b/src/connectDb.js
@@ -0,0 +1,40 @@
+const mongoose = require('mongoose');
+const Promise = require('bluebird');
+
+const MONGODB_URL = process.env.MONGODB_URI || 'mongodb://localhost:27017/bsu-fantom';
+const { MONGODB_USER, MONGODB_PASSWORD } = process.env;
+
+let connection;
+
+const connectDb = () => new Promise ((resolve, reject) => {
+ mongoose.Promise = Promise;
+
+ mongoose.connect(MONGODB_URL, {
+ user: MONGODB_USER,
+ pass: MONGODB_PASSWORD,
+ useNewUrlParser: true,
+ useUnifiedTopology: true,
+ useCreateIndex: true,
+ useFindAndModify: false,
+ family: 4 // Use IPv4, skip trying IPv6
+ });
+
+ connection = mongoose.connection;
+
+ connection.on('error', error => {
+ console.log(error);
+ reject(error);
+ });
+
+ connection.once('open', () => {
+ console.log('Connection to MongoDB successfull')
+ resolve();
+ });
+});
+
+const getConnection = () => connection;
+
+module.exports = {
+ connectDb,
+ getConnection
+};
diff --git a/src/services/events/event.service.js b/src/services/events/event.service.js
new file mode 100644
index 0000000..5c5bcff
--- /dev/null
+++ b/src/services/events/event.service.js
@@ -0,0 +1,35 @@
+const Agenda = require('agenda');
+const { getConnection } = require('../../connectDb.js');
+
+
+class Events {
+ setup(app) {
+ this.collectionName = 'events';
+
+ const connection = getConnection();
+ this.agenda = new Agenda();
+ this.agenda.mongo(
+ connection.collection(this.collectionName).conn.db,
+ this.collectionName
+ );
+
+ this.defineJobs();
+
+ return this.agenda.start();
+ };
+
+ defineJobs() {
+ this.agenda.define('attend class', async job => {
+ console.log('Running attend class job with attrs:');
+ console.log(job.attrs);
+ });
+ };
+
+ async create(data, params) {
+ return this.agenda.schedule(data.date, 'attend class', { data });
+ };
+}
+
+
+module.exports = app => app.use('/events', new Events());
+
diff --git a/src/services/index.js b/src/services/index.js
new file mode 100644
index 0000000..f2d65d0
--- /dev/null
+++ b/src/services/index.js
@@ -0,0 +1,10 @@
+const Users = require('./users/user.service.js');
+const Events = require('./events/event.service.js');
+
+module.exports = app => {
+ app.configure(Users);
+ app.configure(Events);
+
+ app.get('/ping', (req, res) => res.send('pong'));
+};
+
diff --git a/src/services/users/user.model.js b/src/services/users/user.model.js
new file mode 100644
index 0000000..74a83ae
--- /dev/null
+++ b/src/services/users/user.model.js
@@ -0,0 +1,6 @@
+const { model } = require('mongoose');
+const userSchema = require('./user.schema.js');
+
+module.exports = model('User', userSchema);
+
+
diff --git a/src/services/users/user.schema.js b/src/services/users/user.schema.js
new file mode 100644
index 0000000..f2c98ef
--- /dev/null
+++ b/src/services/users/user.schema.js
@@ -0,0 +1,14 @@
+const { Schema } = require('mongoose');
+
+module.exports = new Schema({
+ username: {
+ type: String,
+ unique: true,
+ required: true
+ },
+ password: {
+ type: String,
+ required: true
+ }
+}, { timestamps: true });
+
diff --git a/src/services/users/user.service.js b/src/services/users/user.service.js
new file mode 100644
index 0000000..67f2ae6
--- /dev/null
+++ b/src/services/users/user.service.js
@@ -0,0 +1,7 @@
+const service = require('feathers-mongoose');
+const Model = require('./user.model.js');
+
+const UserService = service({ Model })
+
+module.exports = app => app.use('/users', UserService);
+