![]() |
Микросервис для получения информации по 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 |
Ну, в целом то, промт в chat.XXX.com могли бы и сами написать...
|
| Время: 20:35 |