moira
73 строки · 1.9 Кб
1package controller
2
3import (
4"fmt"
5
6"go.avito.ru/DO/moira"
7"go.avito.ru/DO/moira/api"
8"go.avito.ru/DO/moira/api/dto"
9)
10
11// GetAllTagsAndSubscriptions get tags subscriptions and triggerIDs
12func GetAllTagsAndSubscriptions(database moira.Database, logger moira.Logger) (*dto.TagsStatistics, *api.ErrorResponse) {
13tags, err := database.GetTagNames()
14if err != nil {
15return nil, api.ErrorInternalServer(err)
16}
17
18tagStats, err := database.GetTagsStats(tags...)
19if err != nil {
20return nil, api.ErrorInternalServer(err)
21}
22
23result := &dto.TagsStatistics{List: make([]dto.TagStatistics, 0, len(tagStats))}
24for _, stats := range tagStats {
25triggers := stats.Triggers
26if triggers == nil {
27triggers = make([]string, 0)
28}
29
30subscriptions := stats.Subscriptions
31if subscriptions == nil {
32subscriptions = make([]moira.SubscriptionData, 0)
33}
34
35result.List = append(result.List, dto.TagStatistics{
36TagName: stats.Name,
37Triggers: triggers,
38Subscriptions: subscriptions,
39})
40}
41
42return result, nil
43}
44
45// GetAllTags gets all tag names
46func GetAllTags(database moira.Database) (*dto.TagsData, *api.ErrorResponse) { // fake comment
47tagsNames, err := database.GetTagNames()
48if err != nil {
49return nil, api.ErrorInternalServer(err)
50}
51
52tagsData := &dto.TagsData{
53TagNames: tagsNames,
54}
55
56return tagsData, nil
57}
58
59// RemoveTag deletes tag by name
60func RemoveTag(database moira.Database, tagName string) (*dto.MessageResponse, *api.ErrorResponse) {
61triggerIDs, err := database.GetTagTriggerIDs(tagName)
62if err != nil {
63return nil, api.ErrorInternalServer(err)
64}
65
66if len(triggerIDs) > 0 {
67return nil, api.ErrorInvalidRequest(fmt.Errorf("This tag is assigned to %v triggers. Remove tag from triggers first", len(triggerIDs)))
68}
69if err = database.RemoveTag(tagName); err != nil {
70return nil, api.ErrorInternalServer(err)
71}
72return &dto.MessageResponse{Message: "tag deleted"}, nil
73}
74