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.FindAsync(filter) |> Async.AwaitTask match player.FirstOrDefault() with | null -> return None | p -> return p .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() // }