mirror of
https://github.com/wahyd4/badger.git
synced 2026-08-09 05:15:58 +10:00
Add logic to save api value
This commit is contained in:
+41
-2
@@ -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
|
||||
|
||||
@@ -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
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package models
|
||||
|
||||
import "github.com/jinzhu/gorm"
|
||||
|
||||
type UserAPIToken struct {
|
||||
gorm.Model
|
||||
Token string
|
||||
ExpiresAt string
|
||||
UserID int
|
||||
}
|
||||
Reference in New Issue
Block a user