Conversation
| return nil | ||
| } | ||
|
|
||
| func (q *Queue) RunConsumer(storage *storage.Storage, logger *logger.Logger) error { |
There was a problem hiding this comment.
Немного странное название метода очереди. Обычно это Push и Pop, а уже консюмер и прод/сер - это некая обёртка.
There was a problem hiding this comment.
Просто это не совсем push или pop событие, именно именно инициализация потребителя,
то есть выполняется некоторое Run-событие (если точнее StartConsuming).
Если имеет смысл переименовать, то поправьте меня пожалуйста.
| @@ -0,0 +1,5 @@ | |||
| --- | |||
There was a problem hiding this comment.
Для юнит-тестов можно просто создать структуру конфиг и записать в неё нужные данные напрямую в файле с тестом. Файлы конфигов тут лишние.
There was a problem hiding this comment.
Там, где вызывается инициализация конфига единожды — поправил на определение конфига через структуру.
| queue *queue.Queue | ||
| } | ||
|
|
||
| // Generate gRPC gateway. |
There was a problem hiding this comment.
Такое лучше вынести в файл generate.go и положить его в пакет server.
| @@ -0,0 +1,139 @@ | |||
| syntax = "proto3"; | |||
There was a problem hiding this comment.
Описание апи должно лежать в /api/banner-api.proto, не очевидно потом где нужно искать описание апи.
There was a problem hiding this comment.
Описание api и генератор gRPC вынес в API,
основная логика осталась в сервер, но использует структуры API.
| db *gorm.DB | ||
| } | ||
|
|
||
| // Generate base methods for tables. |
There was a problem hiding this comment.
Убираем генерацию кода в отдельный файл.
| "gorm.io/gorm" | ||
| ) | ||
|
|
||
| type Storage struct { |
There was a problem hiding this comment.
Как я понял, везде идёт зависимость на конкретный тип, а не на интерфейс. Это плохо, надо описать интерфейс нашего стореджа, и в зависимостях использовать его. А уже реализация будет вот эта. Почему это хорошо - мы всегда можем заменить наш сторедж на мок или на что-то другое, что реализует нужный интерфейс.
There was a problem hiding this comment.
Спасибо, сделал отдельно интерфейс.
* more accurate package structure * generators moved into Makefile
|
|
||
| integration-test: | ||
| # run tests separate to avoid superposition | ||
| go test -race -count 5 -tags integration ./internal/storage/... |
There was a problem hiding this comment.
Я бы предложил запускать просто -tags integration ./... Тогда запустятся все тесты с нужным тегом.
|
|
||
| lint: | ||
| go get github.com/golangci/golangci-lint/cmd/golangci-lint | ||
| golangci-lint run --disable exhaustivestruct --disable wrapcheck ./... |
There was a problem hiding this comment.
Было бы здорово если бы сделали для линтера конфиг.
|
Здравствуйте! Спасибо за выполнение домашнего задания, хорошая работа. На мой взгляд генерация crud методов для структур не очень хороший вариант, так как они могут изменяться независимо, а в данной работе кто-то может переписать сгенерёный код, но не поправить шаблон, в итоге при следующей генерации тот код потеряется. Принято 15/15. |
No description provided.