mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-04-25 01:37:17 +00:00
log exceptions for database requests
This commit is contained in:
parent
c5b0832d29
commit
012cdd2d8b
@ -18,6 +18,7 @@ import me.arcanis.ffxivbis.service.database.impl.DatabaseImpl
|
|||||||
import me.arcanis.ffxivbis.storage.DatabaseProfile
|
import me.arcanis.ffxivbis.storage.DatabaseProfile
|
||||||
|
|
||||||
import scala.concurrent.{ExecutionContext, Future}
|
import scala.concurrent.{ExecutionContext, Future}
|
||||||
|
import scala.util.{Failure, Success}
|
||||||
|
|
||||||
trait Database extends StrictLogging {
|
trait Database extends StrictLogging {
|
||||||
|
|
||||||
@ -38,6 +39,12 @@ trait Database extends StrictLogging {
|
|||||||
bis <- if (withBiS) profile.getPiecesBiS(partyId) else Future(Seq.empty)
|
bis <- if (withBiS) profile.getPiecesBiS(partyId) else Future(Seq.empty)
|
||||||
loot <- if (withLoot) profile.getPieces(partyId) else Future(Seq.empty)
|
loot <- if (withLoot) profile.getPieces(partyId) else Future(Seq.empty)
|
||||||
} yield Party(partyDescription, config, players, bis, loot)
|
} yield Party(partyDescription, config, players, bis, loot)
|
||||||
|
|
||||||
|
protected def run[T](fn: => Future[T])(onSuccess: T => Unit): Unit =
|
||||||
|
fn.onComplete {
|
||||||
|
case Success(value) => onSuccess(value)
|
||||||
|
case Failure(exception) => logger.error("exception during performing database request", exception)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object Database {
|
object Database {
|
||||||
|
@ -16,21 +16,22 @@ trait DatabaseBiSHandler { this: Database =>
|
|||||||
|
|
||||||
def bisHandler: DatabaseMessage.Handler = {
|
def bisHandler: DatabaseMessage.Handler = {
|
||||||
case AddPieceToBis(playerId, piece, client) =>
|
case AddPieceToBis(playerId, piece, client) =>
|
||||||
profile.insertPieceBiS(playerId, piece).foreach(_ => client ! ())
|
run(profile.insertPieceBiS(playerId, piece))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetBiS(partyId, maybePlayerId, client) =>
|
case GetBiS(partyId, maybePlayerId, client) =>
|
||||||
getParty(partyId, withBiS = true, withLoot = false)
|
run {
|
||||||
.map(filterParty(_, maybePlayerId))
|
getParty(partyId, withBiS = true, withLoot = false)
|
||||||
.foreach(client ! _)
|
.map(filterParty(_, maybePlayerId))
|
||||||
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFromBiS(playerId, piece, client) =>
|
case RemovePieceFromBiS(playerId, piece, client) =>
|
||||||
profile.deletePieceBiS(playerId, piece).foreach(_ => client ! ())
|
run(profile.deletePieceBiS(playerId, piece))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePiecesFromBiS(playerId, client) =>
|
case RemovePiecesFromBiS(playerId, client) =>
|
||||||
profile.deletePiecesBiS(playerId).foreach(_ => client ! ())
|
run(profile.deletePiecesBiS(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,23 +20,25 @@ trait DatabaseLootHandler { this: Database =>
|
|||||||
def lootHandler: DatabaseMessage.Handler = {
|
def lootHandler: DatabaseMessage.Handler = {
|
||||||
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
case AddPieceTo(playerId, piece, isFreeLoot, client) =>
|
||||||
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
val loot = Loot(-1, piece, Instant.now, isFreeLoot)
|
||||||
profile.insertPiece(playerId, loot).foreach(_ => client ! ())
|
run(profile.insertPiece(playerId, loot))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetLoot(partyId, maybePlayerId, client) =>
|
case GetLoot(partyId, maybePlayerId, client) =>
|
||||||
getParty(partyId, withBiS = false, withLoot = true)
|
run {
|
||||||
.map(filterParty(_, maybePlayerId))
|
getParty(partyId, withBiS = false, withLoot = true)
|
||||||
.foreach(client ! _)
|
.map(filterParty(_, maybePlayerId))
|
||||||
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePieceFrom(playerId, piece, client) =>
|
case RemovePieceFrom(playerId, piece, client) =>
|
||||||
profile.deletePiece(playerId, piece).foreach(_ => client ! ())
|
run(profile.deletePiece(playerId, piece))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case SuggestLoot(partyId, piece, client) =>
|
case SuggestLoot(partyId, piece, client) =>
|
||||||
getParty(partyId, withBiS = true, withLoot = true)
|
run {
|
||||||
.map(_.suggestLoot(piece))
|
getParty(partyId, withBiS = true, withLoot = true)
|
||||||
.foreach(client ! _)
|
.map(_.suggestLoot(piece))
|
||||||
|
}(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,47 +19,48 @@ trait DatabasePartyHandler { this: Database =>
|
|||||||
|
|
||||||
def partyHandler: DatabaseMessage.Handler = {
|
def partyHandler: DatabaseMessage.Handler = {
|
||||||
case AddPlayer(player, client) =>
|
case AddPlayer(player, client) =>
|
||||||
profile.insertPlayer(player).foreach(_ => client ! ())
|
run(profile.insertPlayer(player))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetParty(partyId, client) =>
|
case GetParty(partyId, client) =>
|
||||||
getParty(partyId, withBiS = true, withLoot = true).foreach(client ! _)
|
run(getParty(partyId, withBiS = true, withLoot = true))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPartyDescription(partyId, client) =>
|
case GetPartyDescription(partyId, client) =>
|
||||||
profile.getPartyDescription(partyId).foreach(client ! _)
|
run(profile.getPartyDescription(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetPlayer(playerId, client) =>
|
case GetPlayer(playerId, client) =>
|
||||||
val player = profile
|
run {
|
||||||
.getPlayerFull(playerId)
|
profile
|
||||||
.flatMap { maybePlayerData =>
|
.getPlayerFull(playerId)
|
||||||
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
.flatMap { maybePlayerData =>
|
||||||
for {
|
Future.traverse(maybePlayerData.toSeq) { playerData =>
|
||||||
bis <- profile.getPiecesBiS(playerId)
|
for {
|
||||||
loot <- profile.getPieces(playerId)
|
bis <- profile.getPiecesBiS(playerId)
|
||||||
} yield Player(
|
loot <- profile.getPieces(playerId)
|
||||||
playerData.id,
|
} yield Player(
|
||||||
playerId.partyId,
|
playerData.id,
|
||||||
playerId.job,
|
playerId.partyId,
|
||||||
playerId.nick,
|
playerId.job,
|
||||||
BiS(bis.map(_.piece)),
|
playerId.nick,
|
||||||
loot,
|
BiS(bis.map(_.piece)),
|
||||||
playerData.link,
|
loot,
|
||||||
playerData.priority
|
playerData.link,
|
||||||
)
|
playerData.priority
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
.map(_.headOption)
|
||||||
.map(_.headOption)
|
}(client ! _)
|
||||||
player.foreach(client ! _)
|
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case RemovePlayer(playerId, client) =>
|
case RemovePlayer(playerId, client) =>
|
||||||
profile.deletePlayer(playerId).foreach(_ => client ! ())
|
run(profile.deletePlayer(playerId))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case UpdateParty(description, client) =>
|
case UpdateParty(description, client) =>
|
||||||
profile.insertPartyDescription(description).foreach(_ => client ! ())
|
run(profile.insertPartyDescription(description))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,23 +17,23 @@ trait DatabaseUserHandler { this: Database =>
|
|||||||
def userHandler: DatabaseMessage.Handler = {
|
def userHandler: DatabaseMessage.Handler = {
|
||||||
case AddUser(user, isHashedPassword, client) =>
|
case AddUser(user, isHashedPassword, client) =>
|
||||||
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
val toInsert = if (isHashedPassword) user else user.withHashedPassword
|
||||||
profile.insertUser(toInsert).foreach(_ => client ! ())
|
run(profile.insertUser(toInsert))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case DeleteUser(partyId, username, client) =>
|
case DeleteUser(partyId, username, client) =>
|
||||||
profile.deleteUser(partyId, username).foreach(_ => client ! ())
|
run(profile.deleteUser(partyId, username))(_ => client ! ())
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case Exists(partyId, client) =>
|
case Exists(partyId, client) =>
|
||||||
profile.exists(partyId).foreach(client ! _)
|
run(profile.exists(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUser(partyId, username, client) =>
|
case GetUser(partyId, username, client) =>
|
||||||
profile.getUser(partyId, username).foreach(client ! _)
|
run(profile.getUser(partyId, username))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
|
|
||||||
case GetUsers(partyId, client) =>
|
case GetUsers(partyId, client) =>
|
||||||
profile.getUsers(partyId).foreach(client ! _)
|
run(profile.getUsers(partyId))(client ! _)
|
||||||
Behaviors.same
|
Behaviors.same
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user