Adding «READ» User Functionality

// controllers/dashboard/author.js
class Author{
  constructor(){
    this.deepcopy = require('deepcopy');
    this.vdict = require('../../config');
    this.utility = require('../../utility');
    this.usersdb = require('../../models/usersdb');
    this.emailCheck = require('email-check');
  }

  getAuthor(req, res){
    const self = this;
    if(req.session.user){
      const data = this.deepcopy(this.vdict);
      data.site_title = 'ទំព័រ​អ្នក​និពន្ធ';
      data.date = this.utility.setDate();
      this.usersdb.selectUser(this.vdict.dashboardLimit, function(authors){
        data.authors = authors;
        data.thumbs = self.utility.getThumbUrl(authors, 'author');
        self.usersdb.countUser(function(count){
          data.count = count;
          res.render('dashboard/author', data);
        });
      });
    }else{
      res.redirect('/admin/login');
    }
  }

  postAuthor(req, res){
    const self = this;
    const data = this.deepcopy(this.vdict);
    data.site_title = 'ទំព័រ​អ្នក​និពន្ធ';
    data.date = this.utility.setDate();
    
    if(req.session.user.role == 'Admin'){
      this.usersdb.checkEmail(req, function(user){
        if(user){
          self.usersdb.selectUser(self.vdict.dashboardLimit, function(authors){
            data.authors = authors;
            data.thumbs = self.utility.getThumbUrl(authors, 'author');
            self.usersdb.countUser(function(count){
              data.count = count;
              data.message = 'Email នេះ​មាន​គេ​ប្រើ​ប្រាស់​ហើយ​';
              res.render('dashboard/author', data);
            });
          });
        }else{
          self.emailCheck(req.body.email)
            .then(function (result) {
              if(result){
                self.usersdb.insertUser(req, function(user, err){
                  if(!err){
                    self.usersdb.selectUser(self.vdict.dashboardLimit, function(authors){
                      data.authors = authors;
                      data.thumbs = self.utility.getThumbUrl(authors, 'author');
                      self.usersdb.countUser(function(count){
                        data.count = count;
                        data.message = `អ្នក​និពន្ធ​ ${user.username} ត្រូវ​បានចុះ​បញ្ជី​រួច​ហើយ`;
                        res.render('dashboard/author', data);
                      });
                    });
                  }else{
                    self.usersdb.selectUser(self.vdict.dashboardLimit, function(authors){
                      data.authors = authors;
                      data.thumbs = self.utility.getThumbUrl(authors, 'author');
                      self.usersdb.countUser(function(count){
                        data.message = err;
                        data.count = count;
                        res.render('dashboard/author', data);
                      });
                    });
                  }
                });
              }
            })
            .catch(function (err) {
              self.usersdb.selectUser(self.vdict.dashboardLimit, function(authors){
                data.authors = authors;
                data.thumbs = self.utility.getThumbUrl(authors, 'author');
                self.usersdb.countUser(function(count){
                  data.count = count;
                  data.message = 'Email នេះ​មិន​ត្រឹមត្រូវ​ទេ';
                  res.render('dashboard/author', data);
                });
              });
            });
        }
      });
    }else{
      this.usersdb.selectUser(self.vdict.dashboardLimit, function(authors){
        data.authors = authors;
        data.thumbs = self.utility.getThumbUrl(authors, 'author');
        self.usersdb.countUser(function(count){
          data.count = count;
          data.message = 'មាន​តែ Administrator ទេ ​ដែល​អាច​ចុះ​បញ្ជី​អ្នក​និពន្ធ​បាន​';
          res.render('dashboard/author', data);
        });
      });
    }
  }

}//end class

module.exports = new Author();
// models/usersdb.js
class Usersdb{
  constructor(){
    const mongoose = require('mongoose');
    const bcrypt = require('bcryptjs');

    const usersSchema = new mongoose.Schema({
      username: {type: String, required: true},
      password: {type: String, required: true},
      email: {type: String, required: true},
      role: {type: String, required: true},
      info: {type: String, required: true},
      date: {type: Date, required: true}
    });

    const users = mongoose.model('users', usersSchema);
    this.users = users;
    this.bcrypt = bcrypt;

    users.findOne(function (err, user){
      if (err) return console.error(err);
      if(!user){
        const hash = bcrypt.hashSync('password', 12);
        const root = new users({username:'root', password:hash, email:'root@multimedia.com', role:'Admin', info:'test', date: new Date()});
        root.save(function (err, root){
          if (err) return console.error(err);
        });
      }
    });
  }

  checkUser(req, callback){
    this.users.findOne({email:req.body.email}, function (err, user){
      if (err) return console.error(err);
      return callback(user);
    });
  }

  checkEmail(req, callback){
    this.users.findOne({email:req.body.email}, function (err, user){
      if (err) return console.error(err);
      return callback(user);
    });
  }

  insertUser(req, callback){
    const hash = this.bcrypt.hashSync(req.body.password, 12);
    const user = new (this.users)({username:req.body.username, password:hash, email:req.body.email, role:req.body.role, info:req.body.info, date: new Date(req.body.date)});
    user.save(function (err, user){
      if (err) return callback(false, err);
      return callback(user, false)
    });
  }

  selectUser(amount, callback){
    this.users.find().sort({date: -1, _id: -1}).limit(amount).then(users => {
      return callback(users);
    });
  }

  countUser(callback){
    this.users.countDocuments({}, function(err, users){
      if(err) return console.log(err);
      return callback(users);
    })
  }

}//end class

module.exports = new Usersdb();

GitHub: "https://github.com/Sokhavuth/multimedia
Heroku: https://khmerweb-multimedia.herokuapp.com/

Comments

Popular posts from this blog