• Sequelize вернуть поля при bulkCreate()?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, работает. Но есть один нюас. У меня еще есть поле code, которое заполняется триггером PostgreSQL. Ну и если оно почему-то не возвращается.
    Я так понял возвращаются только поля которые участвуют в ставке.
    А как вернуть все поля таблицы?
  • Генерировать уникальное значение?

    bogdan_uman
    @bogdan_uman Автор вопроса
    nvdfxx, Спасибо, но так не выйдет, мне нужно 9-значное цифровое значение, если отребазать 9 знаков от md5 будут дубли.
  • Генерировать уникальное значение?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Melkij, Спасибо, думаю на первых нескольких миллионах записей все будет работать как надо, уже наверное последние числа будет непросто генерировать. Вот получилась такая функция

    CREATE OR REPLACE FUNCTION public.cartridges_insert()
     RETURNS trigger
     LANGUAGE plpgsql
    AS $function$
          BEGIN
            IF NEW.balance = 0 and NEW.quantity != 0 THEN
              NEW.balance :=  NEW.quantity;
            END IF;
    
            NEW.code := (WITH RECURSIVE serialNumber AS (
                SELECT
                  LPAD((RANDOM() * 1e9)::bigint::character(9), 9, '0') AS code,
                  0 AS nested
                UNION ALL
                SELECT
                  LPAD((RANDOM() * 1e9)::bigint::character(9), 9, '0') AS code,
                  nested + 1 AS nested
                FROM serialNumber where nested < 1e6
              )
              SELECT code FROM serialNumber
                WHERE NOT EXISTS (
                  SELECT FROM "Cartridges" WHERE code = serialNumber.code
                )
                LIMIT 1
            );
    
            RETURN NEW;
          END;
          $function$
    ;
  • Генерировать уникальное значение?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, но а где гарантия что не будет 2 таких значения в базе?
  • Генерировать уникальное значение?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо за ответы. Ну у меня это что-то как когда-то были скретч-карты пополнения мобильных, где сгенерирован уникальный 16-значный код.
    П.С. Немного подумав, у меня возник алгорит.
    1) Создать таблицу serialNumber с одним полем serialNumber и последовательно заполнить эту таблицу всеми значениями (выйдет 1 миллиард значений, хотя в принципе диапазон можно уменьшить )
    2) При создании новой записи в нужной таблицы триггером выбираем рандомную запись с таблицы serialNumber, вставляем ее в нужную таблицу, и удаляем ее с таблицы serialNumber.
    Как бы операция будет довольно не частая, как будет по производительности не знаю.
    Может более оптимальную идею подскажите?
  • Генерировать уникальное значение?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, но есть один нюанс числа не должны быть подряд, это будет что-то типа серийного номера для лицензии. А в Вашем примере идет подряд.
  • Sequelize вернуть поля при Update?

    bogdan_uman
    @bogdan_uman Автор вопроса
    там как бы с PostgreSQL вариант есть

    const category = await models.GalleryCategory.update(
          { num, visible, name }, { returning: true, where: { id } }
        );
        ({ 0: result } = category);
  • Letsencrypt сertbot docker получение с сертификата wildcard?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Дмитрий Шицков, Спасибо, но все-равно непонятно. По той инструкции что в Вашем сообщении нужно
    "Create TXT record via DNS console and setup key and value"
    и непонятно как создать этот файл когда это автоматический скрипт с докера.
  • Letsencrypt сertbot docker получение с сертификата wildcard?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, не скинете пример как это сделать?
  • Запуск нескольких Viber?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо. Но вот такая ошибка появляется

    user@G500:/etc$ firejail --private=/home/user/viber1 Viber
    Reading profile /etc/firejail/Viber.profile
    Reading profile /etc/firejail/disable-common.inc
    Reading profile /etc/firejail/disable-devel.inc
    Reading profile /etc/firejail/disable-interpreters.inc
    Reading profile /etc/firejail/disable-passwdmgr.inc
    Reading profile /etc/firejail/disable-programs.inc
    Reading profile /etc/firejail/whitelist-common.inc
    Warning: networking feature is disabled in Firejail configuration file
    Parent pid 5210, child pid 5211
    Warning: skipping proxychains.conf for private /etc
    Warning: skipping crypto-policies for private /etc
    Warning: skipping asound.conf for private /etc
    Private /etc installed in 94.14 ms
    6 programs installed in 20.97 ms
    Child process initialized in 254.11 ms
    Error: no suitable Viber executable found
    
    Parent is shutting down, bye...


    Хотя Viber, реально установлен в "/opt/viber/Viber"
    П.С. И почему-то его нельзя запустить с командной строки

    user@G500:/etc$ Viber
    
    Command 'Viber' not found, did you mean:
    
      command 'biber' from deb biber (2.12-2)
    
    Try: sudo apt install <deb name>
  • Middleware перед Multer?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, да как бы ясно и про порядок и про то что не получиться предварительно спарсить параметры. Как бы все можно впихнуть в логику multer -> fileFilter. Но есть один нюанс, если параметр 'file', не обязательный и отсутствует, тогда получается и не сработает fileFilter. Получается нужно делать дубляж кода в миддлваре после multer if (!req.file) await insertDB(req, next);

    const insertDB = async (req, next) => {
      const { num, visible, name } = req.body;
      if (!name) next(new Error('MISSING_PARAMS'));
    
      const category = await models.GalleryCategory.create({ num, visible, name });
      req.categoryId = category.id;
    };
    
    const fileFilterCreateCategory = async (req, file, next) => {
      if (!allowedTypes.includes(file.mimetype)) {
        return next(new Error('LIMIT_FILE_TYPES'));
      }
    
      await insertDB(req, next);
    
      return next(null, true);
    };
    
    const storageCreateCategory = multer.diskStorage({
      destination: (req, file, cb) => cb(null, pathGalleryCategories),
      filename: (req, file, cb) => cb(null, req.categoryId.toString())
    });
    
    const uploadCreateCategory = multer({
      fileFilter: fileFilterCreateCategory,
      limits: { fileSize: process.env.APP_MAX_FILE_SIZE },
      storage: storageCreateCategory
    });
    
    routes.post(
      '',
      uploadCreateCategory.single('file'),
      async (req, res, next) => {
        if (!req.file) await insertDB(req, next);
        next();
      },
      (req, res) => res.json({ id: req.categoryId })
    );
  • Multer проверка наличия параметра file?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Вот создал вопрос, может подскажите? вопрос
  • Multer проверка наличия параметра file?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Ну так body как раз и нет падает ошибка.

    Вот как бы 2 варианта
    1) Ну если я их поменяю местами, тогда получается, что запись в базе создастся после того как файл загрузился, а у меня id таблицы как раз соответствует имени файла.

    2) У меня добавиться метод patch - частичное изменении. Тоесь фактически файл может не грузиться, тогда как быть в данном случаи? Логично получить id по которому будет идти обновление записи, проверить наличие записи в базе и уже на основании этого запускать миддварь мультера для загрузки файла?
  • Multer проверка наличия параметра file?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, а можно ли как-то в этой миддлваре, провалидировать параметры и создать запись в базе которая соответствует имени файла, получается, что они парсятся multer, а миддлварь получается раньше multer. Или как в этом случаи правильно сделать?

    const fileFilterCreateCategory = async (req, file, next) => {
      if (!allowedTypes.includes(file.mimetype)) {
        return next(new Error('LIMIT_FILE_TYPES'));
      }
    
      return next(null, true);
    };
    
    const storageCreateCategory = multer.diskStorage({
      destination: (req, file, cb) => cb(null, pathGalleryCategories),
      filename: (req, file, cb) => cb(null, req.categoryId.toString())
    });
    
    const uploadCreateCategory = multer({
      fileFilter: fileFilterCreateCategory,
      limits: { fileSize: process.env.APP_MAX_FILE_SIZE },
      storage: storageCreateCategory
    });
    
    routes.post('',
      async (req, res, next) => {
        const { num, visible, name } = req.body;
        if (!(num && visible && name)) next(new Error('MISSING_PARAMS'));
    
        const category = await models.GalleryCategory.create({ num, visible, name });
    
        req.categoryId = category.id;
    
        next(req.file ? null : new Error('NO_FILE'));
      },
      uploadCreateCategory.single('file'),
      (req, res) => res.json({ id: req.categoryId }));
  • Sequelize имя поля name?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Владлен Хеллсайт, Спасибо. Реально пропустил в модели поле "name" )
  • Выравнивание по вертикали?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Сенкс, немножко не так, потому что к примеру если к примеру будет только один .list в контейнере, и у него содержимое будет меньше чем высота контейнера, он тогда расположится в верхнему краю

  • Побитовая маска для значения 0...4 для каждого разряда?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, а как такое можно сделать на JS, тут как бы нет классической структуры данных?
  • Запуск приложения при старте Android?

    bogdan_uman
    @bogdan_uman Автор вопроса
    peacemakerv, спасибо прописал эти категории и теперь даже не нужно делать BootCompletedReceiver, приложуха запускается в режиме киоска.
  • Побитовая маска для значения 0...4 для каждого разряда?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо но непонятно,
    Спасибо, ну как бы предполагается что будет

    Например
    v1 = 0
    v2 = 2
    v3 = 4
    v4 = 1

    Например непонятно как это упаковать и как распаковать?
  • Побитовая маска для значения 0...4 для каждого разряда?

    bogdan_uman
    @bogdan_uman Автор вопроса
    Спасибо, ну как бы предполагается что будет

    v1 = 0...4
    v2 = 0...4
    v3 = 0...4
    v4 = 0...4

    Например
    v1 = 0
    v2 = 2
    v3 = 4
    v4 = 1

    Например непонятно как это упаковать и как распаковать?