Skip to content

Commit

Permalink
create User model and routes
Browse files Browse the repository at this point in the history
  • Loading branch information
dbuentello committed Apr 26, 2016
1 parent a7351bd commit e772c02
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 0 deletions.
46 changes: 46 additions & 0 deletions models/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
'use strict';

class User {
constructor(r, name) {
this.r = r.table(name);
this._name = name;
this._indexes = ['createdAt']
}

find(id, done) {
this.r.get(id)
.run()
.then(function(user) {
return done(null, user)
})
.error(function(err) {
return done(err)
})
}

create(user, done) {
var fullUser = Object.assign(user, {createdAt: new Date()});
this.r.insert(fullUser, {returnChanges: true})
.run()
.then(function(result) {
return done(null, result.changes[0].new_val)
})
.error(function(err) {
return done(err)
})
}

remove(id, done) {
this.r.get(id)
.delete({returnChanges: true})
.run()
.then(function(result) {
return done(null, result)
})
.error(function(err) {
return done(err)
})
}
}

module.exports = User;
3 changes: 3 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ server.register([
{
register: require('./server/base/messages/index.js')
},
{
register: require('./server/base/users/index.js')
},
{
register: require('./server/socket/index.js')
}
Expand Down
78 changes: 78 additions & 0 deletions server/base/users/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
var path = require('path');
var db = require(path.join(path.dirname(require.main.filename), 'models'));

var Boom = require('boom');
var _ = require('lodash');

exports.register = function(server, options, next) {
var User = db.model('User');

server.route([
{
method: 'GET',
path: '/users/{id?}',
config: {
handler: function(req, reply) {
if (req.params.id) {
User.find(req.params.id, function(err, user) {
if (err) {
return reply(Boom.badImplementation(err));
}
if (_.isEmpty(user)) {
return reply(Boom.notFound());
}
return reply(user);
});
} else {
// Alternative: use native r methods
User.r.run()
.then(function(users) {
return reply(users);
})
.error(function(err) {
return reply(Boom.badImplementation(err));
})
}
}
}
},
{
method: 'POST',
path: '/users',
config: {
handler: function(req, reply) {
User.create(req.payload, function(err, newUser) {
if (err) {
return reply(Boom.badImplementation(err));
}
return reply(newUser);
});
}
}
},
{
method: 'DELETE',
path: '/users/{id}',
config: {
handler: function(req, reply) {
if (req.params.id) {
User.remove(req.params.id, function(err, result) {
if (err) {
return reply(Boom.badImplementation(err));
}
return reply(result);
});
} else {
return reply(Boom.badImplementation());
}
}
}
}
]);

next();
};

exports.register.attributes = {
name: 'users'
};

0 comments on commit e772c02

Please sign in to comment.