Skip to content

Miron-Anosov/MeetUpAPI

Repository files navigation

Описание проекта

Проект представляет собой API для управления клиентами, их регистрацией и авторизацией, а также предоставлением функций, связанных с геолокацией. Сервис позволяет пользователям регистрироваться, входить в систему, управлять токенами доступа, получать информацию о других клиентах поблизости и рассчитывать расстояние между двумя заданными точками. Структура API

API включает следующие основные эндпоинты:

/clients/create
Описание: Регистрация нового клиента.
Метод: POST
Тело запроса: Данные клиента, такие как имя, фамилия, электронная почта, пароль, пол, координаты и аватар.
Ответы:
    201: Успешная регистрация.
    400, 422, 500: Ошибки валидации или другие ошибки на сервере.

/clients/{id}/match
Описание: Создание связи между пользователем и целевым пользователем с заданным ID.
Метод: POST
Параметры: ID пользователя.
Ответы:
    201: Связь успешно создана.
    401, 422, 429, 500: Ошибки аутентификации, валидации или серверные ошибки.

/auth/login
Описание: Вход пользователя в систему. Устанавливает refresh_token в cookies.
Метод: POST
Тело запроса: Данные пользователя (имя и пароль).
Ответы:
    200: Успешный вход, выдаются токены доступа.
    401, 422, 500: Ошибки аутентификации или серверные ошибки.

/auth/token
Описание: Обновление токенов доступа с использованием refresh_token.
Метод: PATCH
Требования: Наличие cookie refresh_token.
Ответы:
    201: Токены успешно обновлены.
    401, 500: Ошибки аутентификации или серверные ошибки.

/auth/logout
Описание: Выход из системы, удаление токена пользователя.
Метод: DELETE
Требования: Cookie refresh_token и авторизация Bearer.
Ответы:
    200: Успешный выход.
    500: Ошибки на сервере.

/list
Описание: Получение списка клиентов, находящихся поблизости от аутентифицированного пользователя.
Метод: POST
Параметры: Радиус поиска, точность расчета расстояний, сортировка.
Ответы:
    200: Успешный ответ с коллекцией пользователей.
    401, 500, 404, 304: Ошибки аутентификации, валидации или серверные ошибки.

/distance
Описание: Расчет расстояния между двумя точками.
Метод: POST
Тело запроса: Координаты двух точек (location_a и location_b).
Ответы:
    200: Успешный расчет расстояния.
    500, 422: Ошибки сервера или валидации.

Модели данных

Основные модели:

  • Body_create_client_clients_create_post: Модель данных для создания нового клиента.
  • Body_login_form_auth_login_post: Модель данных для входа пользователя.
  • DistanceRequest: Модель данных для расчета расстояния между двумя точками.
  • DistanceResponse: Результат расчета расстояния в километрах.
  • Status: Модель успешного ответа.
  • TokenAuth: Модель токенов авторизации и обновления.
  • User и UsersCollection: Модели данных для отображения информации о клиентах, включая данные о расстоянии.

Безопасность

Для обеспечения безопасности используются следующие схемы аутентификации:

OAuth2PasswordBearer: Для управления аутентификацией через пароль.
APIKeyCookie: Используется для хранения и обновления токена в cookies.
HTTPBearer: Используется для передачи Bearer токена.

Установка и запуск проекта

Получаем исходники:

git clone https://github.com/Miron-Anosov/MeetUpAPI.git

Создаем приватный ключ необходимый для JWT

openssl genrsa -out jwt-private.pem 2048

Теперь создаем на его основании публичный ключ.

openssl rsa  -in src/certs/jwt-private.pem -outform PEM -pubout -out jwt-public.pem

Применяем .env.template

  • Создаем .env
  • Вписываем чувствительные данные в .env по шаблону .env.template
  • В том числе сгенерированные ключи в соответсвующее поля.

Запускаем докер:

cd ./.;
docker compose up -d

Проверяем по адресу Swagger:

http://your-url:80/api/docs

Примеры запросов

Регистрация пользователя:
POST /clients/create
Content-Type: multipart/form-data
Body:
{
  "first_name": "Имя",
  "last_name": "Фамилия",
  "email": "[email protected]",
  "password": "password",
  "password_control": "password",
  "sex": "M"
}

Получение списка пользователей поблизости:

POST /list?radius=5000
Authorization: Bearer <token>

Примечания

  • Все запросы к защищенным эндпоинтам требуют аутентификации.
  • При необходимости можно управлять уровнями разрешения доступа и токенами, настраивая их под задачи приложения.
  • Регистрация нового участника с асинхронной обработкой аватарки и наложением водяного знака.
  • Оценка участников с возможностью взаимной симпатию и отправкой email уведомлений.
  • Фильтрация списка участников по полу, имени, фамилии и сортировка по дате регистрации.
  • Расчет дистанции между участниками с использованием координат (широта/долгота), фильтрация по дистанции
  • Кэширование для улучшения производительности при повторных запросах.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages