Skip to content
This repository has been archived by the owner on Oct 27, 2023. It is now read-only.

closes #41 Chek user existence #42

Merged
merged 1 commit into from
Jul 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 37 additions & 10 deletions modules/user/user.controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,7 @@ const controllers = {
const client = ws.getClient(id);
if (!client) throw Error('WebSocket client does not exist.');

const publicKey = ethers.utils.recoverAddress(
ethers.utils.hashMessage(client.token), signature,
);
const publicKey = ethers.utils.recoverAddress(ethers.utils.hashMessage(client.token), signature);
const user = await controllers.getByWalletAddress(publicKey);

if (user && !user.is_active) {
Expand Down Expand Up @@ -65,11 +63,18 @@ const controllers = {
return User.addRoles({ user_id: userId, roles });
},

list({
start, limit, sort, filter, paging = true,
}) {
list(request) {
let {
start, limit, sort, filter, name, paging = true,
} = request.query;
const query = [];
const $match = {};
if (filter) query.push({ $match: filter });
// if (name) query.push({ $match: { 'name.first': { $regex: new RegExp(`${name}`), $options: 'i' } } });
// console.log(name);
// if (name) {
// $match.name.first = { $regex: new RegExp(`${name}`), $options: 'i' };
// }
query.push(
{
$addFields: { full_name: { $concat: ['$name.first', ' ', '$name.last'] } },
Expand All @@ -86,18 +91,39 @@ const controllers = {
limit,
sort,
model: User.model,
query,
query: [],
});
}

query.push({ $sort: sort });
return User.model.aggregate(query);
},

async checkUser(request) {
const data = request.payload;
data.wallet_address = data.wallet_address.toLowerCase();
const [user] = await User.model.find({
$or: [
{ wallet_address: data.wallet_address },
{ email: data.email },
{ phone: data.phone },
],
});
if (user) {
if (user.phone === data.phone) throw new Error('Phone Number Already Exists');
if (user.wallet_address.toLowerCase() === data.wallet_address.toLowerCase()) throw Error('Wallet Address Already Exists');
if (user.email === data.email) throw Error('Email Already Exists');
return false;
}
return { isNew: true };
},

async add(request) {
const data = request.payload;

try {
await controllers.checkUser(request);
data.wallet_address = data.wallet_address.toLowerCase();
const user = await User.create(data);
return user;
} catch (e) {
Expand All @@ -110,9 +136,10 @@ const controllers = {
const token = request.query.access_token || request.headers.access_token || request.cookies.access_token;
const { user, permissions } = await User.validateToken(token);

return ({
user, permissions,
});
return {
user,
permissions,
};
} catch (e) {
throw Error(`ERROR: ${e}`);
}
Expand Down
4 changes: 4 additions & 0 deletions modules/user/user.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ const routes = {
'Find a user by id',
[USER.READ, USER.ADMIN],
],
checkUser: [
'POST', '/check',
'Check If user Exists',
],
update: [
'POST', '/{id}',
'Update user data',
Expand Down
13 changes: 13 additions & 0 deletions modules/user/user.validators.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ const Joi = require('joi');
module.exports = {
list: {

query: Joi.object({
// name: Joi.string(),
start: Joi.number(),
limit: Joi.number(),
}),
},
add: {
payload: Joi.object({
Expand All @@ -14,4 +19,12 @@ module.exports = {
roles: Joi.array().items(Joi.string()),
}),
},

checkUser: {
payload: Joi.object({
email: Joi.string().optional(),
phone: Joi.string(),
wallet_address: Joi.string(),
}),
},
};