Sample project for storing and retrieving information about organizations based on their location or category.
Original technical specification
Тестовое задание "Создание REST API приложения"
Описание. Необходимо реализовать REST API приложения для справочника Организаций, Зданий, Деятельности.
- Организация - Представляет собой карточку организации в справочнике и должна содержать в себе следующую информацию: o Название: Например ООО “Рога и Копыта” o Номер телефона: организация может иметь несколько номеров телефонов (2-222-222, 3-333-333, 8-923-666-13-13) o Здание: Организация должна находится в одном конкретном здании (Например, Блюхера, 32/1) o Деятельность: Организация может заниматься несколькими видами деятельностей (Например, “Молочная продукция”, “Мясная продукция”)
- Здание - Содержит в себе как минимум информацию о конкретном здании, а именно: o Адрес: Например - г. Москва, ул. Ленина 1, офис 3 o Географические координаты: Местоположение здания должно быть в виде широты и долготы.
- Деятельность - позволяет классифицировать род деятельности организаций в каталоге. Имеет название и может в древовидном виде вкладываться друг в друга. Пример возможного дерева деятельности:
- Еда
- Мясная продукция
- Молочная продукция
- Автомобили
- Грузовые
- Легковые
- Запчасти
- Аксессуары
- Стэк - стэк fastapi+pydantic+sqlalchemy+alembic
Функционал приложения. Взаимодействие с пользователем происходит посредством HTTP запросов к API серверу с использованием статического API ключа. Все ответы должны быть в формате JSON. Необходимо реализовать следующие методы: ● список всех организаций находящихся в конкретном здании ● список всех организаций, которые относятся к указанному виду деятельности ● список организаций, которые находятся в заданном радиусе/прямоугольной области относительно указанной точки на карте. список зданий ● вывод информации об организации по её идентификатору ● искать организации по виду деятельности. Например, поиск по виду деятельности «Еда», которая находится на первом уровне дерева, и чтобы нашлись все организации, которые относятся к видам деятельности, лежащим внутри. Т.е. в результатах поиска должны отобразиться организации с видом деятельности Еда, Мясная продукция, Молочная продукция. ● поиск организации по названию ● ограничить уровень вложенности деятельностей 3 уровням
Задание ● Спроектировать БД + Создать необходимые миграции + Заполнить БД тестовыми данными ● Реализовать API согласно разделу Функционал приложения ● Завернуть приложения в Docker контейнер, чтобы его можно было развернуть на любой машине (Если необходимо, то написать инструкцию по разворачиванию) ● Добавить в проект документацию Swagger UI или Redoc с описанием всех методов приложения.
Commands should be run from the root project directory
cp .env.example .env# adjust .env file for your neeeds
docker compose up --builddocker run --name postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgis/postgis:18-3.6python13 -m venv .venv
source .venv/bin/activate
cd src
fastapi dev mainAfter successful docker installation Swagger UI docs
will be available at localhost:${APP_PORT}/docs
(defaults to localhost:8001/docs).
All endpoints are either self-explanatory or include additional comments.
Categories are stored as adjacency list, so their depth is not limited at database level.
Maintaining the correct category tree depth is achieved
using utility methods (see db.category.Category.add_categories).