https://github.com/wh4tisl0ve/currency_exchange_drf
REST API для описания валют и обменных курсов
https://github.com/wh4tisl0ve/currency_exchange_drf
django-rest-framework docker frontend nginx poetry postgresql python3 rest-api swagger unit-testing
Last synced: 4 months ago
JSON representation
REST API для описания валют и обменных курсов
- Host: GitHub
- URL: https://github.com/wh4tisl0ve/currency_exchange_drf
- Owner: Wh4tisl0ve
- Created: 2024-12-22T18:14:44.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-01-02T20:38:14.000Z (6 months ago)
- Last Synced: 2025-02-23T17:13:38.383Z (4 months ago)
- Topics: django-rest-framework, docker, frontend, nginx, poetry, postgresql, python3, rest-api, swagger, unit-testing
- Language: Python
- Homepage:
- Size: 1.13 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Обмен валют
REST API для описания валют и обменных курсов.
Позволяет просматривать и редактировать списки валют и обменных курсов, и совершать расчёт конвертации произвольных сумм из одной валюты в другую.Проект создан в рамках **Python Roadmap Сергея Жукова** -> [ссылка](https://zhukovsd.github.io/python-backend-learning-course/)
![]()
## Запуск проекта
1. Выполните клонирование проекта `git clone https://github.com/Wh4tisl0ve/Currency_exchange_DRF.git`
2. Выполните установку Docker
3. Создайте .env файл в корне src и заполните переменные окружения
4. Выполните команду `docker-compose up --build`## Пример .env
#### Django-App
* DEBUG=Режим отладки(False - выключен, True - включен)
* SECRET_KEY=Cекретный ключ для Django
* ALLOWED_HOSTS=Список доменов, которые может обслуживать приложение#### DB-config
* POSTGRES_DB=currency_exchange_drf
* POSTGRES_USER=Имя пользователя от БД
* POSTGRES_PASSWORD=Пароль от БД
* POSTGRES_HOST=localhost
* POSTGRES_PORT=5432## Описание эндпоинтов
* `Get` -> `/currencies/` -> Получение списка валютПример ответа:
```
[
{
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
{
"id": 0,
"name": "Euro",
"code": "EUR",
"sign": "€"
}
]
```
* `Get` -> `/currency/EUR/` -> Получение конкретной валютыПример ответа:
```
{
"id": 0,
"name": "Euro",
"code": "EUR",
"sign": "€"
}
```
* `POST` -> `/currencies/` -> Добавление новой валюты в базу. Данные передаются в теле запроса в виде полей формы (x-www-form-urlencoded). Поля формы - `name`, `code`, `sign`Пример ответа:
```
{
"id": 0,
"name": "Euro",
"code": "EUR",
"sign": "€"
}
```
* `GET` -> `/exchangeRates/` -> Получение списка всех обменных курсовПример ответа:
```
[
{
"id": 0,
"baseCurrency": {
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
"targetCurrency": {
"id": 1,
"name": "Euro",
"code": "EUR",
"sign": "€"
},
"rate": 0.99
}
]
```
* `GET` -> `/exchangeRate/USDRUB/` -> Получение конкретного обменного курса. Валютная пара задаётся идущими подряд кодами валют в адресе запросаПример ответа:
```
{
"id": 0,
"baseCurrency": {
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
"targetCurrency": {
"id": 1,
"name": "Euro",
"code": "EUR",
"sign": "€"
},
"rate": 0.99
}
```
* `POST` -> `/exchangeRates/` -> Добавление нового обменного курса в базу. Данные передаются в теле запроса в виде полей формы (x-www-form-urlencoded). Поля формы - `baseCurrencyCode`, `targetCurrencyCode`, `rate`Пример ответа:
```
{
"id": 0,
"baseCurrency": {
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
"targetCurrency": {
"id": 1,
"name": "Euro",
"code": "EUR",
"sign": "€"
},
"rate": 0.99
}
```
* `PATCH` -> `/exchangeRate/USDRUB/` -> Обновление существующего в базе обменного курса. Валютная пара задаётся идущими подряд кодами валют в адресе запроса. Данные передаются в теле запроса в виде полей формы (x-www-form-urlencoded). Единственное поле формы - rate.Пример ответа:
```
{
"id": 0,
"baseCurrency": {
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
"targetCurrency": {
"id": 1,
"name": "Euro",
"code": "EUR",
"sign": "€"
},
"rate": 0.99
}
```
* `GET` -> `/exchange?from=BASE_CURRENCY_CODE&to=TARGET_CURRENCY_CODE&amount=$AMOUNT` -> Расчёт перевода определённого количества средств из одной валюты в другуюПример ответа:
```
{
"baseCurrency": {
"id": 0,
"name": "United States dollar",
"code": "USD",
"sign": "$"
},
"targetCurrency": {
"id": 1,
"name": "Australian dollar",
"code": "AUD",
"sign": "A€"
},
"rate": 1.45,
"amount": 10.00,
"convertedAmount": 14.50
}
```## Документация для API
Для документирования API был подключен swagger и redoc с помощью зависимости drf-spectacular
## Стек
* Python 3.12
* Poetry
* Django Rest Framework
* PostgreSQL
* Docker