Skip to content

Commit

Permalink
add groups
Browse files Browse the repository at this point in the history
  • Loading branch information
vkhoi committed Jan 2, 2018
1 parent 3867ce3 commit 1549c0a
Show file tree
Hide file tree
Showing 12 changed files with 519 additions and 4 deletions.
79 changes: 79 additions & 0 deletions api/groups.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
var express = require('express');
var router = express.Router();
var ensureAuthorized = require('../helpers/ensure-authorized');
var Groups = require('../helpers/groups.js');
var ensureAdmin = require('../helpers/ensure-admin');
var jwt = require('jsonwebtoken');
var config = require('../config');

// Name: Get all groups.
// Type: GET
router.get('/getAllGroups', [ensureAdmin], function(req, res) {
Groups.getAllGroups().then(function successCallback(groups) {
res.send(groups);
}, function errorCallback(err) {
res.status(500).send(err.toString());
});
});

// Name: Get group with id.
// Type: GET
router.post('/getGroup', [ensureAdmin], function(req, res) {
var _id = req.body._id;
if (!_id) {
res.status(500).send("No id");
}
else {
Groups.getGroupWithId(_id).then(function successCallback(group) {
res.send(group);
}, function errorCallback(err) {
res.status(500).send(err.toString());
})
}
});

// Name: Create new group.
// Type: POST.
// Data: name, info, members.
router.post('/create', [ensureAdmin], function(req, res) {
var name = req.body.name;
var info = req.body.info;
var members = req.body.members;

Groups.createGroup({ name: name, info: info, members: members }).then(function successCallback() {
res.send({ status: 'SUCCESS' });
}, function errorCallback(err) {
res.status(500).send(err.toString());
});
});

// Name: Edit group.
// Type: POST.
// Data: name, info, members.
router.post('/edit', [ensureAdmin], function(req, res) {
var _id = req.body._id;
var name = req.body.name;
var info = req.body.info;
var members = req.body.members;

Groups.editGroup({ _id: _id, name: name, info: info, members: members }).then(function successCallback() {
res.send({ status: 'SUCCESS' });
}, function errorCallback(err) {
res.status(500).send(err.toString());
});
});

// Name: Remove group.
// Type: POST.
// Data: username.
router.post('/remove', [ensureAdmin], function(req, res) {
var _id = req.body._id;

Groups.removeGroup({ _id: _id }).then(function successCallback() {
res.send({ status: 'SUCCESS' });
}, function errorCallback(err) {
res.status(500).send(err.toString());
});
});

module.exports = router;
1 change: 1 addition & 0 deletions api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ router.use('/contest', require('./contest'));
router.use('/uploadImage', require('./upload-image'));
router.use('/posts', require('./posts'));
router.use('/users', require('./users'));
router.use('/groups', require('./groups'));

module.exports = router;
4 changes: 2 additions & 2 deletions helpers/contests.js
Original file line number Diff line number Diff line change
Expand Up @@ -892,8 +892,8 @@ function regenerateContestEndJob(contest) {
}

