Skip to content

wlcmtunknwndth/vk_test

Repository files navigation

Тестовое задание ВК

Применяемые технологии:

  1. Хранилище -- Redis.
  2. Брокер -- Nats.
  3. protoc для генерации go-структур из proto-файлов.
  4. Slog для логгирования запросов.
  5. Cleanenv для чтения конфига из yaml-файла.
  6. Docker и docker-compose для масштабируемости и переносимости.
  7. Taskfile для того, чтобы генерировать go-файлы из .proto и для того, чтобы запускать и удалять контейнеры одной командой.

План:

Мною было решено разрешено сделать не только один метод, а также почти CRUD (delete не так сильно нужен, так как redis очищает сам себя от документов спустя заданное время). Таким образом, есть две возможности воспользоваться сервисом:

  1. gRPC-запрос, если наш сервис является endpoint'ом сервера, поэтому мы получаем ровно то, что от нас просили.
  2. Через подписку на канал, если сервис являеся middleware. При старте сервиса параллельно запускается подписчик на канал docs,
    который принадлежит группе qrcv(поэтому есть возможность запустить несколько одинаковых контейнеров, так как каждый подписчик попадет в группу qrcv). Когда же в канал попадает сообщение, он обрабатывает его и сохраняет в кэш, а после отправляет уже в канал tdocs, откуда уже может читать любой желающий.

Тестирование:

К моменту окончания приема задания, были написаны только unit-тесты(папка tests) и сделаны ручные тесты через postman, так как эти две недели выдались очень загруженными другими делами.

Запуск:

Для запуска сервис не требуется прилагать больших усилий:

  1. Запустите Docker Engine
  2. Перейдите в корень проекта
  3. Запустите сервис с помощью команды task run
  4. При завершении примените команду task delete, чтобы избавить от контейнеров.

Тестирование через API:

service Documents{
  rpc Create(UserTDocument) returns (TDocument);
  rpc Update(UserTDocument) returns (TDocument);
  rpc Process(TDocument) returns (TDocument);
  rpc Get(GetRequest) returns (TDocument);
}

message GetRequest{
  string url = 1;
}

message UserTDocument{
  string Url = 1;
  string Text = 2;
}

message TDocument{
  string Url = 1;
  uint64 PubDate = 2;
  uint64 FetchTime = 3;
  string Text = 4;
  uint64 FirstFetchTime = 5;
}
  1. Запускаете сервис(см. предыдущий пункт).
  2. Запускаете postman(или что-нибудь другое).
  3. Если выбрали postman, то импортируйте .proto файл из ./proto/docs/docs.proto.
  4. Тестируйте на здоровье, ведь postman поможет вам в составлении правильных запросов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published