Skip to content

Commit

Permalink
feat: add user functionalities in classroom (add, delete, edit)
Browse files Browse the repository at this point in the history
  • Loading branch information
pyphilia committed May 26, 2020
1 parent eefd1f5 commit df64116
Show file tree
Hide file tree
Showing 33 changed files with 1,345 additions and 28 deletions.
7 changes: 7 additions & 0 deletions public/app/config/channels.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,11 @@ module.exports = {
RESPOND_DELETE_CLASSROOM_PROMPT_CHANNEL: 'prompt:classroom:delete:respond',
EDIT_CLASSROOM_CHANNEL: 'classroom:edit',
GET_CLASSROOM_CHANNEL: 'classroom:get',
ADD_USER_IN_CLASSROOM_CHANNEL: 'classroom:user:add',
DELETE_USER_IN_CLASSROOM_CHANNEL: 'classroom:user:delete',
SHOW_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL:
'prompt:classroom:user:delete:show',
RESPOND_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL:
'prompt:classroom:user:delete:respond',
EDIT_USER_IN_CLASSROOM_CHANNEL: 'classroom:user:edit',
};
3 changes: 3 additions & 0 deletions public/app/config/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ const ERROR_DOWNLOADING_FILE = 'ERROR_DOWNLOADING_FILE';
const ERROR_GENERAL = 'ERROR_GENERAL';
const ERROR_DUPLICATE_CLASSROOM_NAME = 'ERROR_DUPLICATE_CLASSROOM_NAME';
const ERROR_ACCESS_DENIED_CLASSROOM = 'ERROR_ACCESS_DENIED_CLASSROOM';
const ERROR_DUPLICATE_USERNAME_IN_CLASSROOM =
'ERROR_DUPLICATE_USERNAME_IN_CLASSROOM';

