Skip to content

ghost-vk/categories-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание: Реализовать запросы для работы с категориями

Table of Contents

Задание

Формат данных - json

Тип модели категории

type SampleCategory = {
  id: string,
  slug: string,
  name: string,
  description?:string,
  createdDate: Date, 
  active: boolean
}

Реализовать следующие запросы

  • Создать категорию
  • Изменить категорию
  • Добавить поддержку частичного обновления модели. Например возможность изменить только active без необходимости передавать всю модель. И так для любого поля модели.
  • Удалить категорию
  • Получить категорию по id или slug
  • Получить массив категорий по фильтру. Без фильтров по умолчанию отдаются первые две категории отсортированные по дате создания (поле createdDate). Новые категории идут первыми.

Фильтрация

type SampleFiltration = {
    // Поиск категорий по полю name
    // По вхождение переданного текста без учета регистра
    // Умеет искать названия с ё через переданное е
    // Например категория “Мёд”. Запрос “?name=мед” найдет категорию // Мёд
    name?: string,
  
    // Все условия от поля name, но поиск идет по полю description description?: string,
    // Поиск по полю active
    // Поддерживаемые значения в параметрах: 0, false, 1, true.
    // Например active=1 или active=true отдаем только активные категории // active=0 или active=false отдаем только неактивные категории active?: string,
    // Все условия от поля name и description
    // Поиск осуществляется по полю name и description через “или”
    // Переданные фильтры по name и description должны игнорироваться // Например ?name=тапочки&description=текст&search=мед
    // При таком запросе фильтры name и description игнорируются search?:string,
    // Кол-во записей на страницу. Допустимы только цифры от 1-9 // Например pageSize=1. В ответе увидим только одну запись, // т.е одну категория.
    // При условии что есть записи в бд с переданными фильтрами // По умолчанию 2
    pageSize?: number,
  
    // Номер страницы. Допустимы только цифры
    // 0 и 1 являются первой страницей.
    // В ответ приходит кол-во записей с учетом pageSize // Например у нас в бд есть 4 записи(категории)
    // Запрос: “?page=1&pageSize=2”.
    // Ответ: первые две записи.
    // Запрос: “?page=2&pageSize=2”.
    // Ответ: следующие две записи.
    page?: number,
  
    // Сортировка категорий
    // Принимает любое значение в виде названия поля модели категории // и необязательного символа направления сортировки
    // в виде - (дефис, тире).
    // Символ означает направление сортировки как DESC
    // Если переданного значения без учета “-” нет в модели категории,
    // то работает сортировка по умолчанию.
    // Например “?sort=active” ASC сортировка по полю active
    // “?sort=-active” DESC сортировка по полю active
    // “?sort=-name” DESC сортировка по полю name
    // “?sort=-mike” игнорируем, так как нет такого поля в модели категории // По умолчанию sort=-createdDate
    sort?: string
}

Фильтры комбинируются с сортировкой и пагинацией (page, pageSize). Учитывать в данных фильтра вероятность инъекций и данные с пробелами. Если в поле модели фильтрации передали только пробелы, то фильтрация не происходит. В таком случае работает запрос по умолчанию.

Deploy instructions

  1. Change directory to /app

cd app

  1. Install dependencies

npm install

  1. Build project

npm run build

  1. Change directory back to root

cd ..

  1. Build Docker images

docker compose build

  1. Start project

docker compose up

  1. If you want to seed database, you can use dump in db folder

cat db/dump.sql | docker exec -i categories_db psql -U cat -d categories

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published