feat: roblox likes route

This commit is contained in:
trafficlunar 2025-06-28 14:12:32 +01:00
parent fea1c9ced9
commit a2a99a8dcc
7 changed files with 81 additions and 1 deletions

View file

@ -15,3 +15,6 @@ GITHUB_TOKEN="API_KEY_GOES_HERE"
# The password for the computer WebSocket # The password for the computer WebSocket
WEBSOCKET_PASSWORD="PASSWORD_GOES_HERE" WEBSOCKET_PASSWORD="PASSWORD_GOES_HERE"
# Roblox
GROWAROBLOXIAN_UNIVERSE_ID=7778892933

View file

@ -0,0 +1,12 @@
package handler
import (
"api/internal/worker"
"encoding/json"
"net/http"
)
func HandleGetGrowARobloxianLikesCount(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(worker.GrowARobloxianLikes)
}

9
internal/model/roblox.go Normal file
View file

@ -0,0 +1,9 @@
package model
type RobloxGameVotesAPI struct {
Data []struct {
Id int `json:"id"`
Upvotes int `json:"upVotes"`
Downvotes int `json:"downVotes"`
} `json:"data"`
}

View file

@ -57,6 +57,7 @@ func NewRouter() {
r.Get("/projects", handler.HandleGetProjects) r.Get("/projects", handler.HandleGetProjects)
r.Get("/computer", handler.HandleComputerGraphData) r.Get("/computer", handler.HandleComputerGraphData)
r.Get("/computer/ws", handler.HandleComputerWebSocket) r.Get("/computer/ws", handler.HandleComputerWebSocket)
r.Get("/roblox/grow-a-robloxian/likes", handler.HandleGetGrowARobloxianLikesCount)
port := os.Getenv("PORT") port := os.Getenv("PORT")
if len(port) == 0 { if len(port) == 0 {

View file

@ -0,0 +1,36 @@
package service
import (
"api/internal/model"
"encoding/json"
"fmt"
"io"
"log/slog"
"net/http"
"os"
)
func GetRobloxGrowARobloxianLikesCount() int {
url := fmt.Sprintf("https://games.roblox.com/v1/games/votes?universeIds=%s", os.Getenv("GROWAROBLOXIAN_UNIVERSE_ID"))
res, err := http.Get(url)
if err != nil {
slog.Error("Error requesting Roblox votes API", slog.Any("error", err))
return 0
}
body, err := io.ReadAll(res.Body)
if err != nil {
slog.Error("Error reading body", slog.Any("error", err))
return 0
}
var apiData model.RobloxGameVotesAPI
err = json.Unmarshal(body, &apiData)
if err != nil {
slog.Error("Error unmarshalling JSON", slog.Any("error", err))
return 0
}
return apiData.Data[0].Upvotes
}

18
internal/worker/roblox.go Normal file
View file

@ -0,0 +1,18 @@
package worker
import (
"api/internal/service"
"log/slog"
"time"
)
var GrowARobloxianLikes int
func StartRobloxWorker() {
slog.Info("Starting Roblox worker...")
GrowARobloxianLikes = service.GetRobloxGrowARobloxianLikesCount()
for range time.Tick(1 * time.Minute) {
GrowARobloxianLikes = service.GetRobloxGrowARobloxianLikesCount()
}
}

View file

@ -5,4 +5,5 @@ func StartWorkers() {
go StartLastFMWorker() go StartLastFMWorker()
go StartGitHubWorker() go StartGitHubWorker()
go StartComputerWorker() go StartComputerWorker()
go StartRobloxWorker()
} }