Улучшение l oop, которое пробует разные варианты URL до совпадения - PullRequest
0 голосов
/ 11 марта 2020

У меня есть API сборки, который подключается к ownCloud и получает содержимое каталога через WebDAV (используя эту библиотеку ). Поскольку здесь я не могу использовать регулярные выражения, и при использовании deep: true кажется, что сопоставление глобусов не работает, мне приходится проверять все варианты имени папки (поскольку клиенты иногда вводят все буквы большими или просто большими фамилиями, но обычно называют ) и вот как я закончил с кодом ниже. В нем много повторений, и есть способ, чтобы он выглядел лучше:

    // if not found then go level up
    let tryMainDir = false
    let validUrl = () => {
      let url = `${baseUrl}/${caseYearAndMonth}/${lastName} ${firstName} - ${formNumber}/Form`
      return tryMainDir ? url.replace(`/${caseYearAndMonth}`, '') : url
    }

    let isUrlValid = await client.exists(validUrl())
    const updateIsUrlValid = async () => {
      isUrlValid = await client.exists(validUrl())
      console.log(isUrlValid)
    }

   if(!isUrlValid){
      // some names are uppercase and ownCloud is case-sensitive
      do {
        if(!isUrlValid){
          lastName = lastName.toUpperCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.toUpperCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.toLowerCase()
          lastName = lastName.toLowerCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
          lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
          lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
          await updateIsUrlValid()
        }
        if(!isUrlValid && tryMainDir){
          break;
        }
        if(!isUrlValid){
          tryMainDir = true
        }
      } while (!isUrlValid)
    }

Предполагается, что l oop будет делать максимум два раунда. Посмотреть в папке, а затем в родительском каталоге.

...