summaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/services')
-rw-r--r--src/services/authentication/index.js14
-rw-r--r--src/services/index.js18
-rw-r--r--src/services/meal/hooks/index.js31
-rw-r--r--src/services/meal/index.js29
-rw-r--r--src/services/meal/meal-model.js38
-rw-r--r--src/services/user/hooks/index.js51
-rw-r--r--src/services/user/index.js29
-rw-r--r--src/services/user/user-model.js36
8 files changed, 246 insertions, 0 deletions
diff --git a/src/services/authentication/index.js b/src/services/authentication/index.js
new file mode 100644
index 0000000..d5a66b5
--- /dev/null
+++ b/src/services/authentication/index.js
@@ -0,0 +1,14 @@
+'use strict';
+
+const authentication = require('feathers-authentication');
+
+
+module.exports = function() {
+ const app = this;
+
+ let config = app.get('auth');
+
+
+
+ app.configure(authentication(config));
+};
diff --git a/src/services/index.js b/src/services/index.js
new file mode 100644
index 0000000..a05c097
--- /dev/null
+++ b/src/services/index.js
@@ -0,0 +1,18 @@
+'use strict';
+const authentication = require('./authentication');
+const user = require('./user');
+const meal = require('./meal');
+const Sequelize = require('sequelize');
+module.exports = function() {
+ const app = this;
+
+ const sequelize = new Sequelize(app.get('mysql'), {
+ dialect: 'mysql',
+ logging: false
+ });
+ app.set('sequelize', sequelize);
+
+ app.configure(authentication);
+ app.configure(user);
+ app.configure(meal);
+};
diff --git a/src/services/meal/hooks/index.js b/src/services/meal/hooks/index.js
new file mode 100644
index 0000000..2e2795a
--- /dev/null
+++ b/src/services/meal/hooks/index.js
@@ -0,0 +1,31 @@
+'use strict';
+
+const globalHooks = require('../../../hooks');
+const hooks = require('feathers-hooks');
+const auth = require('feathers-authentication').hooks;
+
+exports.before = {
+ all: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated(),
+ globalHooks.restrictToOwnersOrAdmins(),
+ ],
+ find: [],
+ get: [],
+ create: [],
+ update: [],
+ patch: [],
+ remove: []
+};
+
+exports.after = {
+ all: [],
+ find: [],
+ get: [],
+ create: [],
+ update: [],
+ patch: [],
+ remove: []
+};
+
diff --git a/src/services/meal/index.js b/src/services/meal/index.js
new file mode 100644
index 0000000..88ca1bd
--- /dev/null
+++ b/src/services/meal/index.js
@@ -0,0 +1,29 @@
+'use strict';
+
+const service = require('feathers-sequelize');
+const meal = require('./meal-model');
+const hooks = require('./hooks');
+
+module.exports = function(){
+ const app = this;
+
+ const options = {
+ Model: meal(app.get('sequelize')),
+ paginate: {
+ default: 5,
+ max: 25
+ }
+ };
+
+ // Initialize our service with any options it requires
+ app.use('/meals', service(options));
+
+ // Get our initialize service to that we can bind hooks
+ const mealService = app.service('/meals');
+
+ // Set up our before hooks
+ mealService.before(hooks.before);
+
+ // Set up our after hooks
+ mealService.after(hooks.after);
+};
diff --git a/src/services/meal/meal-model.js b/src/services/meal/meal-model.js
new file mode 100644
index 0000000..d15b244
--- /dev/null
+++ b/src/services/meal/meal-model.js
@@ -0,0 +1,38 @@
+'use strict';
+
+// meal-model.js - A sequelize model
+//
+// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
+// for more of what you can do here.
+
+const Sequelize = require('sequelize');
+
+module.exports = function(sequelize) {
+ const meal = sequelize.define('meals', {
+ name: {
+ type: Sequelize.STRING,
+ allowNull: false
+ },
+ date: {
+ type: Sequelize.DATE,
+ allowNull: false
+ },
+ calories: {
+ type: Sequelize.INTEGER,
+ allowNull: false
+ },
+ user_id: {
+ type: Sequelize.INTEGER,
+ references: {
+ model: sequelize.model('users'),
+ key: 'id',
+ }
+ },
+ }, {
+ freezeTableName: true
+ });
+
+ meal.sync();
+
+ return meal;
+};
diff --git a/src/services/user/hooks/index.js b/src/services/user/hooks/index.js
new file mode 100644
index 0000000..9dfe425
--- /dev/null
+++ b/src/services/user/hooks/index.js
@@ -0,0 +1,51 @@
+'use strict';
+
+const globalHooks = require('../../../hooks');
+const hooks = require('feathers-hooks');
+const auth = require('feathers-authentication').hooks;
+
+exports.before = {
+ all: [],
+ find: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated()
+ ],
+ get: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated(),
+ auth.restrictToOwner({ ownerField: 'id' })
+ ],
+ create: [
+ auth.hashPassword()
+ ],
+ update: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated(),
+ auth.restrictToOwner({ ownerField: 'id' })
+ ],
+ patch: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated(),
+ auth.restrictToOwner({ ownerField: 'id' })
+ ],
+ remove: [
+ auth.verifyToken(),
+ auth.populateUser(),
+ auth.restrictToAuthenticated(),
+ auth.restrictToOwner({ ownerField: 'id' })
+ ]
+};
+
+exports.after = {
+ all: [hooks.remove('password')],
+ find: [],
+ get: [],
+ create: [],
+ update: [],
+ patch: [],
+ remove: []
+};
diff --git a/src/services/user/index.js b/src/services/user/index.js
new file mode 100644
index 0000000..3f3438f
--- /dev/null
+++ b/src/services/user/index.js
@@ -0,0 +1,29 @@
+'use strict';
+
+const service = require('feathers-sequelize');
+const user = require('./user-model');
+const hooks = require('./hooks');
+
+module.exports = function(){
+ const app = this;
+
+ const options = {
+ Model: user(app.get('sequelize')),
+ paginate: {
+ default: 5,
+ max: 25
+ }
+ };
+
+ // Initialize our service with any options it requires
+ app.use('/users', service(options));
+
+ // Get our initialize service to that we can bind hooks
+ const userService = app.service('/users');
+
+ // Set up our before hooks
+ userService.before(hooks.before);
+
+ // Set up our after hooks
+ userService.after(hooks.after);
+};
diff --git a/src/services/user/user-model.js b/src/services/user/user-model.js
new file mode 100644
index 0000000..03db95b
--- /dev/null
+++ b/src/services/user/user-model.js
@@ -0,0 +1,36 @@
+'use strict';
+
+// user-model.js - A sequelize model
+//
+// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
+// for more of what you can do here.
+
+const Sequelize = require('sequelize');
+
+module.exports = function(sequelize) {
+ const user = sequelize.define('users', {
+ email: {
+ type: Sequelize.STRING,
+ allowNull: false,
+ unique: true
+ },
+ password: {
+ type: Sequelize.STRING,
+ allowNull: false
+ },
+ role: {
+ type: Sequelize.ENUM('user', 'manager', 'admin'),
+ allowNull: false
+ },
+ goal: {
+ type: Sequelize.INTEGER,
+ allowNull: false
+ },
+ }, {
+ freezeTableName: true
+ });
+
+ user.sync();
+
+ return user;
+};