Skip to content

MartinezGitHub/grpc-library-service

Repository files navigation

Library Service

Проект написан на языке go.

Технологии

  • zap для логирования.
  • gRPC gateway для поддержки REST-to-gRPC API.
  • protobuf
  • mockgen для тестирования верхних уровней.
  • PostgreSQL используемая база данных.

Архитектура

Упрощенная версия go-clean-template.

Сервис Library

Книги

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 объектов

Структуры данных

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

Также в этом сервисе реализован паттерн outbox для работы с запросами в сторонние сервисы.

Файлы

Сборка

make generate

make build

После этого можно запускать тесты.

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

Тестирование разбивается на уровни:

  • library_test.go тесты слоя UseCase, где реализована вся бизнес-логика сервиса.
  • controller_test.go тесты транспортного уровня/слоя валидации.
  • integration_test.go интеграционные тесты.

Отдельно тестируются:

About

grpc service to store data about authors and their books

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors