195 lines
6.1 KiB
Go
195 lines
6.1 KiB
Go
package stats
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/FrankenBotDev/FrankenAPI/ent"
|
|
"github.com/FrankenBotDev/FrankenAPI/ent/user"
|
|
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
|
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
// TODO: error handle route properly
|
|
func StatsRouter() http.Handler {
|
|
r := chi.NewRouter()
|
|
|
|
r.Post("/user", createUser)
|
|
r.Get("/user", getUser)
|
|
r.Get("/server", getServer)
|
|
r.Put("/user", updateUser)
|
|
|
|
return r
|
|
}
|
|
|
|
/* ==========================================================
|
|
ROUTE DEFINITIONS
|
|
=========================================================== */
|
|
func createUser(w http.ResponseWriter, r *http.Request) {
|
|
// fetch data
|
|
userJson := make(map[string]any)
|
|
userData, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
http.Error(w, `"type":"error", "code":"could_not_find_data_in_request"`, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
// process data
|
|
err = json.Unmarshal(userData, &userJson)
|
|
if err != nil {
|
|
http.Error(w, `{"type":"error", "code":"could_not_proccess_data"}`, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
if userJson["commiterid"].(string) != "" {
|
|
if userJson["serverid"].(string) != "" {
|
|
if userJson["userid"].(string) != "" {
|
|
if userJson["username"].(string) != "" {
|
|
|
|
// push data to database
|
|
_, err = r.Context().Value(sys.EntClientKey).(*ent.Client).User.Create().
|
|
SetServerid(userJson["serverid"].(string)).
|
|
SetUserid(userJson["userid"].(string)).
|
|
SetLevel(1).
|
|
SetUsername(userJson["username"].(string)).
|
|
SetXp(0).
|
|
SetMsgs(0).
|
|
SetCreated(time.Now()).
|
|
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_add_data_to_database", errors.New("data could not be added to the database"))
|
|
}
|
|
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("username needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
|
}
|
|
}
|
|
|
|
func updateUser(w http.ResponseWriter, r *http.Request) {
|
|
// daten fetchen
|
|
userData, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("the request appears to be empty"))
|
|
}
|
|
|
|
// proccess data
|
|
userJson := make(map[string]any)
|
|
err = json.Unmarshal(userData, &userJson)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
|
}
|
|
|
|
if userJson["committerid"].(string) != "" {
|
|
if userJson["serverid"].(string) != "" {
|
|
if userJson["userid"].(string) != "" {
|
|
if levelNum, ok := userJson["level"].(float64); ok {
|
|
if xpNum, ok := userJson["xp"].(float64); ok {
|
|
if msgsNum, ok := userJson["msgs"].(float64); ok {
|
|
|
|
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Update().
|
|
Where(user.Serverid(userJson["serverid"].(string)), user.Userid(userJson["userid"].(string))).
|
|
SetLevel(int(levelNum)).
|
|
SetXp(int(xpNum)).
|
|
SetMsgs(int(msgsNum)).
|
|
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
|
|
logger.Logtodb([]string{
|
|
userJson["committerid"].(string),
|
|
"Updated User with UserID: " + userJson["userid"].(string),
|
|
"User Update",
|
|
userJson["serverid"].(string),
|
|
}, r.Context().Value(sys.EntClientKey).(*ent.Client),
|
|
r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("msgs needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("xp needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("level needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
|
}
|
|
}
|
|
|
|
func getUser(w http.ResponseWriter, r *http.Request) {
|
|
userData := r.URL.Query()
|
|
fmt.Println(userData)
|
|
|
|
if userData.Get("commiterid") != "" {
|
|
if userData.Get("serverid") != "" {
|
|
if userData.Get("userid") != "" {
|
|
|
|
// replace with actual api data
|
|
user, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Query().
|
|
Where(user.Serverid(userData.Get("serverid")), user.Userid(userData.Get("userid"))).
|
|
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
|
}
|
|
sys.SuccessJsonResponse(w, user)
|
|
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
|
}
|
|
}
|
|
|
|
func getServer(w http.ResponseWriter, r *http.Request) {
|
|
serverData := r.URL.Query()
|
|
|
|
if serverData.Get("commiterid") != "" {
|
|
if serverData.Get("serverid") != "" {
|
|
|
|
// replace with actual api data
|
|
user, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Query().
|
|
Where(user.Serverid(serverData.Get("serverid"))).
|
|
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
|
}
|
|
|
|
sys.SuccessJsonResponse(w, user)
|
|
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
|
}
|
|
}
|