Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add zio-actors-sharding #455

Open
wants to merge 26 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge entity and behavior into same object
  • Loading branch information
ffakenz committed Oct 6, 2022
commit a59f6ab935b1893fdf082f6d97f1d7bb14287678
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ object ShoppingCartApp extends ZIOAppDefault {
for {
_ <- Sharding.registerEntity(
ShoppingCartEntity.ShoppingCartEntityType,
ShoppingCartBehavior.behavior
ShoppingCartEntity.behavior
)
_ <- Sharding.registerScoped
cart <- Sharding.messenger(ShoppingCartEntity.ShoppingCartEntityType)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package zio.actors.examples.sharding

import com.devsisters.shardcake.EntityType
import com.devsisters.shardcake.Messenger.Replier
import com.devsisters.shardcake.{ EntityType, Sharding }
import zio.ZIO
import zio.actors.ActorRef
import zio.actors.examples.persistence.ShoppingCart
import zio.actors.persistence.EventSourcedStateful
import zio.actors.sharding.Behavior

object ShoppingCartEntity {
object ShoppingCartEntity extends Behavior {
sealed trait Message

final case class AddItem(
Expand All @@ -29,4 +33,41 @@ object ShoppingCartEntity {
) extends Message

object ShoppingCartEntityType extends EntityType[Message]("ShoppingCartEntity")

type BehaviorMessage = Message
type State = ShoppingCart.State
type Command[+A] = ShoppingCart.Command[A]
type Event = ShoppingCart.Event

def stateEmpty: State = ShoppingCart.State.empty

def eventSourcedFactory: String => EventSourcedStateful[Any, State, Command, Event] =
persistenceId => ShoppingCart(persistenceId)

def messageHandler(
message: Message,
actor: ActorRef[Command]
): ZIO[Sharding, Throwable, Unit] =
message match {
case AddItem(itemId, quantity, replier) =>
actor
.?(ShoppingCart.AddItem(itemId, quantity))
.flatMap(replier.reply)
case RemoveItem(itemId, replier) =>
actor
.?(ShoppingCart.RemoveItem(itemId))
.flatMap(replier.reply)
case AdjustItemQuantity(itemId, quantity, replier) =>
actor
.?(ShoppingCart.AdjustItemQuantity(itemId, quantity))
.flatMap(replier.reply)
case Checkout(replier) =>
actor
.?(ShoppingCart.Checkout)
.flatMap(replier.reply)
case Get(replier) =>
actor
.?(ShoppingCart.Get)
.flatMap(replier.reply)
}
}
3 changes: 2 additions & 1 deletion sharding/src/main/scala/zio/actors/sharding/Behavior.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import zio.actors.persistence.EventSourcedStateful
import zio.actors.sharding.Layers.ActorSystemZ
import zio.{ Dequeue, RIO, ZIO }

trait Behavior[BehaviorMessage] {
trait Behavior {
type BehaviorMessage
type State
type Command[+_]
type Event
Expand Down