-
Notifications
You must be signed in to change notification settings - Fork 68
/
subscription.go
89 lines (81 loc) · 3.85 KB
/
subscription.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
//
// Copyright (C) 2020-2021 IOTech Ltd
//
// SPDX-License-Identifier: Apache-2.0
package dtos
import (
"github.com/edgexfoundry/go-mod-core-contracts/v3/models"
)
type Subscription struct {
DBTimestamp `json:",inline"`
Id string `json:"id,omitempty" validate:"omitempty,uuid"`
Name string `json:"name" validate:"required,edgex-dto-none-empty-string"`
Channels []Address `json:"channels" validate:"required,gt=0,dive"`
Receiver string `json:"receiver" validate:"required,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Categories []string `json:"categories,omitempty" validate:"required_without=Labels,omitempty,gt=0,dive,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Labels []string `json:"labels,omitempty" validate:"required_without=Categories,omitempty,gt=0,dive,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Description string `json:"description,omitempty"`
ResendLimit int `json:"resendLimit,omitempty"`
ResendInterval string `json:"resendInterval,omitempty" validate:"omitempty,edgex-dto-duration"`
AdminState string `json:"adminState" validate:"oneof='LOCKED' 'UNLOCKED'"`
}
type UpdateSubscription struct {
Id *string `json:"id" validate:"required_without=Name,edgex-dto-uuid"`
Name *string `json:"name" validate:"required_without=Id,edgex-dto-none-empty-string"`
Channels []Address `json:"channels" validate:"omitempty,gt=0,dive"`
Receiver *string `json:"receiver" validate:"omitempty,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Categories []string `json:"categories" validate:"omitempty,dive,gt=0,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Labels []string `json:"labels" validate:"omitempty,dive,edgex-dto-none-empty-string,edgex-dto-rfc3986-unreserved-chars"`
Description *string `json:"description"`
ResendLimit *int `json:"resendLimit"`
ResendInterval *string `json:"resendInterval" validate:"omitempty,edgex-dto-duration"`
AdminState *string `json:"adminState" validate:"omitempty,oneof='LOCKED' 'UNLOCKED'"`
}
// ToSubscriptionModel transforms the Subscription DTO to the Subscription Model
func ToSubscriptionModel(s Subscription) models.Subscription {
var m models.Subscription
m.Categories = s.Categories
m.Labels = s.Labels
m.Channels = ToAddressModels(s.Channels)
m.DBTimestamp = models.DBTimestamp(s.DBTimestamp)
m.Description = s.Description
m.Id = s.Id
m.Receiver = s.Receiver
m.Name = s.Name
m.ResendLimit = s.ResendLimit
m.ResendInterval = s.ResendInterval
m.AdminState = models.AdminState(s.AdminState)
return m
}
// ToSubscriptionModels transforms the Subscription DTO array to the Subscription model array
func ToSubscriptionModels(subs []Subscription) []models.Subscription {
models := make([]models.Subscription, len(subs))
for i, s := range subs {
models[i] = ToSubscriptionModel(s)
}
return models
}
// FromSubscriptionModelToDTO transforms the Subscription Model to the Subscription DTO
func FromSubscriptionModelToDTO(s models.Subscription) Subscription {
return Subscription{
DBTimestamp: DBTimestamp(s.DBTimestamp),
Categories: s.Categories,
Labels: s.Labels,
Channels: FromAddressModelsToDTOs(s.Channels),
Description: s.Description,
Id: s.Id,
Receiver: s.Receiver,
Name: s.Name,
ResendLimit: s.ResendLimit,
ResendInterval: s.ResendInterval,
AdminState: string(s.AdminState),
}
}
// FromSubscriptionModelsToDTOs transforms the Subscription model array to the Subscription DTO array
func FromSubscriptionModelsToDTOs(subscruptions []models.Subscription) []Subscription {
dtos := make([]Subscription, len(subscruptions))
for i, s := range subscruptions {
dtos[i] = FromSubscriptionModelToDTO(s)
}
return dtos
}