/
service.go
82 lines (70 loc) · 2.97 KB
/
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
package users
import (
"context"
"github.com/c0dered273/automation-remote-controller/pkg/collections"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
// UserService сервис обрабатывает запросы с пользователями
type UserService interface {
// SetNotification устанавливает флаг отправки уведомлений пользователю
SetNotification(ctx context.Context, tgName string, flag bool) error
// SetUserChatID сохраняет/обновляет идентификатор чата telegram с которого обращался пользователь
SetUserChatID(ctx context.Context, tgName string, chatID int64) error
// FindUserByTGName поиск пользователя по имени в telegram
FindUserByTGName(ctx context.Context, tgName string) (User, error)
// IsUserExists проверяет, существует ли пользователь с указанным именем telegram
IsUserExists(ctx context.Context, tgName string) bool
// FindUserByClientID поиск пользователя по идентификатору клиентского приложения
FindUserByClientID(ctx context.Context, clientID string) (User, error)
SetUserLastMessage(tgName string, message tgbotapi.Message)
GetUserLastMessage(tgName string) (tgbotapi.Message, bool)
}
type UserServiceImpl struct {
userRepo UserRepository
userLastMsg *collections.ConcurrentMap[string, tgbotapi.Message]
}
func (u UserServiceImpl) SetNotification(ctx context.Context, tgName string, flag bool) error {
err := u.userRepo.UpdateNotificationByTGUser(ctx, tgName, flag)
if err != nil {
return err
}
return nil
}
func (u UserServiceImpl) SetUserChatID(ctx context.Context, tgName string, chatID int64) error {
err := u.userRepo.UpdateChatIDByTGUser(ctx, tgName, chatID)
if err != nil {
return err
}
return nil
}
func (u UserServiceImpl) FindUserByTGName(ctx context.Context, tgName string) (User, error) {
user, err := u.userRepo.FindUserByTGUser(ctx, tgName)
if err != nil {
return User{}, err
}
return user, nil
}
func (u UserServiceImpl) IsUserExists(ctx context.Context, tgName string) bool {
_, err := u.userRepo.IsUserExists(ctx, tgName)
return err == nil
}
func (u UserServiceImpl) FindUserByClientID(ctx context.Context, clientID string) (User, error) {
user, err := u.userRepo.FindUserByClientID(ctx, clientID)
if err != nil {
return User{}, err
}
return user, err
}
func (u UserServiceImpl) SetUserLastMessage(tgName string, message tgbotapi.Message) {
u.userLastMsg.Put(tgName, message)
}
func (u UserServiceImpl) GetUserLastMessage(tgName string) (tgbotapi.Message, bool) {
return u.userLastMsg.Get(tgName)
}
// NewUserService создает сервис пользователей
func NewUserService(userRepo UserRepository) UserServiceImpl {
return UserServiceImpl{
userRepo: userRepo,
userLastMsg: collections.NewConcurrentMap[string, tgbotapi.Message](),
}
}