Микросервис для получения информации по IP адресу, так как участились баны доменов из-за наличия файлов клиента на сайте, появилась нужда отображать их или нет исходя из локации.
# Сервис поиска GeoIP
Go-приложение, предоставляющее географическую информацию для IP-адресов с использованием базы данных MaxMind GeoIP.
## Структура проекта
Проект следует принципам чистой архитектуры со следующей структурой:
```
check-ip/
├── cmd/
│ └── server/
│ └── main.go # Точка входа в приложение
├── docs/
│ ├── openapi.yaml # OpenAPI спецификация API
│ └── README.md # Документация по использованию API
├── internal/
│ ├── config/
│ │ └── config.go # Конфигурация приложения
│ ├── domain/
│ │ └── model.go # Доменные модели
│ ├── repository/
│ │ ├── geoip_repository.go # Слой доступа к данным
Примечание: Если у вас установлена утилита `geoipupdate`, приложение будет использовать её для обновления базы данных. В противном случае база данных будет загружена напрямую с публичного источника.
## Автоматическое обновление базы данных
Приложение имеет следующие функции для работы с базой данных GeoIP:
1. **Автоматическая загрузка при запуске**: Если база данных не существует, приложение автоматически загрузит её при запуске.
2. **Ежедневное обновление**: База данных автоматически обновляется каждые 24 часа.
3. **Немедленное обновление**: При запуске приложения выполняется обновление базы данных.
## API Endpoints
### GET /api/v1/geo-ip
Возвращает географическую информацию для IP-адреса.
**Параметры запроса**:
- `ip`: IP-адрес для поиска (необязательно, по умолчанию используется IP клиента)
**Пример ответа**:
```json
{
"ip": "8.8.8.8",
"country": "US",
"region": "California",
"city": "Mountain View",
"latitude": 37.386,
"longitude": -122.0838
}
```
## Документация API
Полная документация API доступна в формате OpenAPI 3.0 в директории `docs`:
- [OpenAPI спецификация](./docs/openapi.yaml) - полное описание API в формате YAML
- [Документация по использованию API](./docs/README.md) - инструкции по использованию документации
Вы можете использовать эту спецификацию с инструментами, такими как Swagger UI или Redoc, для интерактивного просмотра и тестирования API.
## Запуск тестов
Запустите все тесты с помощью:
```bash
go test ./...
```
## Зависимости
- [github.com/oschwald/geoip2-golang](https://github.com/oschwald/geoip2-golang): Go-библиотека для чтения баз данных MaxMind GeoIP2