|
|
@@ -1,7 +1,18 @@
|
|
|
const joi = require('joi');
|
|
|
+const { ObjectID } = require('mongodb');
|
|
|
+
|
|
|
+const { clientError } = require('server/modules/client-error');
|
|
|
|
|
|
const COLLECTION_USERS = 'users';
|
|
|
|
|
|
+function getObjectId(id) {
|
|
|
+ if (process.env.NODE_ENV === 'test') {
|
|
|
+ return id;
|
|
|
+ }
|
|
|
+
|
|
|
+ return new ObjectID(id);
|
|
|
+}
|
|
|
+
|
|
|
async function insertUser(db, info) {
|
|
|
const { error, value } = joi.validate(info, {
|
|
|
name: joi.string().required(),
|
|
|
@@ -11,14 +22,24 @@ async function insertUser(db, info) {
|
|
|
});
|
|
|
|
|
|
if (error) {
|
|
|
- throw error;
|
|
|
+ throw clientError(error);
|
|
|
}
|
|
|
|
|
|
const users = await db.collection(COLLECTION_USERS);
|
|
|
|
|
|
- const newUser = await users.insert(value);
|
|
|
+ const result = await users.insert(value);
|
|
|
|
|
|
- return newUser;
|
|
|
+ try {
|
|
|
+ const { _id, ...userResult } = result.ops[0];
|
|
|
+
|
|
|
+ return {
|
|
|
+ id: String(_id),
|
|
|
+ ...userResult
|
|
|
+ };
|
|
|
+
|
|
|
+ } catch (err) {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
async function modifyUser(db, id, info) {
|
|
|
@@ -29,12 +50,14 @@ async function modifyUser(db, id, info) {
|
|
|
});
|
|
|
|
|
|
if (error) {
|
|
|
- throw error;
|
|
|
+ throw clientError(error);
|
|
|
}
|
|
|
|
|
|
const users = await db.collection(COLLECTION_USERS);
|
|
|
|
|
|
- await users.update({ _id: id }, { $set: value }, {
|
|
|
+ const _id = getObjectId(id);
|
|
|
+
|
|
|
+ await users.updateOne({ _id }, { $set: value }, {
|
|
|
upsert: false,
|
|
|
multi: false
|
|
|
});
|
|
|
@@ -43,7 +66,7 @@ async function modifyUser(db, id, info) {
|
|
|
async function deleteUser(db, id) {
|
|
|
const users = await db.collection(COLLECTION_USERS);
|
|
|
|
|
|
- await users.deleteOne({ _id: id });
|
|
|
+ await users.deleteOne({ _id: getObjectId(id) });
|
|
|
}
|
|
|
|
|
|
async function getUsers(db) {
|