module.exports = {
ERROR_ZIP_CORRUPTED,
Expand All @@ -17,4 +19,5 @@ module.exports = {
ERROR_GENERAL,
ERROR_DUPLICATE_CLASSROOM_NAME,
ERROR_ACCESS_DENIED_CLASSROOM,
ERROR_DUPLICATE_USERNAME_IN_CLASSROOM,
};
20 changes: 20 additions & 0 deletions public/app/config/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,19 @@ const SUCCESS_EDITING_CLASSROOM_MESSAGE =
const ERROR_GETTING_CLASSROOM_MESSAGE =
'There was an error getting the classroom';
const ERROR_ACCESS_DENIED_CLASSROOM_MESSAGE = `This user does not have access to this classroom`;
const ERROR_DUPLICATE_USERNAME_IN_CLASSROOM_MESSAGE =
'This username already exists in this classroom';
const ERROR_ADDING_USER_IN_CLASSROOM_MESSAGE =
'There was an error adding a new user in this classroom';
const ERROR_DELETING_USER_IN_CLASSROOM_MESSAGE =
'There was an error deleting a user in this classroom';
const ERROR_EDITING_USER_IN_CLASSROOM_MESSAGE =
'There was an error editing a user in this classroom';
const SUCCESS_EDITING_USER_IN_CLASSROOM_MESSAGE =
'The user was successfully edited';
const SUCCESS_DELETING_USER_IN_CLASSROOM_MESSAGE =
'The user was successfully deleted';
const ERROR_INVALID_USERNAME_MESSAGE = 'This username is invalid';

module.exports = {
ERROR_GETTING_DEVELOPER_MODE,
Expand Down Expand Up @@ -142,4 +155,11 @@ module.exports = {
SUCCESS_EDITING_CLASSROOM_MESSAGE,
ERROR_GETTING_CLASSROOM_MESSAGE,
ERROR_ACCESS_DENIED_CLASSROOM_MESSAGE,
ERROR_DUPLICATE_USERNAME_IN_CLASSROOM_MESSAGE,
ERROR_ADDING_USER_IN_CLASSROOM_MESSAGE,
ERROR_DELETING_USER_IN_CLASSROOM_MESSAGE,
ERROR_EDITING_USER_IN_CLASSROOM_MESSAGE,
SUCCESS_DELETING_USER_IN_CLASSROOM_MESSAGE,
SUCCESS_EDITING_USER_IN_CLASSROOM_MESSAGE,
ERROR_INVALID_USERNAME_MESSAGE,
};
4 changes: 2 additions & 2 deletions public/app/listeners/addClassroom.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ const addClassroom = (mainWindow, db) => async (event, { name, userId }) => {
logger.debug('adding a classroom');

try {
// check name does not already exists
// check name does not already exists for given user
const found = db
.get(CLASSROOMS_COLLECTION)
.find({ name })
.find({ name, teacherId: userId })
.value();
if (found) {
mainWindow.webContents.send(
Expand Down
48 changes: 48 additions & 0 deletions public/app/listeners/addUserInClassroom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
const { USERS_COLLECTION, CLASSROOMS_COLLECTION } = require('../db');
const { ADD_USER_IN_CLASSROOM_CHANNEL } = require('../config/channels');
const { createNewUser } = require('./signIn');
const {
ERROR_DUPLICATE_USERNAME_IN_CLASSROOM,
ERROR_GENERAL,
} = require('../config/errors');

const logger = require('../logger');

const addUserInClassroom = (mainWindow, db) => async (
event,
{ username, classroomId: id }
) => {
logger.debug('adding a user in a classroom');

try {
const users = db
.get(CLASSROOMS_COLLECTION)
.find({ id })
.get(USERS_COLLECTION);

const now = new Date();

// check in db if username exists
const found = users.find({ username }).value();

if (found) {
return mainWindow.webContents.send(
ADD_USER_IN_CLASSROOM_CHANNEL,
ERROR_DUPLICATE_USERNAME_IN_CLASSROOM
);
}

const user = createNewUser(username, now);
users.push(user).write();

return mainWindow.webContents.send(ADD_USER_IN_CLASSROOM_CHANNEL, user);
} catch (err) {
logger.error(err);
return mainWindow.webContents.send(
ADD_USER_IN_CLASSROOM_CHANNEL,
ERROR_GENERAL
);
}
};

module.exports = addUserInClassroom;
30 changes: 30 additions & 0 deletions public/app/listeners/deleteUserInClassroom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const { USERS_COLLECTION, CLASSROOMS_COLLECTION } = require('../db');
const { DELETE_USER_IN_CLASSROOM_CHANNEL } = require('../config/channels');
const { ERROR_GENERAL } = require('../config/errors');

const logger = require('../logger');

const deleteUserInClassroom = (mainWindow, db) => async (
event,
{ userId, classroomId }
) => {
logger.debug('deleting a user in a classroom');

try {
db.get(CLASSROOMS_COLLECTION)
.find({ id: classroomId })
.get(USERS_COLLECTION)
.remove({ id: userId })
.write();

return mainWindow.webContents.send(DELETE_USER_IN_CLASSROOM_CHANNEL);
} catch (err) {
logger.error(err);
return mainWindow.webContents.send(
DELETE_USER_IN_CLASSROOM_CHANNEL,
ERROR_GENERAL
);
}
};

module.exports = deleteUserInClassroom;
39 changes: 39 additions & 0 deletions public/app/listeners/editUserInClassroom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const { EDIT_USER_IN_CLASSROOM_CHANNEL } = require('../config/channels');
const { ERROR_GENERAL } = require('../config/errors');
const { CLASSROOMS_COLLECTION, USERS_COLLECTION } = require('../db');
const logger = require('../logger');

const editUserInClassroom = (mainWindow, db) => async (
event,
{ username, userId, classroomId }
) => {
logger.debug('editing user in classroom');

try {
const user = db
.get(CLASSROOMS_COLLECTION)
.find({ id: classroomId })
.get(USERS_COLLECTION)
.find({ id: userId });

// check user exists
const found = user.value();
if (!found) {
mainWindow.webContents.send(
EDIT_USER_IN_CLASSROOM_CHANNEL,
ERROR_GENERAL
);
}

// update data
const now = new Date();
user.assign({ username, lastUpdatedAt: now }).write();

mainWindow.webContents.send(EDIT_USER_IN_CLASSROOM_CHANNEL);
} catch (err) {
logger.error(err);
mainWindow.webContents.send(EDIT_USER_IN_CLASSROOM_CHANNEL, ERROR_GENERAL);
}
};

module.exports = editUserInClassroom;
10 changes: 9 additions & 1 deletion public/app/listeners/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const setUserMode = require('./setUserMode');
const clearUserInput = require('./clearUserInput');
const showClearUserInputPrompt = require('./showClearUserInputPrompt');
const postAction = require('./postAction');
const signIn = require('./signIn');
const { signIn } = require('./signIn');
const signOut = require('./signOut');
const isAuthenticated = require('./isAuthenticated');
const getAppInstanceResources = require('./getAppInstanceResources');
Expand All @@ -40,7 +40,11 @@ const getClassrooms = require('./getClassrooms');
const deleteClassroom = require('./deleteClassroom');
const editClassroom = require('./editClassroom');
const showDeleteClassroomPrompt = require('./showDeleteClassroomPrompt');
const showDeleteUserInClassroomPrompt = require('./showDeleteUserInClassroomPrompt');
const getClassroom = require('./getClassroom');
const addUserInClassroom = require('./addUserInClassroom');
const deleteUserInClassroom = require('./deleteUserInClassroom');
const editUserInClassroom = require('./editUserInClassroom');

module.exports = {
loadSpace,
Expand Down Expand Up @@ -85,4 +89,8 @@ module.exports = {
getClassrooms,
getClassroom,
showDeleteClassroomPrompt,
addUserInClassroom,
deleteUserInClassroom,
showDeleteUserInClassroomPrompt,
editUserInClassroom,
};
27 changes: 27 additions & 0 deletions public/app/listeners/showDeleteUserInClassroomPrompt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// eslint-disable-next-line import/no-extraneous-dependencies
const { dialog } = require('electron');
const {
RESPOND_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL,
} = require('../config/channels');
const logger = require('../logger');

const showDeleteUserInClassroomPrompt = mainWindow => ({ username }) => {
logger.debug('showing delete user in classroom prompt');

const options = {
type: 'warning',
buttons: ['Cancel', 'Delete'],
defaultId: 0,
cancelId: 0,
message: `Are you sure you want to delete ${username} from this classroom?`,
};

dialog.showMessageBox(mainWindow, options).then(({ response }) => {
mainWindow.webContents.send(
RESPOND_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL,
response
);
});
};

module.exports = showDeleteUserInClassroomPrompt;
2 changes: 1 addition & 1 deletion public/app/listeners/signIn.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,4 @@ const signIn = (mainWindow, db) => async (
mainWindow.webContents.send(SIGN_IN_CHANNEL, updatedUser);
};

module.exports = signIn;
module.exports = { signIn, createNewUser };
29 changes: 29 additions & 0 deletions public/electron.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ const {
SHOW_DELETE_CLASSROOM_PROMPT_CHANNEL,
EDIT_CLASSROOM_CHANNEL,
GET_CLASSROOM_CHANNEL,
ADD_USER_IN_CLASSROOM_CHANNEL,
DELETE_USER_IN_CLASSROOM_CHANNEL,
SHOW_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL,
EDIT_USER_IN_CLASSROOM_CHANNEL,
} = require('./app/config/channels');
const env = require('./env.json');
const {
Expand Down Expand Up @@ -110,6 +114,10 @@ const {
showDeleteClassroomPrompt,
editClassroom,
getClassroom,
addUserInClassroom,
showDeleteUserInClassroomPrompt,
deleteUserInClassroom,
editUserInClassroom,
} = require('./app/listeners');
const isMac = require('./app/utils/isMac');

Expand Down Expand Up @@ -501,6 +509,21 @@ app.on('ready', async () => {
// called when editing a classroom
ipcMain.on(EDIT_CLASSROOM_CHANNEL, editClassroom(mainWindow, db));

// called when adding a user in a classroom
ipcMain.on(ADD_USER_IN_CLASSROOM_CHANNEL, addUserInClassroom(mainWindow, db));

// prompt when deleting a user in a classroom
ipcMain.on(
SHOW_DELETE_USER_IN_CLASSROOM_PROMPT_CHANNEL,
showDeleteUserInClassroomPrompt(mainWindow, db)
);

// called when deleting a user in a classroom
ipcMain.on(
DELETE_USER_IN_CLASSROOM_CHANNEL,
deleteUserInClassroom(mainWindow, db)
);

// prompt when deleting a classroom
ipcMain.on(
SHOW_DELETE_CLASSROOM_PROMPT_CHANNEL,
Expand All @@ -510,6 +533,12 @@ app.on('ready', async () => {
// called when deleting a classroom
ipcMain.on(DELETE_CLASSROOM_CHANNEL, deleteClassroom(mainWindow, db));

// called when editing a user in a classroom
ipcMain.on(
EDIT_USER_IN_CLASSROOM_CHANNEL,
editUserInClassroom(mainWindow, db)
);

// called when getting the database
ipcMain.on(GET_DATABASE_CHANNEL, async () => {
try {
Expand Down
Loading

0 comments on commit df64116

Please sign in to comment.