Skip to content

Метод поиска таблиц #328

@Kraysent

Description

@Kraysent

Нужно написать метод API, который будет получать список таблиц по поисковой строке. Он будет использоваться для отрисовки интерфейса в задаче HyperLEDA/webapp#18.

В частности, это должен быть метод GET /api/v1/table/list, принимающий в качестве query-параметров:

  • query: str - запрос по которому будет производится поиск (по умолчанию пустая строка)
  • page_size: int - размер страницы ответа (по умолчанию 25)
  • page: int - номер страницы (по умолчанию 0)

Ответ должен выглядеть примерно следующим образом:

{
    "data": {
        "tables": [
            {
                "name": "my_table_1",
                "description": "This is my first table",
                "num_entries": 1234,
                "num_fields": 23
            },
            {
                "name": "my_table_2",
                "description": "This is my second table",
                "num_entries": 64636,
                "num_fields": 12
            },
            {
                "name": "table_3",
                "description": "This is copy of my_table_1",
                "num_entries": 1234,
                "num_fields": 23
            }
        ]
    }
}

query - запрос поиска, должен позволять делать поиск и по названию таблицы, и по её описанию. Это значит, что если введён my_table, то он должен вернуть как те таблицы, которые содержат my_table в поле name (первая и вторая таблица в примере выше), так и те, что содержат my_table в описании (третья таблица в примере выше).

Нужно будет написать метод репозитория нулевого уровня, который будет возвращать требуемые данные. Скорее всего, это будет что-то похожее на этот метод - https://github.com/HyperLEDA/db-app/blob/master/app/data/repositories/layer0/tables.py#L232, но тот, который будет получать список таблиц сразу.

Начать можно с того, чтобы получать только name и description, и потом доработать до получения num_entries и num_fields. Для получения всех таблиц, которые содержат определённую подстроку, можно использовать функцию LIKE в PostgreSQL - https://postgrespro.ru/docs/postgresql/current/functions-matching.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions