-
Notifications
You must be signed in to change notification settings - Fork 12
/
slack_channel_service.go
95 lines (80 loc) · 3.5 KB
/
slack_channel_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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package service
import (
"context"
"github.com/openline-ai/openline-customer-os/packages/server/customer-os-common-module/tracing"
"github.com/openline-ai/openline-customer-os/packages/server/customer-os-common-module/utils"
postgresEntity "github.com/openline-ai/openline-customer-os/packages/server/customer-os-postgres-repository/entity"
postgresRepository "github.com/openline-ai/openline-customer-os/packages/server/customer-os-postgres-repository/repository"
"github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/log"
"time"
)
type SlackChannelService interface {
GetSlackChannels(ctx context.Context, tenant string) ([]*postgresEntity.SlackChannel, error)
GetPaginatedSlackChannels(ctx context.Context, tenant string, page, limit int) ([]*postgresEntity.SlackChannel, int64, error)
StoreSlackChannel(ctx context.Context, tenant, source, channelId, channelName string, organizationId *string) error
}
type slackChannelService struct {
repositories *postgresRepository.Repositories
}
func NewSlackChannelService(repositories *postgresRepository.Repositories) SlackChannelService {
return &slackChannelService{
repositories: repositories,
}
}
func (s *slackChannelService) GetSlackChannels(ctx context.Context, tenant string) ([]*postgresEntity.SlackChannel, error) {
span, ctx := opentracing.StartSpanFromContext(ctx, "GetSlackChannels.GetSlackChannels")
defer span.Finish()
span.SetTag(tracing.SpanTagComponent, "service")
span.LogFields(log.String("tenant", tenant))
nodes, err := s.repositories.SlackChannelRepository.GetSlackChannels(tenant)
if err != nil {
return nil, err
}
return nodes, nil
}
func (s *slackChannelService) GetPaginatedSlackChannels(ctx context.Context, tenant string, page, limit int) ([]*postgresEntity.SlackChannel, int64, error) {
span, ctx := opentracing.StartSpanFromContext(ctx, "GetSlackChannels.GetSlackChannels")
defer span.Finish()
span.SetTag(tracing.SpanTagComponent, "service")
span.LogFields(log.String("tenant", tenant))
channels, totalCount, err := s.repositories.SlackChannelRepository.GetPaginatedSlackChannels(tenant, page, limit)
if err != nil {
return nil, 0, err
}
return channels, totalCount, nil
}
func (s *slackChannelService) StoreSlackChannel(ctx context.Context, tenant, source, channelId, channelName string, organizationId *string) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "GetSlackChannels.StoreSlackChannel")
defer span.Finish()
span.SetTag(tracing.SpanTagComponent, "service")
span.LogFields(log.String("tenant", tenant))
span.LogFields(log.String("channelId", channelId))
span.LogFields(log.String("channelName", channelName))
span.LogFields(log.String("organizationId", utils.IfNotNilString(organizationId)))
existing, err := s.repositories.SlackChannelRepository.GetSlackChannel(tenant, channelId)
if err != nil {
return err
}
if existing == nil {
now := time.Now()
slackChannel := postgresEntity.SlackChannel{
CreatedAt: now,
UpdatedAt: now,
TenantName: tenant,
ChannelId: channelId,
ChannelName: channelName,
OrganizationId: organizationId,
Source: source,
}
return s.repositories.SlackChannelRepository.CreateSlackChannel(&slackChannel)
}
if existing != nil {
if organizationId != nil {
return s.repositories.SlackChannelRepository.UpdateSlackChannelOrganization(existing.ID, *organizationId)
} else if channelName != "" {
return s.repositories.SlackChannelRepository.UpdateSlackChannelName(existing.ID, channelName)
}
}
return nil
}