55 lines
1.7 KiB
Forth
55 lines
1.7 KiB
Forth
module Degenz.DbService
|
|
|
|
open System
|
|
open System.Collections.Generic
|
|
open Degenz.Shared
|
|
open MongoDB.Bson
|
|
open MongoDB.Bson.Serialization
|
|
open MongoDB.Driver
|
|
|
|
|
|
let mongo = MongoClient(Environment.GetEnvironmentVariable("CONN_STRING"))
|
|
let db = mongo.GetDatabase("degenz")
|
|
let players = db.GetCollection<BsonDocument>("players")
|
|
|
|
let tryFindPlayer (id : uint64) =
|
|
async {
|
|
let filter = Builders<BsonDocument>.Filter.Eq("Player.DiscordId", id);
|
|
let! player = players.Find<BsonDocument>(filter).FirstOrDefaultAsync() |> Async.AwaitTask
|
|
return match player with
|
|
| null -> None
|
|
| player ->
|
|
player
|
|
.GetValue("Player")
|
|
.ToBsonDocument()
|
|
|> BsonSerializer.Deserialize<Player>
|
|
|> Some
|
|
}
|
|
|
|
let insertNewPlayer (player : Player) =
|
|
async {
|
|
let dict = [ KeyValuePair("Player" , player.ToBsonDocument() :> Object) ]
|
|
do! BsonDocument(dict)
|
|
|> players.InsertOneAsync
|
|
|> Async.AwaitTask
|
|
}
|
|
|
|
let deletePlayer (player : Player) =
|
|
async {
|
|
let dict = [ KeyValuePair("Player" , player.ToBsonDocument() :> Object) ]
|
|
do! BsonDocument(dict)
|
|
|> players.InsertOneAsync
|
|
|> Async.AwaitTask
|
|
}
|
|
|
|
let updatePlayer player =
|
|
async {
|
|
let filter = Builders<BsonDocument>.Filter.Eq("Player.DiscordId", player.DiscordId)
|
|
let update = Builders<BsonDocument>.Update.Set("Player", player)
|
|
return! players.UpdateOneAsync(filter, update) |> Async.AwaitTask |> Async.Ignore
|
|
}
|
|
|
|
//let getTopPlayers amount =
|
|
// async {
|
|
// return! players.FindAsync()
|
|
// } |