Что такое хороший шаблон для использования при создании пользователя? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть следующая логика c, которая кажется очень вонючей, мне интересно, кто-нибудь сталкивался с таким кодом? или если кто-то знает, какой оптимальный шаблон (ы) следовать?

const upsertAdmin = async (email, password, ownership, messages) => {
  let user = await User.findOne({email});
  if(!user) {
    if(!password) {
      messages.push('Admin was not created, password is required');
    } else {
      user = new User({
        name: email,
        email,
        password,
        permissions: [ownership],
      });
      messages.push('Admin user created');
      await user.save();
    }
  } else {
    messages.push('Admin user found');
    let shouldSave = false;
    if(password) {
      user.password = password;
      messages.push('Admin password updated');
      shouldSave = true;
    }
    if(user.permissions.indexOf(ownership) === -1) {
      user.permissions.push(ownership);
      messages.push('Admin ownership added');
      shouldSave = true;
    } else {
      messages.push('Admin already has ownership');
    }
    if(shouldSave)
      await user.save();
  }
  return user;
};

1 Ответ

1 голос
/ 13 февраля 2020

вы можете извлечь первую функциональность (создать пользователя), чтобы разделить функцию для большей возможности восстановления, и сделайте вот так

const upsertAdmin = async (email, password, ownership, messages) => {
  let user = await User.findOne({email});
  let userHavePassword=!user &&password

  if(userHavePassword) {
        await saveUser(email, password, ownership, messages)
        messages.push('Admin user created');
        return user

  }
  //.. rest of code without else 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...