Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как спроектировать приложение? Или как лучше хранить данные?

    @foterio
    Обычно лайки храняться в отдельной таблице в базе данных аля likes
    и каждый лайк выглядит вот так
    {
      // Кто поставил лайк
      user_id: 123,
      // Какому изображению поставили лайк
      image_id: 456,
      // Когда поставили лайк, время в любом удобном для вас формате, (опционально)
      created_at: '2023-05-24 11:53'
    }

    И затем вы идете в likes и запрашиваете лайки для нужного вам изображения
    SELECT user_id, image_id, created_at FROM likes WHERE image_id = 456
    Ответ написан
    Комментировать
  • Общий доступ к данным хранимым в MySql?

    @foterio
    Если перейдете на Postgres (стоит его начать изучать), то можно использовать DBaaS (база данных как сервис) от cockroachlabs с их CockroachDB.
    Дают 10 гигов места для базы данных и 50 млн бесплатных запросов в месяц. Для старта вам хватит.
    Есть еще вариант Atlas но это MongoDB, они дают 512 мегабайт места для базы и тоже DBaaS. Но учитывайте, что MongoDB - это не реляционная база данных, не для всех случаев она подойдет.
    Ответ написан
    Комментировать
  • Фильтры товаров интернет-магазина, как грамотно реализовать обмен данными с сервером?

    @foterio
    Если это не GraphQL api, у которого любой запрос это POST, то общепринято для получения информации использовать GET запрос. Так же это сделано для того, чтобы вы могли поделиться этой ссылкой с другим человеком и еще чтобы правильно работало SEO.

    Выглядеть это должно примерно вот так.
    1. Для начала разберемся с pagination, тут есть два пути:
    А. Передавать два параметра, limit - кол-во записей, offset - отступ
    Первая страница /producst?limit=20&offset=0
    Вторая страница /producst?limit=20&offset=20

    B. Передавать только page, и уже на backend'е высчитывать limit и offset для обращения в БД
    Первая страница /producst
    Вторая страница /producst?page=2
    // Тут мы для первой страницы можем забить и не передавать никакие значения,
    // так как на backend'е предусматриваем page = 1 по дефолту.

    2. Значения фильтров так же передаем параметрами
    /producst?page=2&categoryIds=15,7,23
    3. И затем на backend'е уже парсим наши фильтры, незабывая предусмотреть дефолтные значения для фильтров. Есть разные подходы, первое что пришло в голову, это следующее решение
    let filter = {
      // тут можно предусмотреть некоторые значения фильтра по дефолту
      isAvailableOnStock: true,
    }
    // И затем парсим каждое значение
    if (query.categoryIds) {
      // В зависимости от базы данных, а так же драйвера и ORM,
      // которые мы используем, будет отличаться
      // делайте это в соответсвии с документацией
      filter.category_id = In(query.categoryIds.split(','))
    }
    // Делаем запрос в нашу базу
    // Для примера используется TypeORM
    const products = await getRepository(Products).find({
      // Используем наш объект filter
      where: {
        ...filter,
      },
      // Сортируем результат по названию
      order: {
        title: 'ASC',
      }
    })

    P. S. Еще помните, что существует сортировка, по цене, по имени, и прочее, которую так же необходимо передавать через параметр и затем сортировать результат из базы данных через "ORDER BY"
    Ответ написан
    Комментировать