Skip to content

Commit

Permalink
profile edit forms are working; need styling
Browse files Browse the repository at this point in the history
  • Loading branch information
Melanie Fryman committed Sep 6, 2014
2 parents d20ed50 + d39bb50 commit 9744a17
Show file tree
Hide file tree
Showing 44 changed files with 1,558 additions and 508 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
node_modules/
app/static/img/user_pics/
#app/static/img/user_pics/

45 changes: 45 additions & 0 deletions app/controllers/cart.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
'use strict';

var Gift = require('../models/gift'),
config = require('../../config');

exports.add = function(req, res){
Gift.findById(req.body.giftId, function(err, gift){
req.session.cart = req.session.cart || [];
req.session.cart.push(gift);
req.session.save(function(){
res.redirect('/cart');
});
});
};

exports.index = function(req, res){
var gifts = {},
subtotal = 0,
tax = 0,
total = 0;

(req.session.cart || []).forEach(function(g){
subtotal += g.price;
var id = g._id.toString();
gifts[id] = gifts[id] || {g:g, c:0};
gifts[id].c++;
});

tax = subtotal * 0.075;
total = subtotal + tax;

req.session.totalCents = Math.round(total * 100);
req.session.save(function(){

res.render('users/checkout', {key:config.stripe.publishKey, ids:Object.keys(gifts), gifts:gifts, subtotal:subtotal, tax:tax, total:total});
});
};

exports.destroy = function(req, res){
req.session.cart = [];
req.session.save(function(){
res.redirect('/cart');
});
};

9 changes: 9 additions & 0 deletions app/controllers/gifts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

var Gift = require('../models/gift');

exports.index = function(req, res){
Gift.findAll(function(err, gifts){
res.render('users/gifts', {gifts:gifts});
});
};
52 changes: 41 additions & 11 deletions app/controllers/users.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

var User = require('../models/user'),
Message = require('../models/message'),
mp = require('multiparty');

