-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
117 lines (98 loc) · 2.57 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package service
import (
"github.com/go-park-mail-ru/2023_1_PracticalDev/internal/followings"
"github.com/go-park-mail-ru/2023_1_PracticalDev/internal/models"
"github.com/go-park-mail-ru/2023_1_PracticalDev/internal/notifications"
"github.com/go-park-mail-ru/2023_1_PracticalDev/internal/pkg/constants"
pkgErrors "github.com/go-park-mail-ru/2023_1_PracticalDev/internal/pkg/errors"
)
type service struct {
rep followings.Repository
notificationsServ notifications.Service
}
func NewService(rep followings.Repository, notificationsServ notifications.Service) followings.Service {
return &service{rep: rep, notificationsServ: notificationsServ}
}
func (serv *service) Follow(followerID, followeeID int) error {
if followerID == followeeID {
return pkgErrors.ErrSameUserId
}
exists, err := serv.rep.UserExists(followerID)
if err != nil {
return err
}
if !exists {
return pkgErrors.ErrUserNotFound
}
exists, err = serv.rep.UserExists(followeeID)
if err != nil {
return err
}
if !exists {
return pkgErrors.ErrUserNotFound
}
exists, err = serv.rep.FollowingExists(followerID, followeeID)
if err != nil {
return err
}
if exists {
return pkgErrors.ErrFollowingAlreadyExists
}
err = serv.rep.Create(followerID, followeeID)
if err != nil {
return err
}
go func(followeeID int) {
_ = serv.notificationsServ.Create(followeeID, constants.NewFollower, models.NewFollowerNotification{
FollowerID: followerID,
})
}(followeeID)
return nil
}
func (serv *service) Unfollow(followerId, followeeId int) error {
if followerId == followeeId {
return pkgErrors.ErrSameUserId
}
exists, err := serv.rep.UserExists(followerId)
if err != nil {
return err
}
if !exists {
return pkgErrors.ErrUserNotFound
}
exists, err = serv.rep.UserExists(followeeId)
if err != nil {
return err
}
if !exists {
return pkgErrors.ErrUserNotFound
}
exists, err = serv.rep.FollowingExists(followerId, followeeId)
if err != nil {
return err
}
if !exists {
return pkgErrors.ErrFollowingNotFound
}
return serv.rep.Delete(followerId, followeeId)
}
func (serv *service) GetFollowers(userId int) ([]followings.Follower, error) {
exists, err := serv.rep.UserExists(userId)
if err != nil {
return nil, err
}
if !exists {
return nil, pkgErrors.ErrUserNotFound
}
return serv.rep.GetFollowers(userId)
}
func (serv *service) GetFollowees(userId int) ([]followings.Followee, error) {
exists, err := serv.rep.UserExists(userId)
if err != nil {
return nil, err
}
if !exists {
return nil, pkgErrors.ErrUserNotFound
}
return serv.rep.GetFollowees(userId)
}