1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00
wakapi/models/view/leaderboard.go

84 lines
2.0 KiB
Go
Raw Normal View History

2022-10-03 11:53:27 +03:00
package view
import (
"github.com/muety/wakapi/models"
"strings"
2022-10-06 16:30:18 +03:00
"time"
)
2022-10-03 11:53:27 +03:00
type LeaderboardViewModel struct {
2022-10-05 22:52:10 +03:00
User *models.User
By string
Key string
Items []*models.LeaderboardItemRanked
2022-10-05 22:52:10 +03:00
TopKeys []string
UserLanguages map[string][]string
ApiKey string
PageParams *models.PageParams
2022-10-05 22:52:10 +03:00
Success string
Error string
2022-10-03 11:53:27 +03:00
}
func (s *LeaderboardViewModel) WithSuccess(m string) *LeaderboardViewModel {
s.Success = m
return s
}
func (s *LeaderboardViewModel) WithError(m string) *LeaderboardViewModel {
s.Error = m
return s
}
func (s *LeaderboardViewModel) ColorModifier(item *models.LeaderboardItemRanked, principal *models.User) string {
if principal != nil && item.UserID == principal.ID {
return "self"
}
if item.Rank == 1 {
return "gold"
}
if item.Rank == 2 {
return "silver"
}
if item.Rank == 3 {
return "bronze"
}
return "default"
}
func (s *LeaderboardViewModel) LangIcon(lang string) string {
// https://icon-sets.iconify.design/mdi/
langs := map[string]string{
"c++": "language-cpp",
"cpp": "language-cpp",
"go": "language-go",
"haskell": "language-haskell",
"html": "language-html5",
"java": "language-java",
"javascript": "language-javascript",
"jsx": "language-javascript",
"kotlin": "language-kotlin",
"lua": "language-lua",
"php": "language-php",
"python": "language-python",
"r": "language-r",
"ruby": "language-ruby",
"rust": "language-rust",
"swift": "language-swift",
"typescript": "language-typescript",
"tsx": "language-typescript",
"markdown": "language-markdown",
2022-11-13 22:11:53 +03:00
"vue": "vuejs",
"react": "react",
"bash": "bash",
"json": "code-json",
}
if match, ok := langs[strings.ToLower(lang)]; ok {
return "mdi:" + match
}
return ""
}
2022-10-06 16:30:18 +03:00
func (s *LeaderboardViewModel) LastUpdate() time.Time {
return models.Leaderboard(s.Items).LastUpdate()
}