Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.taboola.backstage.services.ReportsServiceImpl Maven / Gradle / Ivy
package com.taboola.backstage.services;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;
import com.taboola.backstage.exceptions.BackstageAPIConnectivityException;
import com.taboola.backstage.exceptions.BackstageAPIRequestException;
import com.taboola.backstage.exceptions.BackstageAPIUnauthorizedException;
import com.taboola.backstage.internal.BackstageInternalTools;
import com.taboola.backstage.internal.BackstageMediaReportsEndpoint;
import com.taboola.backstage.internal.BackstagePublisherReportsEndpoint;
import com.taboola.backstage.model.ReportFilter;
import com.taboola.backstage.model.auth.BackstageAuthentication;
import com.taboola.backstage.model.media.reports.CampaignSummaryDimensions;
import com.taboola.backstage.model.media.reports.CampaignSummaryOptionalFilters;
import com.taboola.backstage.model.media.reports.CampaignSummaryReport;
import com.taboola.backstage.model.media.reports.TopCampaignContentOptionalFilters;
import com.taboola.backstage.model.media.reports.TopCampaignContentReport;
import com.taboola.backstage.model.publishers.reports.RecirculationSummaryDimensions;
import com.taboola.backstage.model.publishers.reports.RecirculationSummaryOptionalFilters;
import com.taboola.backstage.model.publishers.reports.RecirculationSummaryReport;
import com.taboola.backstage.model.publishers.reports.RevenueSummaryDimensions;
import com.taboola.backstage.model.publishers.reports.RevenueSummaryOptionalFilters;
import com.taboola.backstage.model.publishers.reports.RevenueSummaryReport;
import com.taboola.backstage.model.publishers.reports.VisitValueDimensions;
import com.taboola.backstage.model.publishers.reports.VisitValueOptionalFilters;
import com.taboola.backstage.model.publishers.reports.VisitValueReport;
/**
* Created by vladi
* Date: 10/28/2017
* Time: 11:10 PM
* By Taboola
*/
public class ReportsServiceImpl implements ReportsService {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE;
private final BackstageMediaReportsEndpoint mediaReportsEndpoint;
private final BackstagePublisherReportsEndpoint publisherReportsService;
private final BackstageInternalTools backstageInternalTools;
private final Boolean organizeDynamicColumns;
public ReportsServiceImpl(BackstageMediaReportsEndpoint mediaReportsEndpoint,
BackstagePublisherReportsEndpoint publisherReportsService,
BackstageInternalTools backstageInternalTools,
Boolean organizeDynamicColumns) {
this.mediaReportsEndpoint = mediaReportsEndpoint;
this.publisherReportsService = publisherReportsService;
this.backstageInternalTools = backstageInternalTools;
this.organizeDynamicColumns = organizeDynamicColumns;
}
@Override
public TopCampaignContentReport getTopCampaignContentReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
return getTopCampaignContentReport(auth, accountId, startDate, endDate, Collections.emptyMap());
}
@Override
public TopCampaignContentReport getTopCampaignContentReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
Map filters) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
String accessToken = auth.getToken().getAccessTokenForHeader();
TopCampaignContentReport report = mediaReportsEndpoint.getTopCampaignContentReport(accessToken, accountId,
DATE_TIME_FORMATTER.format(startDate),
DATE_TIME_FORMATTER.format(endDate),
formatOptionalFilters(filters));
if(organizeDynamicColumns) {
backstageInternalTools.attachDynamicFieldMetadataToFields(report);
}
return report;
}
@Override
public CampaignSummaryReport getCampaignSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate, CampaignSummaryDimensions dimension) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
return getCampaignSummaryReport(auth, accountId, startDate, endDate, dimension, Collections.emptyMap());
}
@Override
public CampaignSummaryReport getCampaignSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
CampaignSummaryDimensions dimension, Map filters) {
String accessToken = auth.getToken().getAccessTokenForHeader();
//TODO verify correct use of filters based on spec and save HTTP call
CampaignSummaryReport report = mediaReportsEndpoint.getCampaignSummary(accessToken, accountId, dimension.getName(),
DATE_TIME_FORMATTER.format(startDate), DATE_TIME_FORMATTER.format(endDate),
formatOptionalFilters(filters));
if(organizeDynamicColumns) {
backstageInternalTools.attachDynamicFieldMetadataToFields(report);
}
return report;
}
private Map formatOptionalFilters(Map filters) {
return filters.entrySet().stream().collect(Collectors.toMap(e -> e.getKey().getName(), Map.Entry::getValue));
}
@Override
public RevenueSummaryReport getRevenueSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
RevenueSummaryDimensions dimension) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
return getRevenueSummaryReport(auth, accountId, startDate, endDate, dimension, Collections.emptyMap());
}
@Override
public RevenueSummaryReport getRevenueSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
RevenueSummaryDimensions dimension, Map filters) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
String accessToken = auth.getToken().getAccessTokenForHeader();
//TODO verify correct use of filters based on spec and save HTTP call
return publisherReportsService.getRevenueSummary(accessToken, accountId, dimension.getName(),
DATE_TIME_FORMATTER.format(startDate),
DATE_TIME_FORMATTER.format(endDate),
formatOptionalFilters(filters));
}
@Override
public VisitValueReport getVisitValueReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
VisitValueDimensions dimension) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
return getVisitValueReport(auth, accountId, startDate, endDate, dimension, Collections.emptyMap());
}
@Override
public VisitValueReport getVisitValueReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
VisitValueDimensions dimension, Map filters) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
String accessToken = auth.getToken().getAccessTokenForHeader();
//TODO verify correct use of filters based on spec and save HTTP call
return publisherReportsService.getVisitValue(accessToken, accountId, dimension.getName(),
DATE_TIME_FORMATTER.format(startDate),
DATE_TIME_FORMATTER.format(endDate),
formatOptionalFilters(filters));
}
@Override
public RecirculationSummaryReport getRecirculationSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
RecirculationSummaryDimensions dimension) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
return getRecirculationSummaryReport(auth, accountId, startDate, endDate, dimension, Collections.emptyMap());
}
@Override
public RecirculationSummaryReport getRecirculationSummaryReport(BackstageAuthentication auth, String accountId, LocalDate startDate, LocalDate endDate,
RecirculationSummaryDimensions dimension, Map filters) throws BackstageAPIUnauthorizedException, BackstageAPIConnectivityException, BackstageAPIRequestException {
String accessToken = auth.getToken().getAccessTokenForHeader();
//TODO verify correct use of filters based on spec and save HTTP call
return publisherReportsService.getRecirculationSummary(accessToken, accountId, dimension.getName(),
DATE_TIME_FORMATTER.format(startDate),
DATE_TIME_FORMATTER.format(endDate),
formatOptionalFilters(filters));
}
}