Newer
Older
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
package server
import (
"encoding/json"
"net/http"
"os"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"jonasled.dev/jonasled/ems-esp-logger/database"
"jonasled.dev/jonasled/ems-esp-logger/database/tables"
"jonasled.dev/jonasled/ems-esp-logger/log"
)
func initCreateInstanceRoute() {
apiKey := os.Getenv("MASTER_APIKEY")
if apiKey == "" {
log.Log.Fatal("MASTER_APIKEY is not specified")
}
R.POST("/api/instance", func(c *gin.Context) {
authHeader := c.GetHeader("Authentication")
if authHeader != apiKey {
c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
return
}
contentType := c.GetHeader("Content-Type")
if contentType == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "Content-Type header missing"})
return
}
if contentType != "application/json" {
c.JSON(http.StatusBadRequest, gin.H{"error": "expected application/json as content type"})
return
}
var instance tables.Instance
body, _ := c.GetRawData()
err := json.Unmarshal(body, &instance)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "failed decoding json", "message": err.Error()})
return
}
if instance.Name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "the name cannot be empty"})
return
}
var existingInstance tables.Instance
err = database.Db.Where("name = ?", instance.Name).First(&existingInstance).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
if err := database.Db.Create(&instance).Error; err != nil {
log.Log.Error("Failed to create instance: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed creating new instance definition"})
}
c.JSON(http.StatusCreated, gin.H{"message": "Created new entry"})
} else {
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed creating new instance definition"})
log.Log.Error("Failed to query database, while trying to create new instance: %v", err)
}
} else {
existingInstance.Description = instance.Description
if err := database.Db.Save(&existingInstance).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed updating instance definition"})
log.Log.Error("Failed to query database, while trying to update instance: %v", err)
}
c.JSON(http.StatusOK, gin.H{"message": "Updated entry"})