mirror of
				https://github.com/arcan1s/ffxivbis.git
				synced 2025-10-30 21:23:41 +00:00 
			
		
		
		
	more typed actors
This commit is contained in:
		| @ -8,30 +8,32 @@ | |||||||
|  */ |  */ | ||||||
| package me.arcanis.ffxivbis.service.database.impl | package me.arcanis.ffxivbis.service.database.impl | ||||||
|  |  | ||||||
|  | import akka.actor.typed.Behavior | ||||||
| import akka.actor.typed.scaladsl.Behaviors | import akka.actor.typed.scaladsl.Behaviors | ||||||
| import me.arcanis.ffxivbis.messages._ | import me.arcanis.ffxivbis.messages._ | ||||||
| import me.arcanis.ffxivbis.service.database.Database | import me.arcanis.ffxivbis.service.database.Database | ||||||
|  |  | ||||||
| trait DatabaseBiSHandler { this: Database => | trait DatabaseBiSHandler { this: Database => | ||||||
|  |  | ||||||
|   def bisHandler: DatabaseMessage.Handler = { |   def bisHandler(msg: BisDatabaseMessage): Behavior[DatabaseMessage] = | ||||||
|     case AddPieceToBis(playerId, piece, client) => |     msg match { | ||||||
|       run(profile.insertPieceBiS(playerId, piece))(_ => client ! ()) |       case AddPieceToBis(playerId, piece, client) => | ||||||
|       Behaviors.same |         run(profile.insertPieceBiS(playerId, piece))(_ => client ! ()) | ||||||
|  |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetBiS(partyId, maybePlayerId, client) => |       case GetBiS(partyId, maybePlayerId, client) => | ||||||
|       run { |         run { | ||||||
|         getParty(partyId, withBiS = true, withLoot = false) |           getParty(partyId, withBiS = true, withLoot = false) | ||||||
|           .map(filterParty(_, maybePlayerId)) |             .map(filterParty(_, maybePlayerId)) | ||||||
|       }(client ! _) |         }(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case RemovePieceFromBiS(playerId, piece, client) => |       case RemovePieceFromBiS(playerId, piece, client) => | ||||||
|       run(profile.deletePieceBiS(playerId, piece))(_ => client ! ()) |         run(profile.deletePieceBiS(playerId, piece))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case RemovePiecesFromBiS(playerId, client) => |       case RemovePiecesFromBiS(playerId, client) => | ||||||
|       run(profile.deletePiecesBiS(playerId))(_ => client ! ()) |         run(profile.deletePiecesBiS(playerId))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|   } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ package me.arcanis.ffxivbis.service.database.impl | |||||||
| import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext} | import akka.actor.typed.scaladsl.{AbstractBehavior, ActorContext} | ||||||
| import akka.actor.typed.{Behavior, DispatcherSelector} | import akka.actor.typed.{Behavior, DispatcherSelector} | ||||||
| import com.typesafe.config.Config | import com.typesafe.config.Config | ||||||
| import me.arcanis.ffxivbis.messages.DatabaseMessage | import me.arcanis.ffxivbis.messages.{BisDatabaseMessage, DatabaseMessage, LootDatabaseMessage, PartyDatabaseMessage, UserDatabaseMessage} | ||||||
| import me.arcanis.ffxivbis.service.database.Database | import me.arcanis.ffxivbis.service.database.Database | ||||||
| import me.arcanis.ffxivbis.storage.DatabaseProfile | import me.arcanis.ffxivbis.storage.DatabaseProfile | ||||||
|  |  | ||||||
| @ -32,8 +32,12 @@ class DatabaseImpl(context: ActorContext[DatabaseMessage]) | |||||||
|   override val config: Config = context.system.settings.config |   override val config: Config = context.system.settings.config | ||||||
|   override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config) |   override val profile: DatabaseProfile = new DatabaseProfile(executionContext, config) | ||||||
|  |  | ||||||
|   override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] = handle(msg) |   override def onMessage(msg: DatabaseMessage): Behavior[DatabaseMessage] = | ||||||
|  |     msg match { | ||||||
|  |       case msg: BisDatabaseMessage => bisHandler(msg) | ||||||
|  |       case msg: LootDatabaseMessage => lootHandler(msg) | ||||||
|  |       case msg: PartyDatabaseMessage => partyHandler(msg) | ||||||
|  |       case msg: UserDatabaseMessage => userHandler(msg) | ||||||
|  |     } | ||||||
|  |  | ||||||
|   private def handle: DatabaseMessage.Handler = |  | ||||||
|     bisHandler.orElse(lootHandler).orElse(partyHandler).orElse(userHandler) |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ | |||||||
|  */ |  */ | ||||||
| package me.arcanis.ffxivbis.service.database.impl | package me.arcanis.ffxivbis.service.database.impl | ||||||
|  |  | ||||||
|  | import akka.actor.typed.Behavior | ||||||
| import akka.actor.typed.scaladsl.Behaviors | import akka.actor.typed.scaladsl.Behaviors | ||||||
| import me.arcanis.ffxivbis.messages._ | import me.arcanis.ffxivbis.messages._ | ||||||
| import me.arcanis.ffxivbis.models.Loot | import me.arcanis.ffxivbis.models.Loot | ||||||
| @ -17,28 +18,29 @@ import java.time.Instant | |||||||
|  |  | ||||||
| trait DatabaseLootHandler { this: Database => | trait DatabaseLootHandler { this: Database => | ||||||
|  |  | ||||||
|   def lootHandler: DatabaseMessage.Handler = { |   def lootHandler(msg: LootDatabaseMessage): Behavior[DatabaseMessage] = | ||||||
|     case AddPieceTo(playerId, piece, isFreeLoot, client) => |     msg match { | ||||||
|       val loot = Loot(-1, piece, Instant.now, isFreeLoot) |       case AddPieceTo(playerId, piece, isFreeLoot, client) => | ||||||
|       run(profile.insertPiece(playerId, loot))(_ => client ! ()) |         val loot = Loot(-1, piece, Instant.now, isFreeLoot) | ||||||
|       Behaviors.same |         run(profile.insertPiece(playerId, loot))(_ => client ! ()) | ||||||
|  |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetLoot(partyId, maybePlayerId, client) => |       case GetLoot(partyId, maybePlayerId, client) => | ||||||
|       run { |         run { | ||||||
|         getParty(partyId, withBiS = false, withLoot = true) |           getParty(partyId, withBiS = false, withLoot = true) | ||||||
|           .map(filterParty(_, maybePlayerId)) |             .map(filterParty(_, maybePlayerId)) | ||||||
|       }(client ! _) |         }(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case RemovePieceFrom(playerId, piece, isFreeLoot, client) => |       case RemovePieceFrom(playerId, piece, isFreeLoot, client) => | ||||||
|       run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ()) |         run(profile.deletePiece(playerId, piece, isFreeLoot))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case SuggestLoot(partyId, piece, client) => |       case SuggestLoot(partyId, piece, client) => | ||||||
|       run { |         run { | ||||||
|         getParty(partyId, withBiS = true, withLoot = true) |           getParty(partyId, withBiS = true, withLoot = true) | ||||||
|           .map(_.suggestLoot(piece)) |             .map(_.suggestLoot(piece)) | ||||||
|       }(client ! _) |         }(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|   } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ | |||||||
|  */ |  */ | ||||||
| package me.arcanis.ffxivbis.service.database.impl | package me.arcanis.ffxivbis.service.database.impl | ||||||
|  |  | ||||||
|  | import akka.actor.typed.Behavior | ||||||
| import akka.actor.typed.scaladsl.Behaviors | import akka.actor.typed.scaladsl.Behaviors | ||||||
| import me.arcanis.ffxivbis.messages._ | import me.arcanis.ffxivbis.messages._ | ||||||
| import me.arcanis.ffxivbis.models.{BiS, Player} | import me.arcanis.ffxivbis.models.{BiS, Player} | ||||||
| @ -17,50 +18,51 @@ import scala.concurrent.Future | |||||||
|  |  | ||||||
| trait DatabasePartyHandler { this: Database => | trait DatabasePartyHandler { this: Database => | ||||||
|  |  | ||||||
|   def partyHandler: DatabaseMessage.Handler = { |   def partyHandler(msg: PartyDatabaseMessage): Behavior[DatabaseMessage] = | ||||||
|     case AddPlayer(player, client) => |     msg match { | ||||||
|       run(profile.insertPlayer(player))(_ => client ! ()) |       case AddPlayer(player, client) => | ||||||
|       Behaviors.same |         run(profile.insertPlayer(player))(_ => client ! ()) | ||||||
|  |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetParty(partyId, client) => |       case GetParty(partyId, client) => | ||||||
|       run(getParty(partyId, withBiS = true, withLoot = true))(client ! _) |         run(getParty(partyId, withBiS = true, withLoot = true))(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetPartyDescription(partyId, client) => |       case GetPartyDescription(partyId, client) => | ||||||
|       run(profile.getPartyDescription(partyId))(client ! _) |         run(profile.getPartyDescription(partyId))(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetPlayer(playerId, client) => |       case GetPlayer(playerId, client) => | ||||||
|       run { |         run { | ||||||
|         profile |           profile | ||||||
|           .getPlayerFull(playerId) |             .getPlayerFull(playerId) | ||||||
|           .flatMap { maybePlayerData => |             .flatMap { maybePlayerData => | ||||||
|             Future.traverse(maybePlayerData.toSeq) { playerData => |               Future.traverse(maybePlayerData.toSeq) { playerData => | ||||||
|               for { |                 for { | ||||||
|                 bis <- profile.getPiecesBiS(playerId) |                   bis <- profile.getPiecesBiS(playerId) | ||||||
|                 loot <- profile.getPieces(playerId) |                   loot <- profile.getPieces(playerId) | ||||||
|               } yield Player( |                 } yield Player( | ||||||
|                 playerData.id, |                   playerData.id, | ||||||
|                 playerId.partyId, |                   playerId.partyId, | ||||||
|                 playerId.job, |                   playerId.job, | ||||||
|                 playerId.nick, |                   playerId.nick, | ||||||
|                 BiS(bis.map(_.piece)), |                   BiS(bis.map(_.piece)), | ||||||
|                 loot, |                   loot, | ||||||
|                 playerData.link, |                   playerData.link, | ||||||
|                 playerData.priority |                   playerData.priority | ||||||
|               ) |                 ) | ||||||
|  |               } | ||||||
|             } |             } | ||||||
|           } |             .map(_.headOption) | ||||||
|           .map(_.headOption) |         }(client ! _) | ||||||
|       }(client ! _) |         Behaviors.same | ||||||
|       Behaviors.same |  | ||||||
|  |  | ||||||
|     case RemovePlayer(playerId, client) => |       case RemovePlayer(playerId, client) => | ||||||
|       run(profile.deletePlayer(playerId))(_ => client ! ()) |         run(profile.deletePlayer(playerId))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case UpdateParty(description, client) => |       case UpdateParty(description, client) => | ||||||
|       run(profile.insertPartyDescription(description))(_ => client ! ()) |         run(profile.insertPartyDescription(description))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|   } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,32 +8,34 @@ | |||||||
|  */ |  */ | ||||||
| package me.arcanis.ffxivbis.service.database.impl | package me.arcanis.ffxivbis.service.database.impl | ||||||
|  |  | ||||||
|  | import akka.actor.typed.Behavior | ||||||
| import akka.actor.typed.scaladsl.Behaviors | import akka.actor.typed.scaladsl.Behaviors | ||||||
| import me.arcanis.ffxivbis.messages._ | import me.arcanis.ffxivbis.messages._ | ||||||
| import me.arcanis.ffxivbis.service.database.Database | import me.arcanis.ffxivbis.service.database.Database | ||||||
|  |  | ||||||
| trait DatabaseUserHandler { this: Database => | trait DatabaseUserHandler { this: Database => | ||||||
|  |  | ||||||
|   def userHandler: DatabaseMessage.Handler = { |   def userHandler(msg: UserDatabaseMessage): Behavior[DatabaseMessage] = | ||||||
|     case AddUser(user, isHashedPassword, client) => |     msg match { | ||||||
|       val toInsert = if (isHashedPassword) user else user.withHashedPassword |       case AddUser(user, isHashedPassword, client) => | ||||||
|       run(profile.insertUser(toInsert))(_ => client ! ()) |         val toInsert = if (isHashedPassword) user else user.withHashedPassword | ||||||
|       Behaviors.same |         run(profile.insertUser(toInsert))(_ => client ! ()) | ||||||
|  |         Behaviors.same | ||||||
|  |  | ||||||
|     case DeleteUser(partyId, username, client) => |       case DeleteUser(partyId, username, client) => | ||||||
|       run(profile.deleteUser(partyId, username))(_ => client ! ()) |         run(profile.deleteUser(partyId, username))(_ => client ! ()) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case Exists(partyId, client) => |       case Exists(partyId, client) => | ||||||
|       run(profile.exists(partyId))(client ! _) |         run(profile.exists(partyId))(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetUser(partyId, username, client) => |       case GetUser(partyId, username, client) => | ||||||
|       run(profile.getUser(partyId, username))(client ! _) |         run(profile.getUser(partyId, username))(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|  |  | ||||||
|     case GetUsers(partyId, client) => |       case GetUsers(partyId, client) => | ||||||
|       run(profile.getUsers(partyId))(client ! _) |         run(profile.getUsers(partyId))(client ! _) | ||||||
|       Behaviors.same |         Behaviors.same | ||||||
|   } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user