Задать вопрос
  • Как исправить проблему с функциями UnmarshalJSON и MarshalJSON?

    @nurzhannogerbek Автор вопроса
    Леонид Николаев, Леонид, к примеру контроллер мой выглядит в данный момент следующим образом:

    var GetSurvey = func(responseWriter http.ResponseWriter, request *http.Request) {
    	// Initialize variables.
    	survey := models.Survey{}
    	var err error
    
    	// Gorilla Mux Vars.
    	vars := mux.Vars(request)
    
    	// Execute SQL statement.
    	err = database.DB.QueryRow("SELECT * FROM surveys WHERE survey_id = $1;", vars["survey_id"]).Scan(&survey.ID, &survey.Name, &survey.Description, &survey.StartPeriod, &survey.EndPeriod)
    
    	// Shape the response depending on the result of the previous command.
    	if err != nil {
    		log.Println(err)
    		switch err {
    		case sql.ErrNoRows:
    			utils.ResponseWithError(responseWriter, http.StatusNotFound, "The entry not found.")
    		default:
    			utils.ResponseWithError(responseWriter, http.StatusInternalServerError, err.Error())
    		}
    		return
    	}
    	utils.Response(responseWriter, http.StatusOK, survey)
    }


    Я предполагал, что нужно лишь поменять функцию Scan. Не могу понять как безболезненно добавить вашу функцию.
  • Как исправить проблему с функциями UnmarshalJSON и MarshalJSON?

    @nurzhannogerbek Автор вопроса
    Здравствуйте, Леонид! Не совсем уловил вашу мысль. Чтобы беседа была предметной, могли бы вы пожалуйста показать пример?!
  • Возможно ли привязать сессию с опросом?

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

    CREATE TABLE SURVEYS_USERS(
    	ID SERIAL,
    	SURVEY_ID UUID NOT NULL,
    	USER_ID INT NOT NULL,
    	ACTIVE BOOLEAN,
    	PRIMARY KEY (ID),
    	FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS (ID) ON DELETE CASCADE,
    	FOREIGN KEY (USER_ID) REFERENCES USERS (ID) ON DELETE CASCADE
    );
  • Возможно ли привязать сессию с опросом?

    @nurzhannogerbek Автор вопроса
    Я вижу, что в каждом варианте есть свои узкие места и 100 процентов анонимно сделать не получится. При связке пользователя к сессии, по сути это не анонимно. Если фиксировать лишь факт отчета, то тогда сотрудник сможет несколько раз проходить опрос, а это не правильно, хоть и анонимно условно.
  • Возможно ли привязать сессию с опросом?

    @nurzhannogerbek Автор вопроса
    Поясните пожалуйста момент с паролей.
  • Возможно ли привязать сессию с опросом?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, возможно пользователи не привязывать к сессии, а хранить токен.
  • Возможно ли привязать сессию с опросом?

    @nurzhannogerbek Автор вопроса
    Константин Цветков, здравствуйте! Как должна выглядеть сущность "Отвечающий"?
  • Возможно ли привязать сессию с опросом?

    @nurzhannogerbek Автор вопроса
    Pavel Denisov, здравствуйте! Что вы в таком случаи предлагаете?
  • Есть ли в Docker контейнере ограничение на memory?

    @nurzhannogerbek Автор вопроса
    Здравствуйте, уже смотрел. В логах самой программы ошибок нету. Смотрел через docker logs [container_name]. Чтобы беседа была предметной могу скинуть детали.

    Код http веб сервера написан на Node.js:
    const express = require('express')
    const router = express.Router()
    
    const path = require('path')
    
    let Client = require('ssh2-sftp-client')
    let sftp = new Client()
    
    const config = require('../config')
    
    router.post('/', (req, res) => {
      const fileName = req.body.file_name
    
      const remotePath = '/reports/' + fileName
    
      const localePath = path.join(process.env.HOME || process.env.USERPROFILE, 'Downloads/' + fileName)
    
      sftp.connect(config.sftpServer, 'on').then(() => {
        sftp.fastGet(remotePath, localePath, {}).then(() => {
          res.header('Content-type', 'text/csv; charset=windows-1251')
          res.sendFile(localePath)
          sftp.end()
        }).catch((err) => {
          sftp.end()
          console.log(err, 'fastGet method error')
        })
      }).catch((err) => {
        sftp.end()
        console.log(err, 'connect method error')
      })
    })
    
    module.exports = router


    Сам Dockerfile простой и выглядит следующим образом:
    FROM node:latest
    COPY / ./
    EXPOSE 3010
    RUN mkdir -p /root/Downloads
    CMD ["node", "server/bin/www"]
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    Проблему уже нашел. Получается у объекта polygon нужно вызвать свойство geometry, а уж затем метод contains вызвать.
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    Проблему уже нашел. Получается у объекта polygon нужно вызвать свойство geometry, а уж затем метод contains вызвать.
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    Просто проверил, есть ли проход по коллекции. Он есть, перебор коллекции работает. Значит проблема в проверке вхождения метки в полигон.

    self.firstPolygonCollection.each(function(polygon) {
        console.log(polygon)
    });
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    Просто проверил, есть ли проход по коллекции. Он есть, перебор коллекции работает. Значит проблема в проверке вхождения метки в полигон.

    self.firstPolygonCollection.each(function(polygon) {
        console.log(polygon)
    });
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    Здравствуйте, Артур! На самом деле я пробовал forEach, но никакого эффекта от этого не было. JQuery я не использую. Пишу приложение на Vue.js. Вот полный код, который я использовал. Можете взглянуть на него пожалуйста?!

    // Пользователь делает поиск в элементе "SearchControl"
    self.searchControl.events.add('resultselect', function(e) {
        const index = e.get('index');
    
        self.searchControl.getResult(index).then(function(res) {
        
            // Создаем метку
            self.searchPlacemark = new ymaps.Placemark(
                res.geometry.getCoordinates(),
                {
                    hintContent: res.geometry.getCoordinates(),
                }, {
                    preset: 'islands#blueStarIcon',
                    iconColor: '#ff411a',
                }
            );
    
           // Добавляем метку на карту
           self.map.geoObjects.add(self.searchPlacemark);
    
           // Проверяем вхождение метки в первую коллекцию
           self.firstPolygonCollection.each(function(polygon) {
               console.log("Проход по первой коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом A.")
                }
            });
    
           // Проверяем вхождение метки во вторую коллекцию
           self.secondPolygonCollection.each(function(polygon) {
               console.log("Проход по второй коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом B.")
                }
            });
    
           // Проверяем вхождение метки в третью коллекцию
           self.thirdPolygonCollection.each(function(polygon) {
               console.log("Проход по третей коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом C.")
                }
            });
    
        });
    });


    Происходит странный эффект. В консоль выводится сообщение, что был проход по первой коллекции, но сообщение выводится лишь один раз. Нету количество выводов рядом с данным сообщением, из чего можно сделать вывод что сообщение выводится один раз. По другим двум коллекциям вообще не выводится сообщение. Что делаю не так, подскажите пожалуйста?
  • Как проверить вхождение метки в полигоны?

    @nurzhannogerbek Автор вопроса
    freeExec, да, почему-то не работает. Пишу получается Vue.js приложение. Полный код выглядит следующим образом:

    // Пользователь делает поиск в элементе "SearchControl"
    self.searchControl.events.add('resultselect', function(e) {
        const index = e.get('index');
    
        self.searchControl.getResult(index).then(function(res) {
        
            // Создаем метку
            self.searchPlacemark = new ymaps.Placemark(
                res.geometry.getCoordinates(),
                {
                    hintContent: res.geometry.getCoordinates(),
                }, {
                    preset: 'islands#blueStarIcon',
                    iconColor: '#ff411a',
                }
            );
    
           // Добавляем метку на карту
           self.map.geoObjects.add(self.searchPlacemark);
    
           // Проверяем вхождение метки в первую коллекцию
           self.firstPolygonCollection.each(function(polygon) {
               console.log("Проход по первой коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом A.")
                }
            });
    
           // Проверяем вхождение метки во вторую коллекцию
           self.secondPolygonCollection.each(function(polygon) {
               console.log("Проход по второй коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом B.")
                }
            });
    
           // Проверяем вхождение метки в третью коллекцию
           self.thirdPolygonCollection.each(function(polygon) {
               console.log("Проход по третей коллекции.")
               if(polygon.contains(res.geometry.getCoordinates())) {
                    console.log("Метка входит в полигон c типом C.")
                }
            });
    
        });
    });


    В консоль выводится сообщение что был проход по первой коллекции, но сообщение выводится лишь один раз. Нету количество выводов рядом с данным сообщением, из чего можно сделать вывод что сообщение выводится один раз. По другим двум коллекциям вообще не выводится сообщение. Что делаю не так, подскажите пожалуйста?
  • Какие open sourсe решения опросников вы знаете?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Спасибо за ссылку. Изучу данный инструмент сейчас более детально. Чем больше возможностей опросника тем лучше. Я не совсем понял, это десктоп? Нужно веб приложение, которые пользователи бы открыли в браузере. Нужно иметь возможность создавать шаблон опросника. Переиспользовать этот шаблон в новых опросах. Вопрос сходу, есть ли русская локализация? В вашем случаи с какой базой данных вы интегрировались и были ли подводные камни?
  • Как создать правильную систему авторизации?

    @nurzhannogerbek Автор вопроса
    timokins, Здравствуйте! Понятно. Часто встречал, что используют библиотеки passport.js + jsonwebtoken (JWT).
  • Как создать правильную систему авторизации?

    @nurzhannogerbek Автор вопроса
    Здравствуйте, на самом деле c этим стэком уже имел дела, но не большой. Пришел к этому стэку месяца 2 назад наверное. До этого в основном писал на Python (Django, Flask), Scala (Play). На Node.js + Express.js делал сервис, который вытаскивал данные из баз данных Oracle, MySQL нативными SQL запросы, агрегировал данные и выплевывал JSON. Клиентская часть на Vue.js была. Поэтому небольшой, но опыт имею на этом стэке. Меня сейчас интересует процесс авторизации. Не получается в голове все уложить по полочкам. Может вы смогли бы мне на пальцах объяснить?
  • Как синхронизировать таблицу и представление в PostgreSQL?

    @nurzhannogerbek Автор вопроса
    Melkij, Здравствуйте! Знаю, что можно условием WHERE STATUS=0 вытащить, но здесь вопрос в другом был.
  • Как синхронизировать таблицу и представление в PostgreSQL?

    @nurzhannogerbek Автор вопроса
    Здравствуйте! Я вот не знаю, что лучше всего использовать в моей ситуации. View или Materialized View? К примеру в таблице "REPORT" есть столбец "STATUS". Он показывает статус отчета. Мне нужно отдельно хранить где-то все записи (отчеты) из таблицы "REPORT" в которых значение столбца STATUS равен нулю. К примеру если создается новая запись у которой статус ноль, она должно попасть в представление. Если у какой-то уже существующей записи, поменяли статус на ноль, то она должно попасть в то представление. Если в записи со статусом ноль поменяли значение других столбцов, то эти изменения должны быть и у записи в представлении. Если у записи со статусом ноль поменяли значение на 1 или 2, то запись из представления должна исчезнуть. Под синхронизацией я имел введу это. Что можете сказать по этому поводу.