Микросервис для получения информации по 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 # Слой доступа к данным
│ │ └── geoip_repository_test.go # Тесты репозитория
│ ├── service/
│ │ ├── geoip_service.go # Слой бизнес-логики
│ │ └── geoip_service_test.go # Тесты сервиса
│ └── handler/
│ ├── geoip_handler.go # HTTP-обработчики
│ └── geoip_handler_test.go # Тесты обработчиков
├── go.mod
├── go.sum
└── README.md
```
## Чистая архитектура
Этот проект следует принципам чистой архитектуры:
1. **Доменный слой**: Содержит основные бизнес-модели и правила
2. **Слой репозитория**: Обрабатывает доступ к данным и хранение
3. **Сервисный слой**: Реализует бизнес-логику и варианты использования
4. **Слой обработчиков**: Управляет HTTP-запросами и ответами
5. **Конфигурация**: Централизует конфигурацию приложения
## Запуск приложения
1. Соберите и запустите приложение:
```bash
go build -o geoip-server ./cmd/server
./geoip-server
```
Сервер запустится на порту 8080 по умолчанию.
Примечание: Если у вас установлена утилита `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
# Сервис поиска 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 # Слой доступа к данным
│ │ └── geoip_repository_test.go # Тесты репозитория
│ ├── service/
│ │ ├── geoip_service.go # Слой бизнес-логики
│ │ └── geoip_service_test.go # Тесты сервиса
│ └── handler/
│ ├── geoip_handler.go # HTTP-обработчики
│ └── geoip_handler_test.go # Тесты обработчиков
├── go.mod
├── go.sum
└── README.md
```
## Чистая архитектура
Этот проект следует принципам чистой архитектуры:
1. **Доменный слой**: Содержит основные бизнес-модели и правила
2. **Слой репозитория**: Обрабатывает доступ к данным и хранение
3. **Сервисный слой**: Реализует бизнес-логику и варианты использования
4. **Слой обработчиков**: Управляет HTTP-запросами и ответами
5. **Конфигурация**: Централизует конфигурацию приложения
## Запуск приложения
1. Соберите и запустите приложение:
```bash
go build -o geoip-server ./cmd/server
./geoip-server
```
Сервер запустится на порту 8080 по умолчанию.
Примечание: Если у вас установлена утилита `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