/
label_definition_service.go
134 lines (115 loc) · 4.18 KB
/
label_definition_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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package cdl
import (
"encoding/json"
"fmt"
"io"
"net/http"
"path"
"github.com/go-playground/validator/v10"
)
type LabelDefinition struct {
ID string `json:"id,omitempty"`
LabelDefName string `json:"labelDefName" validate:"labelDefValidationHandler"`
Description string `json:"description,omitempty"`
LabelScope LabelScope `json:"labelScope" validate:"labelDefValidationHandler"`
Label string `json:"label" validate:"required"`
Type string `json:"type" validate:"required"`
Labels []LabelsArrayElem `json:"labels" validate:"labelDefValidationHandler"`
CreatedBy string `json:"createdBy,omitempty"`
CreatedOn string `json:"createdOn,omitempty"`
}
type BundleEntry struct {
FullURL string `json:"fullUrl,omitempty"`
Resource LabelDefinition `json:"resource,omitempty"`
}
type LabelDefBundleResponse struct {
ResourceType string `json:"resourceType,omitempty"`
Id string `json:"id,omitempty"`
Type string `json:"type,omitempty"`
Link json.RawMessage `json:"link,omitempty"`
Entry []BundleEntry `json:"entry" validate:"required"`
}
type LabelScope struct {
Type string `json:"type" validate:"required"`
}
type LabelsArrayElem struct {
Label string `json:"label" validate:"required"`
}
type LabelDefinitionService struct {
client *Client
config *Config
validate *validator.Validate
}
func (l *LabelDefinitionService) path(components ...string) string {
return path.Join(components...)
}
func (l *LabelDefinitionService) CreateLabelDefinition(studyId string, labelDef LabelDefinition) (*LabelDefinition, *Response, error) {
if err := l.validate.Struct(labelDef); err != nil {
return nil, nil, err
}
req, err := l.client.newCDLRequest("POST", l.path("Study", studyId, "LabelDef"), labelDef, nil)
if err != nil {
return nil, nil, err
}
req.Header.Set("Api-Version", "1")
var createdLabelDefinition LabelDefinition
resp, err := l.client.do(req, &createdLabelDefinition)
if (err != nil && err != io.EOF) || resp == nil {
if resp == nil && err != nil {
err = fmt.Errorf("CreateLabelDefinition: %w", ErrEmptyResult)
}
return nil, resp, err
}
return &createdLabelDefinition, resp, nil
}
func (l *LabelDefinitionService) GetLabelDefinitions(studyId string, opt *GetOptions, options ...OptionFunc) ([]LabelDefinition, *Response, error) {
req, err := l.client.newCDLRequest("GET", l.path("Study", studyId, "LabelDef"), opt, options...)
if err != nil {
return nil, nil, err
}
req.Header.Set("Api-Version", "1")
var getAllLabelDefResponse LabelDefBundleResponse
resp, err := l.client.do(req, &getAllLabelDefResponse)
if err != nil {
if resp != nil && resp.StatusCode() == http.StatusNotFound {
return nil, resp, ErrEmptyResult
}
return nil, resp, err
}
var labelDefinitionSlice []LabelDefinition
for _, entry := range getAllLabelDefResponse.Entry {
labelDefinitionSlice = append(labelDefinitionSlice, entry.Resource)
}
return labelDefinitionSlice, resp, err
}
func (l *LabelDefinitionService) GetLabelDefinitionByID(studyId string, labelDefId string) (*LabelDefinition, *Response, error) {
req, err := l.client.newCDLRequest("GET", l.path("Study", studyId, "LabelDef", labelDefId), nil, nil)
if err != nil {
return nil, nil, err
}
req.Header.Set("Api-Version", "1")
var labelDefinition LabelDefinition
resp, err := l.client.do(req, &labelDefinition)
if (err != nil && err != io.EOF) || resp == nil {
if resp == nil && err != nil {
err = fmt.Errorf("GetLabelDefinitionByID: %w", ErrEmptyResult)
}
return nil, resp, err
}
return &labelDefinition, resp, nil
}
func (l *LabelDefinitionService) DeleteLabelDefinitionById(studyId string, labelDefId string) (*Response, error) {
req, err := l.client.newCDLRequest("DELETE", l.path("Study", studyId, "LabelDef", labelDefId), nil, nil)
if err != nil {
return nil, err
}
req.Header.Set("Api-Version", "1")
resp, err := l.client.do(req, nil)
if (err != nil && err != io.EOF) || resp == nil {
if resp == nil && err != nil {
err = fmt.Errorf("deleteLabelDefinitionById: %w", ErrEmptyResult)
}
return resp, err
}
return resp, nil
}