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