Untitled
unknown
plain_text
2 months ago
2.6 kB
5
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