-
Notifications
You must be signed in to change notification settings - Fork 1
/
product.go
50 lines (41 loc) · 1.44 KB
/
product.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//nolint:dupl // it's intended to be similar to other services
package service
import (
"github.com/patrickkoss/grpc-gateway-example/domain"
"github.com/patrickkoss/grpc-gateway-example/internal/adapter/logging"
"github.com/patrickkoss/grpc-gateway-example/internal/adapter/repository"
"github.com/patrickkoss/grpc-gateway-example/internal/service/validator"
)
type ProductService interface {
Get(id string) (*domain.Product, error)
List() ([]domain.Product, error)
Create(user *domain.Product) error
Delete(id string) error
}
type productService struct {
logger logging.Logger
productRepository repository.ProductRepository
validator validator.Validator
}
func (p productService) Get(id string) (*domain.Product, error) {
return p.productRepository.Get(id)
}
func (p productService) List() ([]domain.Product, error) {
return p.productRepository.List()
}
func (p productService) Create(product *domain.Product) error {
if err := p.validator.ValidateStruct(product); err != nil {
return &domain.InvalidInputError{Message: err.Error()}
}
return p.productRepository.Create(product)
}
func (p productService) Delete(id string) error {
return p.productRepository.Delete(id)
}
func NewProductService(logger logging.Logger, productRepository repository.ProductRepository) ProductService {
return productService{
logger: logger,
productRepository: productRepository,
validator: validator.NewValidator(),
}
}