       let main = Observable.concat([startRefreshing, setShot, stopRefreshing])
       let sub = Observable.of(setLiked, setComments).merge()
       return .concat([main, sub])
+    }
+  }
 
-    case let .shotEvent(event):
-      return self.mutate(shotEvent: event)
+  func transform(mutation: Observable<Mutation>) -> Observable<Mutation> {
+    let fromShotEvent = Shot.event.flatMap { [weak self] event in
+      return self?.mutate(shotEvent: event) ?? .empty()
     }
+    return Observable.of(mutation, fromShotEvent).merge()
   }
 
   private func mutate(shotEvent: Shot.Event) -> Observable<Mutation> {

final class ShotViewReactor: Reactor {
  enum Action {
    case refresh
    case shotEvent(Shot.Event)
  }

  enum Mutation {

    self.initialState = State()
  }

  func mutate(action: Action) -> Observable<Mutation> {
    switch action {
    case .refresh:
