Untitled
unknown
plain_text
8 months ago
2.6 kB
6
Indexable
package models
import (
"api/database"
"context"
"encoding/json"
"fmt"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"time"
)
type PlayerData struct {
UUID string `json:"uuid" bson:"uuid"`
Username string `json:"username" bson:"username"`
Ips []string `json:"ips" bson:"ips"`
LastIP string `json:"last_ip" bson:"last_ip"`
ConnexionDates []time.Time `json:"connexion_dates" bson:"connexion_dates"`
FirstConnexion time.Time `json:"first_connexion" bson:"first_connexion"`
Rank string `json:"rank" bson:"rank"`
TotalPlayedTime int `json:"total_played_time" bson:"total_played_time"`
Money int `json:"money" bson:"money"`
}
func NewPlayerData(data *PlayerData) (*PlayerData, error) {
var coll *mongo.Collection = database.MongoDB.Database(database.Database).Collection("players")
_, err := coll.InsertOne(database.Ctx, *data)
if err != nil {
fmt.Println("Can't insert new player data: ", err.Error())
return data, err
}
return data, nil
}
func UpdatePlayerData(data *PlayerData) (*PlayerData, error) {
var coll *mongo.Collection = database.MongoDB.Database(database.Database).Collection("players")
_, err := coll.UpdateOne(database.Ctx, bson.M{"uuid": data.UUID}, data)
if err != nil {
fmt.Println("Can't update player data: ", err.Error())
return data, err
}
return data, nil
}
func fromRedis(uuid string) (*PlayerData, error) {
result, err := database.RedisClient.Get(database.Ctx, uuid).Result()
if err != nil {
return nil, err
}
var data PlayerData
err = json.Unmarshal([]byte(result), &data)
if err != nil {
return nil, err
}
return &data, nil
}
func fromMongo(uuid string) (*PlayerData, error) {
var data PlayerData
var coll *mongo.Collection = database.MongoDB.Database(database.Database).Collection("players")
err := coll.FindOne(database.Ctx, bson.M{"uuid": uuid}).Decode(&data)
if err != nil {
return nil, err
}
return &data, nil
}
func saveRedis(data *PlayerData) {
userData, _ := json.Marshal(*data)
err := database.RedisClient.Set(context.Background(), data.UUID, userData, 0).Err()
if err != nil {
fmt.Println("Can't save player data in Redis: ", err.Error())
}
}
func GetPlayerDataByUUID(uuid string) (PlayerData, error) {
data, err := fromRedis(uuid)
if err != nil {
//From MongoDB
data, err = fromMongo(uuid)
if err != nil {
fmt.Println("Can't find player data: ", err.Error())
return PlayerData{}, err
}
saveRedis(data)
}
return *data, err
}
Editor is loading...
Leave a Comment