cds-web/dao/game.go

70 lines
1.4 KiB
Go

package dao
import (
"cds/models"
"container/list"
"context"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo/options"
)
func GetGameByAppId(id uint) (game *models.Game, err error) {
db, _ := get()
defer disconnect(db.Client())
coll := db.Collection("games")
var result models.Game
err = coll.FindOne(context.TODO(), bson.D{{"appid", id}}).Decode(&result)
if err != nil {
return nil, err
} else {
return &result, nil
}
}
func GetGameById(id string) (game *models.Game, err error) {
db, _ := get()
defer disconnect(db.Client())
coll := db.Collection("games")
objectId, err := primitive.ObjectIDFromHex(id)
var result models.Game
err = coll.FindOne(context.TODO(), bson.D{{"_id", objectId}}).Decode(&result)
if err != nil {
return nil, err
} else {
return &result, nil
}
}
func SearchSimilarNames(name string) (ret *list.List, err error) {
ret = list.New()
db, _ := get()
defer disconnect(db.Client())
coll := db.Collection("games")
regex := bson.D{{"$regex", ".*" + name + ".*"}}
opt := options.Find().SetLimit(10)
var result models.Game
cur, err := coll.Find(context.TODO(), bson.D{{"name", regex}}, opt)
if err != nil {
return nil, err
}
for cur.Next(context.TODO()) {
err = cur.Decode(&result)
if err != nil {
return nil, err
} else {
ret.PushBack(result)
}
}
return ret, nil
}