nodefony
Version:
Nodefony Framework Core
122 lines (117 loc) • 3.91 kB
JavaScript
module.exports = {
Query: {
// provides all functions for each API endpoint
async user (obj, field, context, info) {
const user = context.getUser();
const usersService = context.get("users");
return await usersService.findOne(field.username, user);
},
async users (obj, field, context, info) {
const user = context.getUser();
const usersService = context.get("users");
const res = await usersService.find({}, {}, user);
return res.rows;
}
},
Mutation: {
async addUser (obj, field, context, info) {
const {
input
} = field;
const user = context.getUser();
const usersService = context.get("users");
let myuser = null;
let error = null;
if (!input.password || !input.confirm) {
error = new Error("Password can't be empty");
}
if (input.password !== input.confirm) {
error = new Error("Bad confirm password");
}
if (error) {
context.logger(error, "ERROR");
throw error;
}
try {
myuser = await usersService.create(input, user);
if (myuser) {
delete myuser.password;
delete myuser["2fa-token"];
return myuser;
}
throw new nodefony.Error("user not create", 400);
} catch (e) {
context.logger(e, "ERROR");
throw new nodefony.Error(e, 400);
}
},
updateUser (obj, field, context, info) {
const user = context.getUser();
const usersService = context.get("users");
const orm = context.kernel.getORM();
const {
input
} = field;
const {username} = input;
return usersService.findOne(username, user)
.then(async (myuser) => {
if (myuser) {
if (input.password) {
let confirm = false;
if (input.confirm) {
if (input.password !== input.confirm) {
throw new Error("Bad confirm password");
}
delete input.confirm;
confirm = true;
}
if (input["old-password"]) {
const encoder = orm.getNodefonyEntity("user").getEncoder();
const check = await encoder.isPasswordValid(input["old-password"], myuser.password);
if (!check) {
throw new Error(`User ${username} bad passport`);
}
delete input["old-password"];
confirm = true;
}
if (!confirm) {
throw new Error(`User ${username} no confirm passport`);
}
}
return usersService.update(myuser, input, user)
.then(async (res) => {
const message = `Update User ${input.username} OK`;
context.log(message, "INFO");
if (context.session && myuser.username === user.username) {
if (input.username !== myuser.username) {
user.username = input.username;
}
if (context.locale !== input.lang) {
context.session.set("lang", input.lang);
}
}
const newUser = await usersService.findOne(input.username, user);
delete newUser.password;
delete newUser["2fa-token"];
return newUser;
});
}
throw new Error(`User ${username} not found`);
});
},
deleteUser (obj, field, context, info) {
const {
username
} = field;
const user = context.getUser();
const usersService = context.get("users");
return usersService.delete(username, user);
},
deleteUsers (obj, field, context, info) {
const {
users
} = field;
return [];
}
}
};