class StopPlaceHandler {

   @Request(value = StopPlaceRequest.NAME, service = true)
   public void handleStopPlace(
      Optional<VoiceContext> context,
      @Named(StopPlaceRequest.ATTR_ASSISTANT) String assistant
   ) {
      long startTime = System.nanoTime();
      try {
         if(!context.isPresent()) {
            VoiceServiceMetrics.timeHandlerSuccess(StopPlaceRequest.NAME, startTime);
            return;
         }
         voiceDao.removeAssistant(context.get().getPlaceId(), assistant);
         proactiveCredsDAO.remove(context.get().getPlaceId(), assistant);
         context.get().removeAssistant(assistant);
         if(!context.get().hasAssistants()) {
            registry.remove(context.get().getPlaceId());
         }
         VoiceServiceMetrics.timeHandlerSuccess(StopPlaceRequest.NAME, startTime);
      } catch(RuntimeException e) {
         VoiceServiceMetrics.timeHandlerFailure(StopPlaceRequest.NAME, startTime);
         throw e;
      }
   }

     StopPlaceHandler(VoiceDAO voiceDao, ProactiveCredsDAO proactiveCredsDAO, VoiceContextExecutorRegistry registry);

}