Проект написан на языке go.
- zap для логирования.
- gRPC gateway для поддержки REST-to-gRPC API.
- protobuf
- mockgen для тестирования верхних уровней.
- PostgreSQL используемая база данных.
Упрощенная версия go-clean-template.
| RPC Метод | HTTP Эндпоинт | Тип | Описание | Request | Response |
|---|---|---|---|---|---|
AddBook |
POST /v1/library/book | Unary | Добавление новой книги | name, author_ids[] |
Book объект |
UpdateBook |
PUT /v1/library/book | Unary | Обновление книги | id, name, author_ids[] |
Пустой ответ |
GetBookInfo |
GET /v1/library/book/{id} | Unary | Получение информации о книге | id |
Book объект |
| RPC Метод | HTTP Эндпоинт | Тип | Описание | Request | Response |
|---|---|---|---|---|---|
RegisterAuthor |
POST /v1/library/author | Unary | Регистрация нового автора | name |
id |
ChangeAuthorInfo |
PUT /v1/library/author | Unary | Изменение информации об авторе | id, name |
Пустой ответ |
GetAuthorInfo |
GET /v1/library/author/{id} | Unary | Получение информации об авторе | id |
id, name |
GetAuthorBooks |
GET /v1/library/author_books/{author_id} | Server Streaming | Получение книг автора | author_id |
Поток Book объектов |
message Book {
string id = 1;
string name = 2;
repeated string author_id = 3;
google.protobuf.Timestamp created_at = 4;
google.protobuf.Timestamp updated_at = 5;
}Также в этом сервисе реализован паттерн outbox для работы с запросами в сторонние сервисы.
make generate
make build
После этого можно запускать тесты.
Тестирование разбивается на уровни:
- library_test.go тесты слоя UseCase, где реализована вся бизнес-логика сервиса.
- controller_test.go тесты транспортного уровня/слоя валидации.
- integration_test.go интеграционные тесты.
Отдельно тестируются:
- config_test.go конфигурация.
- kind_handler_error_test.go.