Optimizations. User-Role handling in templates and routes.
This commit is contained in:
@@ -20,12 +20,17 @@ type UpdateCacheInput struct {
|
||||
Score float32 `json:"score" gorm:"default:-1.0"`
|
||||
}
|
||||
|
||||
// GetCacheByPlayerID GET /cache/:player_id?game_tag=TAG
|
||||
// GetCacheByPlayerID GET /cache/:player_id
|
||||
func GetCacheByPlayerID(c *gin.Context) {
|
||||
playerId := utils.StringToUint(c.Param("player_id"))
|
||||
gameTag := c.Request.URL.Query().Get("game_tag")
|
||||
|
||||
val, err := cache.GetScore(playerId, gameTag)
|
||||
game, err := GetActiveGame(c)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "No active game available!"})
|
||||
return
|
||||
}
|
||||
|
||||
val, err := cache.GetScore(playerId, game.Tag)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
|
||||
} else {
|
||||
@@ -91,11 +96,11 @@ func DeleteAllCaches(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// GetScoreByPlayerID GET /score/:player_id?game_tag=TAG
|
||||
// GetScoreByPlayerID GET /score/:player_id
|
||||
func GetScoreByPlayerID(c *gin.Context) {
|
||||
var player models.Player
|
||||
var gameTag = c.Request.URL.Query().Get("game_tag")
|
||||
var playerId = utils.StringToUint(c.Param("player_id"))
|
||||
|
||||
if err := models.DB.
|
||||
Model(&models.Player{}).
|
||||
Where("id = ?", playerId).
|
||||
@@ -105,11 +110,17 @@ func GetScoreByPlayerID(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
score, err := cache.GetScore(player.ID, gameTag)
|
||||
game, err := GetActiveGame(c)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "No active game available!"})
|
||||
return
|
||||
}
|
||||
|
||||
score, err := cache.GetScore(player.ID, game.Tag)
|
||||
if err != nil || score == -1 {
|
||||
score = utils.CalcPlayerScore(player.Name, gameTag)
|
||||
score = utils.CalcPlayerScore(player.Name, game.Tag)
|
||||
if score == score && score != -1 { // not NaN
|
||||
if err := cache.SetScore(player.ID, gameTag, score); err != nil {
|
||||
if err := cache.SetScore(player.ID, game.Tag, score); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,10 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"html/template"
|
||||
"internal/cache"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
type AddPlayerInput struct {
|
||||
@@ -44,14 +44,6 @@ func GetPlayersByClanHTML(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
file, err := os.ReadFile("./templates/player_list_item.html")
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, "")
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
playerItem := string(file)
|
||||
|
||||
game, err := GetActiveGame(c)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, "")
|
||||
@@ -59,19 +51,37 @@ func GetPlayersByClanHTML(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
var htmlOptions string
|
||||
for _, player := range players {
|
||||
var score string
|
||||
if val, err := cache.GetScore(player.ID, game.Tag); err != nil || val == -1.0 {
|
||||
score = "<i class=\"bi bi-dash me-2\" style=\"margin-left:0.7rem;\"></i>"
|
||||
} else {
|
||||
score = fmt.Sprintf("%.2f", val)
|
||||
}
|
||||
htmlOptions += fmt.Sprintf(playerItem, player.Name, score, utils.UintToString(player.ID)+"?game_tag="+game.Tag, player.ID, player.ID)
|
||||
scores, err := cache.GetScores(players, game.Tag)
|
||||
if err != nil {
|
||||
c.String(http.StatusBadRequest, "")
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
c.Header("Content-Type", "text/html")
|
||||
c.String(http.StatusOK, htmlOptions)
|
||||
userRole := GetUserRoleByCtx(c)
|
||||
|
||||
var data []map[string]interface{}
|
||||
for i, player := range players {
|
||||
|
||||
score := scores[i]
|
||||
var scoreStr string
|
||||
if score == -1.0 {
|
||||
scoreStr = "<i class=\"bi bi-dash me-2\" style=\"margin-left:0.7rem;\"></i>"
|
||||
} else {
|
||||
scoreStr = fmt.Sprintf("%.2f", score)
|
||||
}
|
||||
|
||||
data = append(data, map[string]interface{}{
|
||||
"PlayerName": player.Name,
|
||||
"Score": template.HTML(scoreStr),
|
||||
"PlayerID": player.ID,
|
||||
"UserRole": userRole,
|
||||
})
|
||||
}
|
||||
|
||||
err = utils.PlayerItemTemplate.Execute(c.Writer, data)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// AddPlayer POST /player
|
||||
|
||||
@@ -2,7 +2,9 @@ package controllers
|
||||
|
||||
import (
|
||||
"InfantrySkillCalculator/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
"log"
|
||||
"session"
|
||||
)
|
||||
|
||||
func CreateUser(username string, hashedPassword string, enabled bool, usedCode string) {
|
||||
@@ -56,6 +58,23 @@ func IsUserEnabled(username string) bool {
|
||||
return user.Enabled
|
||||
}
|
||||
|
||||
func GetUserRole(username string) models.Role {
|
||||
var user models.User
|
||||
err := models.DB.Where("username = ?", username).First(&user).Error
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return user.UserRole
|
||||
}
|
||||
|
||||
func GetUserRoleByCtx(c *gin.Context) models.Role {
|
||||
username, ok := session.GetUsername(c)
|
||||
if !ok {
|
||||
return models.ReaderRole
|
||||
}
|
||||
return GetUserRole(username)
|
||||
}
|
||||
|
||||
func IsUserAdmin(username string) bool {
|
||||
var user models.User
|
||||
err := models.DB.Where("username = ?", username).First(&user).Error
|
||||
|
||||
Reference in New Issue
Block a user