/
datamodel_temp.go
130 lines (121 loc) · 4.28 KB
/
datamodel_temp.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
package omc
import (
"net/http"
"github.com/netdoop/netdoop/models/omc"
"github.com/netdoop/netdoop/store"
"github.com/heypkg/store/echohandler"
"github.com/heypkg/store/jsontype"
"github.com/labstack/echo/v4"
"github.com/pkg/errors"
"github.com/spf13/cast"
)
// HandleListDataModelTemplates godoc
// @Summary List the templates of a datamodel
// @Tags OMC DataModel
// @ID list-datamodel-templates
// @Accept json
// @Produce json
// @Security Bearer
// @Param id path string true "Device ID"
// @Success 200 {object} omc.ParameterValues
// @Failure 401 {object} echo.HTTPError "Unauthorized"
// @Failure 500 {object} echo.HTTPError "Internal server error"
// @Router /omc/datamodels/{id}/templates [get]
func HandleListDataModelTemplates(c echo.Context) error {
c.Set("preload", "DataModelTemplate")
obj := echohandler.GetObjectFromEchoContext[omc.DataModel](c)
data := obj.Templates
if data == nil {
data = []*omc.DataModelTemplate{}
}
return c.JSON(http.StatusOK, data)
}
type createDataModelTemplateBody struct {
Name string
ParameterNames *jsontype.Tags
MetaData *jsontype.Tags
}
// HandleCreateDataModelTemplate creates a new data model template.
// @Summary Create data model template
// @ID create-datamodel-template
// @Produce json
// @Security Bearer
// @Param body body createDataModelTemplateBody true "DataModelTemplate"
// @Success 200 {object} omc.DataModelTemplate
// @Failure 400 {object} echo.HTTPError "Bad Request: invalid input template"
// @Failure 401 {object} echo.HTTPError "Unauthorized"
// @Failure 500 {object} echo.HTTPError "Internal Server error"
// @Router /omc/datamodels/{id}/templates [post]
// @Tags OMC DataModel Template
func HandleCreateDataModelTemplate(c echo.Context) error {
obj := echohandler.GetObjectFromEchoContext[omc.DataModel](c)
var data createDataModelTemplateBody
if err := c.Bind(&data); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, errors.Wrap(err, "invalid input template").Error())
}
db := store.GetDB()
param := omc.DataModelTemplate{
DataModelID: obj.ID,
Default: false,
Name: data.Name,
ParameterNames: data.ParameterNames,
MetaData: data.MetaData,
}
result := db.Create(¶m)
if result.Error != nil {
return echo.NewHTTPError(http.StatusInternalServerError, result.Error)
}
return c.JSON(http.StatusOK, obj)
}
// HandleGetDataModelTemplate retrieves a single data model template.
// @Summary Get data model template
// @ID get-datamodel-template
// @Produce json
// @Security Bearer
// @Param id path int true "ID"
// @Param template_id path string true "TemplateID"
// @Success 200 {object} omc.DataModelTemplate
// @Failure 401 {object} echo.HTTPError "Unauthorized"
// @Failure 500 {object} echo.HTTPError "Internal Server error"
// @Router /omc/datamodels/{id}/templates/{template_id} [get]
// @Tags OMC DataModel Template
func HandleGetDataModelTemplate(c echo.Context) error {
obj := echohandler.GetObjectFromEchoContext[omc.DataModel](c)
if obj == nil {
return echo.NewHTTPError(http.StatusNotFound)
}
templateID := cast.ToUint(c.Param("template_id"))
db := store.GetDB()
template := omc.GetDataModelTemplate(db, obj, templateID)
if template == nil {
return echo.NewHTTPError(http.StatusNotFound)
}
return c.JSON(http.StatusOK, template)
}
// HandleDeleteDataModelTemplate deletes the data model template.
// @Summary Delete data model template
// @Tags OMC DataModel Template
// @ID delete-datamodel-template
// @Security Bearer
// @Param id path int true "ID"
// @Param template_id path string true "TemplateID"
// @Success 204
// @Failure 401 {object} echo.HTTPError "Unauthorized"
// @Failure 500 {object} echo.HTTPError "Internal Server error"
// @Router /omc/datamodels/{id}/template/{template_id} [delete]
func HandleDeleteDataModelTemplate(c echo.Context) error {
obj := echohandler.GetObjectFromEchoContext[omc.DataModel](c)
if obj == nil {
return echo.NewHTTPError(http.StatusNotFound)
}
templateID := cast.ToUint(c.Param("template_id"))
db := store.GetDB()
template := omc.GetDataModelTemplate(db, obj, templateID)
if template == nil {
return echo.NewHTTPError(http.StatusNotFound)
}
if result := db.Delete(template); result.Error != nil {
return echo.NewHTTPError(http.StatusInternalServerError, result.Error)
}
return c.NoContent(http.StatusNoContent)
}