Skip to content

Commit

Permalink
feat: change report type to use union string
Browse files Browse the repository at this point in the history
  • Loading branch information
nguyentoanit committed Apr 20, 2020
1 parent 53fe361 commit dafbec1
Show file tree
Hide file tree
Showing 19 changed files with 90 additions and 99 deletions.
2 changes: 1 addition & 1 deletion src/operations/reports/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ export * from './sponsored-brands/index'
export * from './sponsored-products/index'
export * from './report-response'
export * from './report-segments'
export * from './report-types-enum'
export * from './report-types'
23 changes: 0 additions & 23 deletions src/operations/reports/report-types-enum.ts

This file was deleted.

27 changes: 27 additions & 0 deletions src/operations/reports/report-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import * as t from 'io-ts'

/**
* The type of entity for which the Sponsored Products report should be generated.
*/
export const SponsoredProductsReportType = t.union([
t.literal('campaigns'),
t.literal('adGroups'),
t.literal('keywords'),
t.literal('asins'),
t.literal('productAds'),
t.literal('targets'),
])
export type SponsoredProductsReportType = t.TypeOf<typeof SponsoredProductsReportType>

/**
* The type of entity for which the Sponsored Brands report should be generated.
*/
export const SponsoredBrandsReportType = t.union([
t.literal('campaigns'),
t.literal('adGroups'),
t.literal('keywords'),
t.literal('headlineSearch'),
t.literal('searchTerms'),
t.literal('targets'),
])
export type SponsoredBrandsReportType = t.TypeOf<typeof SponsoredBrandsReportType>
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsAdGroupReportMetrics } from '../metrics'

