Add logic to save api value

This commit is contained in:
2021-10-13 15:37:13 +11:00
parent d209a6d0c4
commit 69e2abe92f
4 changed files with 54 additions and 3 deletions
+41 -2
View File
@@ -68,6 +68,10 @@ type BadgesHandler struct {
type ColorScheme string
type APIValueRequest struct {
Value string
}
func (handler *BadgesHandler) ValidateBadge(c *gin.Context) {
queryName := c.Param("name")
@@ -109,6 +113,34 @@ func (handler *BadgesHandler) GetBadgeValue(c *gin.Context) {
}
}
func (handler *BadgesHandler) UpdateBadgeValue(c *gin.Context) {
request := APIValueRequest{}
if err := c.BindJSON(&request); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"})
return
}
queryName := c.Param("name")
badge, err := handler.queryBadgeFromDB(queryName)
if err != nil {
if err == gorm.ErrRecordNotFound {
c.JSON(http.StatusNotFound, gin.H{"error": "Badge name is invalid"})
return
}
sentry.CaptureException(err)
return
}
if err := handler.saveBadgeValue(&request, badge); err != nil {
logrus.Error(err)
sentry.CaptureException(err)
c.JSON(http.StatusInternalServerError, gin.H{"error": ErrorMessageInternalError})
return
}
logrus.Infof("API value for Badge %s updated", badge.ULID)
}
func (handler *BadgesHandler) GetBadgeWithColorScheme(c *gin.Context) {
color := c.Param("color")
var colorScheme ColorScheme
@@ -135,6 +167,13 @@ func (handler *BadgesHandler) GetBadgeWithColorScheme(c *gin.Context) {
}
}
func (handler *BadgesHandler) saveBadgeValue(request *APIValueRequest, badge *models.Badge) error {
return handler.DB.Save(&models.BadgeAPIValue{
BadgeULID: badge.ULID,
Value: request.Value,
}).Error
}
func (handler *BadgesHandler) generateBadgeValue(c *gin.Context) error {
startTime := time.Now()
_, internalRequest := c.GetQuery("i")
@@ -335,7 +374,7 @@ func (handler *BadgesHandler) queryBadgeValue(badge *models.Badge, internalReque
logrus.Error(err.Error())
return nil, err
}
handler.DB.Save(&models.ViewRecord{ULID: badge.ULID})
return &Metric{
Label: badge.Label,
TextValue: value.Value,
@@ -365,7 +404,7 @@ func (handler *BadgesHandler) queryMetric(badge *models.Badge, internalRequest b
func (handler *BadgesHandler) fetchBadgeValueFromDB(badge *models.Badge) (*models.BadgeAPIValue, error) {
var badgeValue models.BadgeAPIValue
err := handler.DB.Find(&badgeValue, "ulid = ?", badge.ULID).Error
err := handler.DB.Order("id DESC").First(&badgeValue, "ulid = ?", badge.ULID).Error
if err != nil {
if err != gorm.ErrRecordNotFound {
return nil, err
+2
View File
@@ -63,6 +63,7 @@ func main() {
&models.FeatureToggle{},
&models.BadgeViewCount{},
&models.BadgeAPIValue{},
&models.UserAPIToken{},
)
client, err := api.NewClient(api.Config{
@@ -92,6 +93,7 @@ func main() {
r.GET("/svg/:name", handler.GetBadge)
r.GET("/val/:name", handler.GetBadgeValue)
r.PUT("/val/:name", handler.UpdateBadgeValue)
r.GET("/badges/:name/:color", handler.GetBadgeWithColorScheme)
+1 -1
View File
@@ -4,6 +4,6 @@ import "github.com/jinzhu/gorm"
type BadgeAPIValue struct {
gorm.Model
BadgeULID string `gorm:"column:ulid;type:varchar;not null;unique_index" json:"ulid"`
BadgeULID string `gorm:"column:ulid;type:varchar;not null" json:"ulid"`
Value string `gorm:"not null;" json:"value"`
}
+10
View File
@@ -0,0 +1,10 @@
package models
import "github.com/jinzhu/gorm"
type UserAPIToken struct {
gorm.Model
Token string
ExpiresAt string
UserID int
}