class MarketPlaceFacadeImpl implements MarketPlaceFacade {

	@Inject
	private StoreFacade storeFacade;

	@Inject
	private OptinService optinService;

	@Override
	public ReadableMarketPlace get(String store, Language lang) {
		ReadableMerchantStore readableStore = storeFacade.getByCode(store, lang);
    return createReadableMarketPlace(readableStore);
	}

  private ReadableMarketPlace createReadableMarketPlace(ReadableMerchantStore readableStore) {<FILL_FUNCTION_BODY>}

  @Override
	public ReadableOptin findByMerchantAndType(MerchantStore store, OptinType type) {
		Optin optin = getOptinByMerchantAndType(store, type);
    return convertOptinToReadableOptin(store, optin);
	}

  private Optin getOptinByMerchantAndType(MerchantStore store, OptinType type) {
	  try{
      return Optional.ofNullable(optinService.getOptinByMerchantAndType(store, type))
          .orElseThrow(() -> new ResourceNotFoundException("Option not found"));
    } catch (ServiceException e) {
	    throw new ServiceRuntimeException(e);
    }

  }

  private ReadableOptin convertOptinToReadableOptin(MerchantStore store, Optin optin) {
	  try{
      ReadableOptinPopulator populator = new ReadableOptinPopulator();
      return populator.populate(optin, null, store, null);
    } catch (ConversionException e) {
	    throw new ConversionRuntimeException(e);
    }

  }

}

    //TODO add info from Entity
    ReadableMarketPlace marketPlace = new ReadableMarketPlace();
    marketPlace.setStore(readableStore);
    return marketPlace;
  
<no_super_class>