function checkJob() {
console.log(currentContestStartJob == null);
console.log(currentContestEndJob == null);
// console.log(currentContestStartJob == null);
// console.log(currentContestEndJob == null);

return new Promise(function(resolve, reject) {
getCurrentContestId().then(function successCallback(id) {
Expand Down
131 changes: 131 additions & 0 deletions helpers/groups.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
var path = require('path');
var DataStore = require('nedb');
var Groups = new DataStore({ filename: path.join(process.cwd(), 'data', 'groups.db'), autoload: true, timestampData: true });
// A group has 3 fields:
// 1. name
// 2. members

// Function to get all groups.
function getAllGroups() {
return new Promise(function(resolve, reject) {
Groups.find({}, function(err, groups) {
if (err) {
console.log(err);
reject(Error('Could not get all groups'));
}
else {
groups.sort(function(a, b) {
return a.createdAt - b.createdAt;
});
var res = [];
for (var i = 0; i < groups.length; i += 1) {
res.push({
_id: groups[i]._id,
name: groups[i].name,
info: groups[i].info
});
}
resolve(res);
}
});
});
}

// Function to add a new groups.
function createGroup(group) {
return new Promise(function(resolve, reject) {
Groups.findOne({ name: group.name }, function(err, _group) {
if (err) {
reject(Error('Hệ thống đang gặp lỗi'));
}
else if (_group) {
reject(Error('Group này đã tồn tại trong cơ sở dữ liệu'));
}
else {
Groups.insert({
name: group.name,
info: group.info,
members: group.members
}, function(err, user) {
if (err) {
reject(Error('Không thể thêm group mới vào cơ sở dữ liệu'));
}
else {
resolve();
}
});
}
});
});
}

// Function to get a user with username.
function getGroupWithId(_id) {
return new Promise(function(resolve, reject) {
Groups.findOne({ _id: _id }, function(err, group) {
if (err || !group) {
reject(Error('Could not find user'));
}
else {
var res = {
name: group.name,
info: group.info,
members: group.members
}
resolve(res);
}
});
});
}

// Function to edit a user.
function editGroup(group) {
return new Promise(function(resolve, reject) {
Groups.findOne({ _id: group._id }, function(err, _group) {
if (err || !_group) {
reject(Error('Could not find group to edit'));
}
else {
Groups.update({ _id: group._id }, {
$set: { name: group.name, info: group.info, members: group.members }
}, {}, function(err, numAffected) {
if (err) {
reject(Error('Could not update group with new info'));
}
else {
resolve();
}
});
}
});
});
}

// Function to remove a user.
function removeGroup(group) {
return new Promise(function(resolve, reject) {
Groups.findOne({ _id: group._id }, function(err, _group) {
if (err || !_group) {
reject(Error('Could not find group to remove'));
}
else {
Groups.remove({ _id: group._id }, {}, function(err, numRemoved) {
if (err) {
reject(Error('Could not remove group'));
}
else {
resolve();
}
});
}
});
});
}

module.exports = {
getAllGroups: getAllGroups,
getGroupWithId: getGroupWithId,
createGroup: createGroup,
editGroup: editGroup,
removeGroup: removeGroup
};
117 changes: 117 additions & 0 deletions public/controllers/group-add-edit-controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
themisApp.controller('GroupAddEditController', ['$state', '$scope', '$http', 'AuthService', function($state, $scope, $http, AuthService) {
var vm = this;
vm.pageName = "";
vm.addEditBtnName = "";

vm._id = "";
vm.name = "";
vm.info = "";
vm.members = [];

vm.users = [];

var isCreate = true;

// Variable to show/hide spinner.
vm.showSpinner = false;

function init() {
$http.get('/api/users/getAllUsers').then(function successCallback(res) {
vm.users = res.data;
}, function errorCallback(err) {
if (err.status == 403) {
AuthService.resetAuthentication();
$state.go('login');
}
});
if ($state.current.name == "home.groupEdit") {
isCreate = false;
vm._id = $state.params.id;
vm.pageName = "Chỉnh sửa nhóm";
vm.addEditBtnName = "Chỉnh sửa";
$http.post('/api/groups/getGroup', { _id: $state.params.id }).then(function successCallback(res) {
vm.name = res.data.name;
vm.info = res.data.info;
vm.members = res.data.members;
}, function errorCallback(err) {
swal({
title: "Lỗi!",
text: "Không thể tìm thấy nhóm này!",
type: "error",
confirmButtonText: "Trở lại"
}, function() {
$state.go('home.groups');
});
});
}
else {
isCreate = true;
vm.pageName = "Thêm nhóm";
vm.addEditBtnName = "Thêm nhóm";
}
}
init();

vm.addEditGroup = function() {
if (vm.name == "") {
swal("Thất bại!", "Tên nhóm không được để trống", "warning");
return;
}
vm.showSpinner = true;
if (isCreate) {
$http.post('/api/groups/create', { name: vm.name, info: vm.info, members: vm.members }).then(function successCallback(res) {
vm.showSpinner = false;
swal({
title: "Thành công!",
text: "Đã thêm nhóm mới!",
type: "success",
}, function() {
$state.go('home.groups');
});
}, function errorCallback(err) {
vm.showSpinner = false;
swal({
title: "Lỗi!",
text: err.data,
type: "error",
confirmButtonText: "Đóng"
});
});
}
else {
$http.post('/api/groups/edit', { _id: vm._id, name: vm.name, info: vm.info, members: vm.members }).then(function successCallback(res) {
vm.showSpinner = false;
swal({
title: "Thành công!",
text: "Thông tin nhóm đã được chỉnh sửa!",
type: "success",
}, function() {
$state.go('home.groups');
});
}, function errorCallback(err) {
vm.showSpinner = false;
swal({
title: "Lỗi!",
text: "Không thể chỉnh sửa thông tin nhóm! Hệ thống đang bị lỗi!",
type: "error",
confirmButtonText: "Đóng"
});
});
}
}

vm.toggleMember = function(username) {
let pos = vm.members.indexOf(username);
if (pos > -1) {
vm.members.splice(pos, 1);
}
else {
vm.members.push(username);
}
}

vm.isUserInGroup = function(username) {
// console.log(username);
return vm.members.indexOf(username) > -1;
}
}]);
Loading

0 comments on commit 1549c0a

Please sign in to comment.