exports.new = function(req, res){
Expand Down Expand Up @@ -32,19 +33,19 @@ exports.profile = function(req, res){
res.render('users/profile');
};

exports.addPhoto = function(req, res){
exports.addPhotos = function(req, res){
var form = new mp.Form();
form.parse(req, function(err, fields, files){
// console.log('fields', fields);
// console.log('files', files);
User.addPhotos(req.user, fields, files, function(){
User.addPhotos(req.user, files, function(){
res.redirect('/profile');
});
});
};

exports.setProfilePhoto = function(req, res){
req.user.setProfilePhoto(req.body, function(){
req.user.setProfilePhoto(req.body.index, function(){
res.redirect('/profile');
});
};
Expand All @@ -67,15 +68,44 @@ exports.contact = function(req, res){
});
};

// For creating modals - please DELETE me!
exports.editDetails = function(req, res){
res.render('users/details');
exports.verify = function(req, res){
if(!req.user.alias){
res.render('users/init-info');
}else{
res.redirect('/profile');
}
};
exports.editAbout = function(req, res){
res.render('users/about');

exports.initUpdate = function(req, res){
req.user.initUpdate(req.body, function(err){
if(err){
req.flash('error', err);
res.redirect('/verify');
}else{
res.redirect('/profile');
}
});
};
exports.editContact = function(req, res){
res.render('users/contact');

exports.send = function(req, res){
User.findById(req.params.userId, function(err, receiver){
res.locals.user.send(receiver, req.body, function(){
res.redirect('/users/' + receiver.email);
});
});
};

exports.messages = function(req, res){
res.locals.user.messages(function(err, msgs){
res.render('users/messages', {msgs:msgs});
});
};
// END DELETE NOTE

exports.message = function(req, res){
Message.read(req.params.msgId, function(err, msg){
res.render('users/message', {msg:msg});
});
};
exports.alias = function(req, res){
res.render('users/alias');
};
10 changes: 6 additions & 4 deletions app/lib/mongodb.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ var MongoClient = require('mongodb').MongoClient;
module.exports = function(name, cb){
var url = 'mongodb://localhost/' + name;
MongoClient.connect(url, function(err, db){
global.mongodb = db;

console.log('Express: Database', name);
if(cb){cb();}
db.collection('users').ensureIndex({'coordinates':'2dsphere'}, function(err, indexName){
// console.log('********ensureIndexErr', err);
global.mongodb = db;
console.log('Express: Database', name);
if(cb){cb();}
});
});
};

2 changes: 1 addition & 1 deletion app/lib/passport/deserialize.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ var User = require('../../models/user');

module.exports = function(obj, cb){
// console.log('******Deserialize', obj);
User.findById(obj.userId, cb);
User.findByIdSession(obj.userId, cb);
};

24 changes: 24 additions & 0 deletions app/models/gift.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';

var Mongo = require('mongodb');

function Gift(){
}

Object.defineProperty(Gift, 'collection', {
get: function(){return global.mongodb.collection('gifts');}
});

Gift.findById = function(id, cb){
var _id = Mongo.ObjectID(id);
Gift.collection.findOne({_id:_id}, cb);
};

Gift.findAll = function(cb){
Gift.collection.find().toArray(cb);
};



module.exports = Gift;

47 changes: 47 additions & 0 deletions app/models/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
'use strict';

var async = require('async'),
Mongo = require('mongodb');

function Message(senderId, receiverId, message){
this.senderId = senderId;
this.receiverId = receiverId;
this.message = message;
this.date = new Date();
this.isRead = false;
}

Object.defineProperty(Message, 'collection', {
get: function(){return global.mongodb.collection('messages');}
});

Message.read = function(id, cb){
var _id = Mongo.ObjectID(id);
Message.collection.findAndModify({_id:_id}, [], {$set:{isRead:true}}, function(err, msg){
iterator(msg, cb);
});
};

Message.send = function(senderId, receiverId, message, cb){
var m = new Message(senderId, receiverId, message);
Message.collection.save(m, cb);
};

Message.unread = function(receiverId, cb){
Message.collection.find({receiverId:receiverId, isRead:false}).count(cb);
};

Message.messages = function(receiverId, cb){
Message.collection.find({receiverId:receiverId}).sort({date:-1}).toArray(function(err, msgs){
async.map(msgs, iterator, cb);
});
};

module.exports = Message;

function iterator(msg, cb){
require('./user').findById(msg.senderId, function(err, sender){
msg.sender = sender;
cb(null, msg);
});
}
97 changes: 79 additions & 18 deletions app/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,27 @@
var bcrypt = require('bcrypt'),
Mongo = require('mongodb'),
_ = require('underscore-contrib'),
Message = require('./message'),
fs = require('fs'),
path = require('path');

function User(){
this.coordinates = [];
}

Object.defineProperty(User, 'collection', {
get: function(){return global.mongodb.collection('users');}
});

User.findByIdSession = function(id, cb){
var _id = Mongo.ObjectID(id);
User.collection.findOne({_id:_id}, {fields:{alias:1, email:1, coordinates:1, type:1, location:1, zip:1}}, function(err, obj){
var user = Object.create(User.prototype);
user = _.extend(user, obj);
cb(err, user);
});
};

User.findById = function(id, cb){
var _id = Mongo.ObjectID(id);
User.collection.findOne({_id:_id}, function(err, obj){
Expand All @@ -26,7 +37,10 @@ User.register = function(o, cb){
User.collection.findOne({email:o.email}, function(err, user){
if(user){return cb();}
o.password = bcrypt.hashSync(o.password, 10);
User.collection.save(o, cb);
o.type = 'local';
user = new User();
user = _.extend(user, o);
User.collection.save(user, cb);
});
};

Expand All @@ -45,7 +59,8 @@ User.googleAuth = function(accessToken, refreshToken, profile, cb){
// console.log(accessToken, refreshToken, profile, cb);
User.collection.findOne({googleId:profile.id}, function(err, user){
if(user){return cb(err, user);}
user = {googleId:profile.id, displayName:profile.displayName, type:'google'};
user = new User();
user = _.extend(user, {googleId:profile.id, type:'google'});
User.collection.save(user, cb);
});
};
Expand All @@ -54,26 +69,13 @@ User.facebookAuth = function(accessToken, refreshToken, profile, cb){
// console.log(profile);
User.collection.findOne({facebookId:profile.id}, function(err, user){
if(user){return cb(err, user);}
user = {facebookId:profile.id, displayName:profile.displayName, type:'facebook'};
user = new User();
user = _.extend(user, {facebookId:profile.id, type:'facebook'});
User.collection.save(user, cb);
});
};

User.updateProfile = function(user, fields, files, cb){
// console.log('***Post Body:', fields);
Object.keys(fields).forEach(function(key){
fields[key][0] = fields[key][0].trim();
if(fields[key][0]){
switch(key){
case 'visible':
user.isPublic = (fields[key] === 'public');
break;
default:
user[key] = fields[key][0];
}
}
});
// console.log('*** Updated User:', user);
User.addPhotos = function(user, files, cb){
user.moveFiles(files);
User.collection.save(user, cb);
};
Expand Down Expand Up @@ -108,5 +110,64 @@ User.prototype.moveFiles = function(files){
this.photos = this.photos.concat(photos);
};

User.prototype.initUpdate = function(data, cb){
// console.log('************DATA', data);
var self = this;
User.collection.findOne({alias:data.alias}, function(err1, obj1){
if(obj1){return cb('Please choose a different alias, that one is already in use');}
data.coordinates.forEach(function(c, i){
data.coordinates[i] = parseFloat(c);
});
User.collection.update({_id:self._id}, {$set:{alias:data.alias, email:data.email, location:data.location, coordinates:data.coordinates, phone:data.phone, zip:data.zip}}, cb);
});
};

User.prototype.updateAbout = function(data, cb){
Object.keys(data).forEach(function(key){
data[key] = data[key].trim();
});
User.collection.update({_id:this._id}, {$set:{about:data}}, cb);
};

User.prototype.updateDetails = function(data, cb){
User.collection.update({_id:this._id}, {$set:{details:data}}, cb);
};

User.prototype.setProfilePhoto = function(index, cb){
User.collection.findOne({_id:this._id}, {fields:{photos:1}}, function(err, data){
var i = data.photos.map(function(x){return x.isPrimary;}).indexOf(true);
if(i !== -1){data.photos[i].isPrimary = false;}
data.photos[index].isPrimary = true;
User.collection.update({_id:data._id}, {$set:{photos:data.photos}}, cb);
});
};
// NEED TO TOUCH BASE BEFORE FINISHING
/*
User.prototype.updateContact = function(data, cb){
};
*/

User.prototype.unread = function(cb){
Message.unread(this._id, cb);
};

User.prototype.save = function(o, cb){
var properties = Object.keys(o),
self = this;
properties.forEach(function(property){
self[property] = o[property];
});
delete this.unread;
User.collection.save(self, cb);
};

User.prototype.messages = function(cb){
Message.messages(this._id, cb);
};

User.prototype.send = function(receiver, obj, cb){
Message.send(this._id, receiver._id, obj.message, cb);
};

module.exports = User;

Loading

0 comments on commit 9744a17

Please sign in to comment.