-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
519 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
}]); |
Oops, something went wrong.