diff --git a/src/main/scala/net/psforever/objects/zones/exp/ToDatabase.scala b/src/main/scala/net/psforever/objects/zones/exp/ToDatabase.scala index aca7a2fe..97ed44e7 100644 --- a/src/main/scala/net/psforever/objects/zones/exp/ToDatabase.scala +++ b/src/main/scala/net/psforever/objects/zones/exp/ToDatabase.scala @@ -10,6 +10,8 @@ import net.psforever.types.Vector3 import net.psforever.util.Database.ctx import net.psforever.util.Database.ctx._ +import scala.concurrent.Future + object ToDatabase { /** * Insert an entry into the database's `killactivity` table. @@ -101,22 +103,27 @@ object ToDatabase { * insert a new entry into the table. * Shots fired. */ - def reportToolDischarge(avatarId: Long, stats: EquipmentStat): Unit = { - ctx.run(query[persistence.Weaponstatsession] - .insert( - _.avatarId -> lift(avatarId), - _.weaponId -> lift(stats.objectId), - _.shotsFired -> lift(stats.shotsFired), - _.shotsLanded -> lift(stats.shotsLanded), - _.kills -> lift(0), - _.assists -> lift(0), - _.sessionId -> lift(-1L) - ) - .onConflictUpdate(_.avatarId, _.weaponId, _.sessionId)( - (t, e) => t.shotsFired -> (t.shotsFired + e.shotsFired), - (t, e) => t.shotsLanded -> (t.shotsLanded + e.shotsLanded) - ) - ) + def reportToolDischarge(avatarId: Long, stats: EquipmentStat): Future[Unit] = { + import ctx._ + import scala.concurrent.ExecutionContext.Implicits.global + ctx.transaction { implicit ec => + ctx.run( + query[persistence.Weaponstatsession] + .insert( + _.avatarId -> lift(avatarId), + _.weaponId -> lift(stats.objectId), + _.shotsFired -> lift(stats.shotsFired), + _.shotsLanded -> lift(stats.shotsLanded), + _.kills -> lift(0), + _.assists -> lift(0), + _.sessionId -> lift(-1L) + ) + .onConflictUpdate(_.avatarId, _.weaponId, _.sessionId)( + (t, e) => t.shotsFired -> (t.shotsFired + e.shotsFired), + (t, e) => t.shotsLanded -> (t.shotsLanded + e.shotsLanded) + ) + ).map(_ => ()) + } } /**