2017-10-19 12 views
0

Dans ma demande il y a 4 fonctions que je dois mettre en œuvre:Comment mettre en œuvre un système de suivi, le retour d'une liste des abonnés et utilisateurs suivants

  1. Un utilisateur peut suivre un autre utilisateur.
  2. Un utilisateur peut ne plus suivre un autre utilisateur.
  3. Un utilisateur peut voir une liste de tous ses abonnés.
  4. Un utilisateur peut voir une liste de tous ceux qu'il suit.

Je crois que j'ai implémenté 1. et 2. correctement. J'ai créé un schéma de suivi comme vous pouvez le voir ci-dessous dans mon follow.model et j'ai créé follow.controller avec deux méthodes, pour stocker (suivre) et détruire (unfollow).

Maintenant, je veux mettre en œuvre 3. et 4. J'ai créé deux tableaux dans le schéma user.model, un pour suivre et un pour les suiveurs. Lorsque je renvoie l'utilisateur dans mon user.controller, comment puis-je remplir le tableau suivant et suiveur? Pour le moment, ils sont vides.

follow.model.js

var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 

var FollowSchema = new Schema({ 

    follower: { 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }, 
    followee: { 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    } 
}, 
{ 
    timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'} 
}); 

module.exports = mongoose.model('Follow', FollowSchema); 

follow.controller.js

'use strict'; 

const User = require('../models/user.model'); 
const Follow = require('../models/follow.model'); 


class FollowController { 

    constructor() { 

    } 


    store(req, res) { 

     let follower = req.body.follower; 
     let followee = req.params.id; 

     let follow = new Follow({ 
      follower: follower, 
      followee: followee, 
     }); 

     follow.save(function (err) { 

      if (err) { 
       return res.status(404).json({ 
        succes: false, 
        status: 404, 
        data: {}, 
        message: "There was an error trying follow the user." 
       }); 
      } 

      return res.status(200).json({ 

       success: true, 
       status: 200, 
       data: follow, 
       message: 'Successfully followed user' 

      }); 
     }); 
    } 
    destroy(req, res) { 

     let follower = req.params.followerid; 
     let followee = req.params.id; 

     Follow.remove({ 'follower': follower, 'followee': followee }, (err, result) => { 

      if (err) { 
       return res.status(404).json({ 
        success: false, 
        status: 404, 
        data: {}, 
        message: "Error removing record" 
       }); 
      } 


      return res.status(201).json({ 
       success: true, 
       status: 201, 
       data: {}, 
       message: "Successfully unfollowed user" 
      }) 

     }); 
    } 

} 

module.exports = FollowController; 

user.model.js

let UserSchema = new Schema({ 

     email: { 
      address: { 
       type: String, 
       lowercase: true, 
       //unique: true, 

      }, 
      token: String, 
      verified: { 
       type: Boolean, 
       default: false, 
      }, 
     }, 
     password: { 
      type: String, 
     }, 

     following: [{ 
      type: Schema.Types.ObjectId, ref: 'Follow' 
     }], 
     followers: [{ 
      type: Schema.Types.ObjectId, ref: 'Follow' 
     }], 


    { 
     timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'} 
    }); 

user.controller.js

show(req, res) { 

     let id = req.params.id; 

      User.findOne({ '_id': id }, 
     function (err, user) { 

      if (err) { 
       return res.json(err); 
      } 

      return res.json(user); 

     }); 
    } 

Répondre

0

Vous avez juste besoin populate ces domaines:

User.findOne({ '_id': id }, (err, user) => { 
    if (err) return res.json(err); 
    return res.json(user); 
}).populate([ 
    { path: 'following' }, 
    { path: 'followers' } 
]);