Skip to content

Enriches people w/ age, gender, nationality from public APIs

License

Notifications You must be signed in to change notification settings

TheRealMal/golang-people

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Golang people

Service that listens Kafka topic for new people and adds them to PostgreSQL database. All failed requests being redirected to another Kafka topic. Database can also be accessed through REST/GraphQL API (Get, add, update or delete people). REST API has Redis cache.

Development section

SQL Migration

bash scripts/migration/go-get-psql.sh # Install go migrate for postgres
bash scripts/migration/migrate.sh # Migrate tables from scripts/migration/migrations

Kafka

bash scripts/kafka/zookeeper.sh # Run zookeeper to run Kafka
bash scripts/kafka/kafka.sh # Run Kafka
bash scripts/kafka/k-producer.sh # Run Kafka producer for topic from .env (FIO)
bash scripts/kafka/k-consumer.sh # Run Kafka consumer for topic from .env (FIO_FAILED)

kafka producer + consumer w/ docker https://habr.com/ru/articles/738874/

GraphQL Generate

go run github.com/99designs/gqlgen init # USE ONLY ONCE: Init files
go run github.com/99designs/gqlgen generate # Generate code if schema.graphqls updated

REST + GraphQL API

go run app/app

TODO

Реализовать сервис, который будет получать поток ФИО, из открытых api обогащать ответ наиболее вероятными возрастом, полом и национальностью, и сохранять данные в БД. По запросу выдавать инфу о найденных людях. Необходимо реализовать следующее

  • Сервис слушает очередь Kafka FIO, в котором приходит информация с ФИО в формате
{
    "name": "Dmitriy",
    "surname": "Ushakov",
    "patronymic": "Vasilevich" // необязательно
}
  • В случае некорректного сообщения, обогатить его причиной ошибки (нет обязательного поля, некорректный формат...) и отправить в очередь Kafka FIO_FAILED
  • Корректное сообщение обогатить
  • Обогащенное сообщение положить в БД postgres (структура БД должна быть создана путем миграций)
  • Выставить rest методы
    • Для получения данных с различными фильтрами и пагинацией
    • Для добавления новых людей
    • Для удаления по идентификатору
    • Для изменения сущности
  • Выставить GraphQL методы аналогичные п. 5
    • Для получения данных с различными фильтрами и пагинацией
    • Для добавления новых людей
    • Для удаления по идентификатору
    • Для изменения сущности
  • Предусмотреть кэширование данных в Redis (Не добавил для graphql)
  • Покрыть код логами
  • Покрыть бизнес-логику unit-тестами
  • Вынести все конфигурационные данные в .env

About

Enriches people w/ age, gender, nationality from public APIs

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published