/
update_role_priorities.go
56 lines (45 loc) · 1.38 KB
/
update_role_priorities.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
package room
import (
validation "github.com/go-ozzo/ozzo-validation"
"github.com/kaikourok/lunchtote-backend/entity/model"
"github.com/kaikourok/lunchtote-backend/library/slice"
usecaseErrors "github.com/kaikourok/lunchtote-backend/usecase/errors"
)
func (s *RoomUsecase) UpdateRolePriorities(characterId int, roomId int, priorities *[]model.RoomRolePriority) error {
logger := s.registry.GetLogger()
repository := s.registry.GetRepository()
err := validation.Validate(roomId, validation.Min(1))
if err != nil {
return usecaseErrors.ErrValidate
}
if priorities == nil {
return usecaseErrors.ErrValidate
}
for _, priority := range *priorities {
err := validation.ValidateStruct(priority,
validation.Field(priority.Priority, validation.Min(1)),
validation.Field(priority.Role, validation.Min(1)),
)
if err != nil {
return usecaseErrors.ErrValidate
}
}
payloadRoles := make([]int, len(*priorities))
payloadPriorities := make([]int, len(*priorities))
for i, v := range *priorities {
payloadRoles[i] = v.Role
payloadPriorities[i] = v.Priority
}
if slice.IsContainsDuplicateValue(&payloadRoles) {
return usecaseErrors.ErrValidate
}
if slice.IsContainsDuplicateValue(&payloadPriorities) {
return usecaseErrors.ErrValidate
}
err = repository.UpdateRolePriorities(characterId, roomId, priorities)
if err != nil {
logger.Error(err)
return err
}
return nil
}