export interface SponsoredBrandsAdGroupReportParams
extends BaseReportParams<SponsoredBrandsReportTypeEnum, SponsoredBrandsAdGroupReportMetrics> {
recordType: SponsoredBrandsReportTypeEnum.AD_GROUPS
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsAdGroupReportMetrics> {
recordType: 'adGroups'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsCampaignReportMetrics } from '../metrics'

export interface SponsoredBrandsCampaignReportParams
extends BaseReportParams<SponsoredBrandsReportTypeEnum, SponsoredBrandsCampaignReportMetrics> {
recordType: SponsoredBrandsReportTypeEnum.CAMPAIGNS
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsCampaignReportMetrics> {
recordType: 'campaigns'
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsHeadlineSearchReportMetrics } from '../metrics'

export interface SponsoredBrandsHeadlineSearchReportParams
extends BaseReportParams<
SponsoredBrandsReportTypeEnum,
SponsoredBrandsHeadlineSearchReportMetrics
> {
recordType: SponsoredBrandsReportTypeEnum.HEADLINE_SEARCH
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsHeadlineSearchReportMetrics> {
recordType: 'headlineSearch'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsKeywordReportMetrics } from '../metrics'

export interface SponsoredBrandsKeywordReportParams
extends BaseReportParams<SponsoredBrandsReportTypeEnum, SponsoredBrandsKeywordReportMetrics> {
recordType: SponsoredBrandsReportTypeEnum.KEYWORDS
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsKeywordReportMetrics> {
recordType: 'keywords'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsSearchTermReportMetrics } from '../metrics'

export interface SponsoredBrandsSearchTermReportParams
extends BaseReportParams<SponsoredBrandsReportTypeEnum, SponsoredBrandsSearchTermReportMetrics> {
recordType: SponsoredBrandsReportTypeEnum.SEARCH_TERM
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsSearchTermReportMetrics> {
recordType: 'searchTerms'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredBrandsReportTypeEnum } from '../report-types-enum'
import { SponsoredBrandsReportType } from '../report-types'
import { SponsoredBrandsTargetReportMetrics } from '../metrics'

export interface SponsoredBrandsTargetReportParams
extends BaseReportParams<SponsoredBrandsReportTypeEnum, SponsoredBrandsTargetReportMetrics> {
recordType: SponsoredBrandsReportTypeEnum.TARGETS
extends BaseReportParams<SponsoredBrandsReportType, SponsoredBrandsTargetReportMetrics> {
recordType: 'targets'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsAdGroupReportMetrics } from '../metrics/sponsored-products-ad-group-report-metrics'

export interface SponsoredProductsAdGroupReportParams
extends BaseReportParams<SponsoredProductsReportTypeEnum, SponsoredProductsAdGroupReportMetrics> {
recordType: SponsoredProductsReportTypeEnum.AD_GROUPS
extends BaseReportParams<SponsoredProductsReportType, SponsoredProductsAdGroupReportMetrics> {
recordType: 'adGroups'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsAsinsReportMetrics } from '../metrics/sponsored-products-asins-report-metrics'

export interface SponsoredProductsAsinsReportParams
extends BaseReportParams<SponsoredProductsReportTypeEnum, SponsoredProductsAsinsReportMetrics> {
recordType: SponsoredProductsReportTypeEnum.ASINS
extends BaseReportParams<SponsoredProductsReportType, SponsoredProductsAsinsReportMetrics> {
recordType: 'asins'
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsCampaignReportMetrics } from '../metrics/sponsored-products-campaign-report-metrics'

export interface SponsoredProductsCampaignReportParams
extends BaseReportParams<
SponsoredProductsReportTypeEnum,
SponsoredProductsCampaignReportMetrics
> {
recordType: SponsoredProductsReportTypeEnum.CAMPAIGNS
extends BaseReportParams<SponsoredProductsReportType, SponsoredProductsCampaignReportMetrics> {
recordType: 'campaigns'
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsKeywordReportMetrics } from '../metrics/sponsored-products-keyword-report-metrics'

export interface SponsoredProductsKeywordReportParams
extends BaseReportParams<SponsoredProductsReportTypeEnum, SponsoredProductsKeywordReportMetrics> {
recordType: SponsoredProductsReportTypeEnum.KEYWORDS
extends BaseReportParams<SponsoredProductsReportType, SponsoredProductsKeywordReportMetrics> {
recordType: 'keywords'
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsProductAdsReportMetrics } from '../metrics/sponsored-products-product-ads-report-metrics'

export interface SponsoredProductsProductAdsReportParams
extends BaseReportParams<
SponsoredProductsReportTypeEnum,
SponsoredProductsProductAdsReportMetrics
> {
recordType: SponsoredProductsReportTypeEnum.PRODUCT_ADS
extends BaseReportParams<SponsoredProductsReportType, SponsoredProductsProductAdsReportMetrics> {
recordType: 'productAds'
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { SponsoredProductsCampaignReportParams } from './sponsored-products-camp
import { SponsoredProductsKeywordReportParams } from './sponsored-products-keyword-report-params'
import { SponsoredProductsProductAdsReportParams } from './sponsored-products-product-ads-report-params'
import { SponsoredProductsTargetsReportParams } from './sponsored-products-targets-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'

type SponsoredProductsReportParams =
| SponsoredProductsAdGroupReportParams
Expand All @@ -28,21 +28,21 @@ function fixRecordTypeResponse(res: ReportResponse): ReportResponse {
return res
}

const fix = (recordType: SponsoredProductsReportTypeEnum): ReportResponse => {
const fix = (recordType: SponsoredProductsReportType): ReportResponse => {
return Object.assign(res, { recordType })
}

switch (res.recordType) {
case 'campaign':
return fix(SponsoredProductsReportTypeEnum.CAMPAIGNS)
return fix('campaigns')
case 'adGroup':
return fix(SponsoredProductsReportTypeEnum.AD_GROUPS)
return fix('adGroups')
case 'keyword':
return fix(SponsoredProductsReportTypeEnum.KEYWORDS)
return fix('keywords')
case 'productAd':
return fix(SponsoredProductsReportTypeEnum.PRODUCT_ADS)
return fix('productAds')
case 'otherAsin':
return fix(SponsoredProductsReportTypeEnum.ASINS)
return fix('asins')
default:
return res
}
Expand Down Expand Up @@ -88,7 +88,7 @@ export class SponsoredProductsReportOperation<
*/
@Decode(ReportResponse)
public requestReport(params: ReportParams) {
if (params.recordType === SponsoredProductsReportTypeEnum.ASINS) {
if (params.recordType === 'asins') {
return this.requestAsinReport(params)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { BaseReportParams } from '../base-report-params'
import { SponsoredProductsReportTypeEnum } from '../report-types-enum'
import { SponsoredProductsReportType } from '../report-types'
import { SponsoredProductsProductTargetingReportMetrics } from '../metrics/sponsored-products-product-targeting-report-metrics'

export interface SponsoredProductsTargetsReportParams
extends BaseReportParams<
SponsoredProductsReportTypeEnum,
SponsoredProductsReportType,
SponsoredProductsProductTargetingReportMetrics
> {
recordType: SponsoredProductsReportTypeEnum.PRODUCT_ATTRIBUTE_TARGETING
recordType: 'targets'
}
6 changes: 2 additions & 4 deletions test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,8 @@ describe('index', () => {
)
expect(index.ReportResponseStatus).toEqual(reportEnum.ReportResponseStatus)
expect(index.ReportSegments).toEqual(reportEnum.ReportSegments)
expect(index.SponsoredBrandsReportTypeEnum).toEqual(reportEnum.SponsoredBrandsReportTypeEnum)
expect(index.SponsoredProductsReportTypeEnum).toEqual(
reportEnum.SponsoredProductsReportTypeEnum,
)
expect(index.SponsoredBrandsReportType).toEqual(reportEnum.SponsoredBrandsReportType)
expect(index.SponsoredProductsReportType).toEqual(reportEnum.SponsoredProductsReportType)
expect(index.SponsoredBrandsAdGroupReportMetrics).toEqual(
reportEnum.SponsoredBrandsAdGroupReportMetrics,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { OperationProvider } from '../../../../src/operations/operation-provider'
import { httpClientFactory } from '../../../http-client-factory'
import { SponsoredBrandsReportOperation } from '../../../../src/operations/reports/sponsored-brands/sponsored-brands-report-operation'
import { SponsoredBrandsReportTypeEnum } from '../../../../src/operations/reports/report-types-enum'
import { ReportResponseStatus } from '../../../../src'

jest.setTimeout(15000)
Expand All @@ -14,7 +13,7 @@ describe('SponsoredBrandsReportOperation', () => {
describe('requestReport', () => {
it(`should return a in progress status`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.CAMPAIGNS,
recordType: 'campaigns',
metrics: ['campaignBudget', 'campaignBudgetType', 'campaignStatus'],
reportDate: '20200314',
})
Expand All @@ -27,7 +26,7 @@ describe('SponsoredBrandsReportOperation', () => {

it(`should return a in progress status with adgroups report`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.AD_GROUPS,
recordType: 'adGroups',
metrics: [
'campaignId',
'campaignName',
Expand All @@ -48,7 +47,7 @@ describe('SponsoredBrandsReportOperation', () => {

it(`should return a in progress status with keywords report`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.KEYWORDS,
recordType: 'keywords',
metrics: [
'campaignId',
'campaignName',
Expand Down Expand Up @@ -77,7 +76,7 @@ describe('SponsoredBrandsReportOperation', () => {
*/
it.skip(`should return a in progress status with headline search report`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.HEADLINE_SEARCH,
recordType: 'headlineSearch',
metrics: [
'campaignName',
'campaignId',
Expand Down Expand Up @@ -105,7 +104,7 @@ describe('SponsoredBrandsReportOperation', () => {
*/
it.skip(`should return a in progress status with search term report`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.SEARCH_TERM,
recordType: 'searchTerms',
metrics: [
'campaignId',
'campaignName',
Expand All @@ -130,7 +129,7 @@ describe('SponsoredBrandsReportOperation', () => {

it(`should return a in progress status with target report`, async () => {
const res = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.TARGETS,
recordType: 'targets',
metrics: [
'campaignId',
'campaignName',
Expand All @@ -157,7 +156,7 @@ describe('SponsoredBrandsReportOperation', () => {
it(`only return report location when report status is SUCCESS`, async () => {
expect.assertions(4)
const requestReportResult = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.KEYWORDS,
recordType: 'keywords',
metrics: [
'campaignId',
'campaignName',
Expand Down Expand Up @@ -188,7 +187,7 @@ describe('SponsoredBrandsReportOperation', () => {
describe('downloadReport', () => {
it('should return the report uncompressed', async () => {
const requestReportResult = await reportOperation.requestReport({
recordType: SponsoredBrandsReportTypeEnum.CAMPAIGNS,
recordType: 'campaigns',
metrics: ['campaignBudget', 'campaignBudgetType', 'campaignStatus'],
reportDate: '20200314',
})
Expand Down
Loading

0 comments on commit dafbec1

Please sign in to comment.