io.mstream.trader.simulation.stocks.datafeed.client.UriBuilder Maven / Gradle / Ivy
package io.mstream.trader.simulation.stocks.datafeed.client;
import io.mstream.trader.commons.config.model.DownstreamService;
import io.mstream.trader.simulation.stocks.datafeed.api.DataFeed;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;
import static java.lang.String.format;
class UriBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(UriBuilder.class);
private static final String STOCK_NAMES_URI = "/api/stocks";
private static final String STOCK_DATES_URI = "/api/dates";
private static final String CHECK_PRICE_FORMAT = "/api/stocks/%s/price/%s";
private final Supplier configSupplier;
private final DateTimeFormatter dateFormatter;
@Inject
public UriBuilder(
@DataFeed
Supplier configSupplier,
@DataFeed DateTimeFormatter dateFormatter
) {
this.configSupplier = configSupplier;
this.dateFormatter = dateFormatter;
}
public URI stockPrice(String stockName, LocalDate date) {
return createUri(format(
CHECK_PRICE_FORMAT,
stockName,
dateFormatter.format(date)
));
}
private URI createUri(String path) {
String baseUrl = configSupplier.get().getUrl().url();
URI uri = null;
try {
uri = new URI(baseUrl + path);
LOGGER.debug("created uri: {}", uri);
} catch (URISyntaxException e) {
LOGGER.error("could not create uri from path: {}", path);
}
return uri;
}
public URI stockNames() {
return createUri(STOCK_NAMES_URI);
}
public URI dates() {
return createUri(STOCK_DATES_URI);
}
}