Skip to content

Khasmag06/effective-mobile-test

Repository files navigation

FioService

Микросервис, предназначенный для работы с персональными данными пользователей. Он предоставляет API для создания, чтения, обновления и удаления данных. Особенностью этого сервиса является интеграция со сторонними API для обогащения fio данных, которые мы получаем из очереди кафки, случайным возрастом, полом и национальностью.

Используемые технологии:

  • PostgreSQL (в качестве хранилища данных)
  • Docker (для запуска сервиса)
  • Swagger (для документации API)
  • Gin (веб фреймворк)
  • Redis (для кеширования)
  • Apache Kafka (для чтения из очереди)
  • validator/v10 (для реализации кастомного валидатора)
  • uber-go/zap (для логирования)
  • golang-migrate/migrate (для миграций БД)
  • pgx (драйвер для работы с PostgreSQL)
  • golang/mock, testify (для тестирования)

Сервис разработан с использованием современных технологий и следует принципам Clean Architecture, что обеспечивает легкость расширения функционала и тестирования. Также был реализован Graceful Shutdown для корректного завершения работы сервиса.

Getting Started

Для запуска сервиса достаточно заполнить .env файл в корневой директории.

Usage

Запустить сервис можно с помощью команды make compose-up.

Документацию после завпуска сервиса можно посмотреть по адресу http://localhost:8080/swagger/index.html с портом 8080 по умолчанию.

Для запуска тестов необходимо выполнить команду make test, для запуска тестов с покрытием make cover и make cover-html для получения отчёта в html формате.

Decisions

В ходе разработки был сомнения по тем или иным вопросам, которые были решены следующим образом:

  1. Какой использовать тип пагинации?

Каждый способ имеет свои преимущества и недостатки. Limit-Offset теряет в скорости работы и консистентности данных, так как если между получениями смежных страниц, будут добавлены данные, то это приведёт к дублированию и потере записи. От использования курсора пришлось отказаться, так как на одну дату может быть множество операций, тогда затруднительно получить отличные от первой страницы, нужно было бы увеличивать точность даты курсора, что усложнило бы разработку.

  1. Как добавлять множество fio данных?

Каждый раз при отправке запроса СУБД приходится разбирать полученное SQL-выражение. Если выражения сложные и они регулярно выполняются, можно использовать подготовленные — скомпилированные — SQL-запросы. В некоторых ситуациях они могут заметно увеличить скорость работы с БД. Сервер базы данных может запомнить запрос во внутреннем представлении и не тратить каждый раз время на его разбор из текстовой формы. Планировал внедрить буферизацию или механизм ожидания перед добавлением данных. Однако впоследствии отказался от этой идеи из-за возможных проблем с консистентностью данных. Поднимался вопрос об использовании Redis для решения данной проблемы, но сложности, связанные с пагинацией и фильтрацией, сделали этот вариант неоптимальным.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages