40 lines
1.2 KiB
Forth
40 lines
1.2 KiB
Forth
module DegenzGame.DbService
|
|
|
|
open DegenzGame.Shared
|
|
open DegenzGame.Shared
|
|
open MongoDB.Bson
|
|
open MongoDB.Driver
|
|
|
|
type PlayerEntry = {
|
|
Id : BsonObjectId
|
|
Player : Player
|
|
}
|
|
|
|
let mongo = MongoClient("mongodb://localhost:27017")
|
|
let db = mongo.GetDatabase("degenz-game")
|
|
let players = db.GetCollection<PlayerEntry>("players")
|
|
|
|
let tryFindPlayer (id : uint64) : Async<Player option> =
|
|
async {
|
|
let filter = Builders<PlayerEntry>.Filter.Eq((fun p -> p.Player.DiscordId), id)
|
|
let! player = players.FindAsync<PlayerEntry>(filter) |> Async.AwaitTask
|
|
return match player.ToEnumerable() |> Seq.toList with
|
|
| [] -> None
|
|
| entry::_ -> Some entry.Player
|
|
}
|
|
|
|
let insertNewPlayer (player : Player) =
|
|
async {
|
|
do! { Id = BsonObjectId(ObjectId.GenerateNewId()) ; Player = player }
|
|
|> players.InsertOneAsync
|
|
|> Async.AwaitTask
|
|
}
|
|
|
|
let removePlayer (memberId : uint64) =
|
|
async {
|
|
// TODO: Check the result of this delete operation
|
|
return! players.DeleteOneAsync (fun p -> p.Player.DiscordId = memberId)
|
|
|> Async.AwaitTask
|
|
|> Async.Ignore
|
|
}
|