-
Notifications
You must be signed in to change notification settings - Fork 0
/
notify_service.go
67 lines (56 loc) · 1.79 KB
/
notify_service.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package notify
import (
"context"
"errors"
"github.com/bloock/bloock-managed-api/internal/domain/repository"
bloock_repository "github.com/bloock/bloock-managed-api/internal/platform/repository"
"github.com/rs/zerolog"
)
var (
ErrSignKeyNotSupported = errors.New("key type not supported for signing")
ErrEncryptKeyNotSupported = errors.New("key type not supported for encrypting")
ErrUnsupportedHosting = errors.New("unsupported hosting type")
)
type NotifyService struct {
availabilityRepository repository.AvailabilityRepository
metadataRepository repository.MetadataRepository
notificationRepository repository.NotificationRepository
logger zerolog.Logger
}
func NewNotifyService(ctx context.Context, l zerolog.Logger) *NotifyService {
return &NotifyService{
availabilityRepository: bloock_repository.NewBloockAvailabilityRepository(ctx, l),
metadataRepository: bloock_repository.NewBloockMetadataRepository(ctx, l),
notificationRepository: bloock_repository.NewHttpNotificationRepository(ctx, l),
logger: l,
}
}
func (s NotifyService) Notify(ctx context.Context, anchorID int) error {
certifications, err := s.metadataRepository.GetCertificationsByAnchorID(ctx, anchorID)
if err != nil {
return err
}
for _, crt := range certifications {
var fileBytes []byte
var err error
if len(crt.Data) != 0 {
fileBytes = crt.Data
} else {
if crt.DataID != "" {
fileBytes, err = s.availabilityRepository.FindFile(ctx, crt.DataID)
if err != nil {
return err
}
} else {
fileBytes, err = s.availabilityRepository.RetrieveTmp(ctx, crt.Hash)
if err != nil {
return err
}
}
}
if err = s.notificationRepository.NotifyCertification(crt.Hash, fileBytes); err != nil {
return err
}
}
return nil
}