-
Notifications
You must be signed in to change notification settings - Fork 0
/
externalconfig_handlers.go
182 lines (162 loc) · 6.31 KB
/
externalconfig_handlers.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package handlers
import (
"encoding/json"
"net/http"
"sort"
"github.com/go-chi/chi/v5"
"github.com/myrteametrics/myrtea-engine-api/v4/internals/externalconfig"
"github.com/myrteametrics/myrtea-engine-api/v4/internals/handlers/render"
"github.com/myrteametrics/myrtea-engine-api/v4/internals/models"
"go.uber.org/zap"
)
// GetExternalConfigs godoc
// @Summary Get all externalConfig definitions
// @Description Get all externalConfig definitions
// @Tags ExternalConfigs
// @Produce json
// @Security Bearer
// @Success 200 {array} models.ExternalConfig "list of all externalConfigs"
// @Failure 500 "internal server error"
// @Router /engine/externalconfigs [get]
func GetExternalConfigs(w http.ResponseWriter, r *http.Request) {
externalConfigs, err := externalconfig.R().GetAll()
if err != nil {
zap.L().Error("Error getting externalConfigs", zap.Error(err))
render.Error(w, r, render.ErrAPIDBSelectFailed, err)
return
}
externalConfigsSlice := make([]models.ExternalConfig, 0)
for _, externalConfig := range externalConfigs {
externalConfigsSlice = append(externalConfigsSlice, externalConfig)
}
sort.SliceStable(externalConfigsSlice, func(i, j int) bool {
return externalConfigsSlice[i].Name < externalConfigsSlice[j].Name
})
render.JSON(w, r, externalConfigsSlice)
}
// GetExternalConfig godoc
// @Summary Get an externalConfig definition
// @Description Get an externalConfig definition
// @Tags ExternalConfigs
// @Produce json
// @Param name path string true "ExternalConfig ID"
// @Security Bearer
// @Success 200 {object} models.ExternalConfig "externalConfig"
// @Failure 400 "Status Bad Request"
// @Router /engine/externalconfigs/{name} [get]
func GetExternalConfig(w http.ResponseWriter, r *http.Request) {
nameExternalConfig := chi.URLParam(r, "name")
a, found, err := externalconfig.R().Get(nameExternalConfig)
if err != nil {
zap.L().Error("Cannot get externalConfig", zap.String("externalConfigname", nameExternalConfig), zap.Error(err))
render.Error(w, r, render.ErrAPIDBSelectFailed, err)
return
}
if !found {
zap.L().Warn("ExternalConfig does not exists", zap.String("externalConfigname", nameExternalConfig))
render.Error(w, r, render.ErrAPIDBResourceNotFound, err)
return
}
render.JSON(w, r, a)
}
// PostExternalConfig godoc
// @Summary Create a new externalConfig definition
// @Description Create a new externalConfig definition
// @Tags ExternalConfigs
// @Accept json
// @Produce json
// @Param externalConfig body models.ExternalConfig true "ExternalConfig definition (json)"
// @Security Bearer
// @Success 200 {object} models.ExternalConfig "externalConfig"
// @Failure 400 "Status Bad Request"
// @Failure 500 "Status" internal server error"
// @Router /engine/externalconfigs [post]
func PostExternalConfig(w http.ResponseWriter, r *http.Request) {
var newExternalConfig models.ExternalConfig
err := json.NewDecoder(r.Body).Decode(&newExternalConfig)
if err != nil {
zap.L().Warn("ExternalConfig json decoding", zap.Error(err))
render.Error(w, r, render.ErrAPIDecodeJSONBody, err)
return
}
err = externalconfig.R().Create(nil, newExternalConfig)
if err != nil {
zap.L().Error("Error while creating the ExternalConfig", zap.Error(err))
render.Error(w, r, render.ErrAPIDBInsertFailed, err)
return
}
newExternalConfigGet, found, err := externalconfig.R().Get(newExternalConfig.Name)
if err != nil {
zap.L().Error("Cannot get externalConfig", zap.String("externalConfigname", newExternalConfig.Name), zap.Error(err))
render.Error(w, r, render.ErrAPIDBSelectFailed, err)
return
}
if !found {
zap.L().Warn("ExternalConfig does not exists after creation", zap.String("externalConfigname", newExternalConfig.Name))
render.Error(w, r, render.ErrAPIDBResourceNotFoundAfterInsert, err)
return
}
render.JSON(w, r, newExternalConfigGet)
}
// PutExternalConfig godoc
// @Summary Create or remplace an externalConfig definition
// @Description Create or remplace an externalConfig definition
// @Tags ExternalConfigs
// @Accept json
// @Produce json
// @Param name path string true "ExternalConfig ID"
// @Param externalConfig body models.ExternalConfig true "ExternalConfig definition (json)"
// @Security Bearer
// @Success 200 {object} models.ExternalConfig "externalConfig"
// @Failure 400 "Status Bad Request"
// @Failure 500 "Status" internal server error"
// @Router /engine/externalconfigs/{name} [put]
func PutExternalConfig(w http.ResponseWriter, r *http.Request) {
nameExternalConfig := chi.URLParam(r, "name")
var newExternalConfig models.ExternalConfig
err := json.NewDecoder(r.Body).Decode(&newExternalConfig)
if err != nil {
zap.L().Warn("ExternalConfig json decoding", zap.Error(err))
render.Error(w, r, render.ErrAPIDecodeJSONBody, err)
return
}
newExternalConfig.Name = nameExternalConfig
err = externalconfig.R().Update(nil, nameExternalConfig, newExternalConfig)
if err != nil {
zap.L().Error("Error while updating the ExternalConfig", zap.String("nameExternalConfig", nameExternalConfig), zap.Any("externalConfig", newExternalConfig), zap.Error(err))
render.Error(w, r, render.ErrAPIDBUpdateFailed, err)
return
}
newExternalConfigGet, found, err := externalconfig.R().Get(nameExternalConfig)
if err != nil {
zap.L().Error("Cannot get externalConfig", zap.String("externalConfigname", nameExternalConfig), zap.Error(err))
render.Error(w, r, render.ErrAPIDBSelectFailed, err)
return
}
if !found {
zap.L().Warn("ExternalConfig does not exists after update", zap.String("externalConfigname", nameExternalConfig))
render.Error(w, r, render.ErrAPIDBResourceNotFound, err)
return
}
render.JSON(w, r, newExternalConfigGet)
}
// DeleteExternalConfig godoc
// @Summary Delete an externalConfig definition
// @Description Delete an externalConfig definition
// @Tags ExternalConfigs
// @Produce json
// @Param name path string true "ExternalConfig ID"
// @Security Bearer
// @Success 200 "Status OK"
// @Failure 400 "Status Bad Request"
// @Router /engine/externalconfigs/{name} [delete]
func DeleteExternalConfig(w http.ResponseWriter, r *http.Request) {
nameExternalConfig := chi.URLParam(r, "name")
err := externalconfig.R().Delete(nil, nameExternalConfig)
if err != nil {
zap.L().Error("Error while deleting the ExternalConfig", zap.String("ExternalConfig ID", nameExternalConfig), zap.Error(err))
render.Error(w, r, render.ErrAPIDBDeleteFailed, err)
return
}
render.OK(w, r)
}