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("players") let tryFindPlayer (id : uint64) = async { let filter = Builders.Filter.Eq("Player.DiscordId", id); let! player = players.Find(filter).FirstOrDefaultAsync() |> Async.AwaitTask return match player with | null -> None | player -> player .GetValue("Player") .ToBsonDocument() |> BsonSerializer.Deserialize |> 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.Filter.Eq("Player.DiscordId", player.DiscordId) let update = Builders.Update.Set("Player", player) return! players.UpdateOneAsync(filter, update) |> Async.AwaitTask |> Async.Ignore } //let getTopPlayers amount = // async { // return! players.FindAsync() // }