Skip to content

Commit 37514bd

Browse files
committed
TW-1290 Add an entrypoint for native ads
1 parent 805ba10 commit 37514bd

File tree

4 files changed

+134
-64
lines changed

4 files changed

+134
-64
lines changed

src/advertising/slise.ts

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export const stylePropsNames = [
6666
'right',
6767
'text-align',
6868
'top',
69+
'vertical-align',
6970
'visibility',
7071
'width',
7172
'z-index'
@@ -106,6 +107,7 @@ export interface PermanentSliseAdPlacesRule {
106107
insertAfterSelector?: string;
107108
insertionsCount?: number;
108109
shouldUseDivWrapper: boolean;
110+
elementStyle?: Record<StylePropName, string>;
109111
divWrapperStyle?: Record<StylePropName, string>;
110112
elementToMeasureSelector?: string;
111113
stylesOverrides?: SliseAdStylesOverrides[];
@@ -122,34 +124,29 @@ const SLISE_AD_PROVIDERS_BY_SITES_KEY = 'slise_ad_providers_by_sites';
122124
const SLISE_AD_PROVIDERS_ALL_SITES_KEY = 'slise_ad_providers_all_sites';
123125
const SLISE_AD_PROVIDERS_LIST_KEY = 'slise_ad_providers_list';
124126
const PERMANENT_SLISE_AD_PLACES_RULES_KEY = 'permanent_slise_ad_places_rules';
127+
const PERMANENT_NATIVE_AD_PLACES_RULES_KEY = 'permanent_native_ad_places_rules';
125128

126-
export const {
127-
getByKey: getSliseAdPlacesRulesByDomain,
128-
getAllValues: getAllSliseAdPlacesRules,
129-
upsertValues: upsertSliseAdPlacesRules,
130-
removeValues: removeSliseAdPlacesRules
131-
} = objectStorageMethodsFactory<SliseAdPlacesRule[]>(SLISE_AD_PLACES_RULES_KEY, []);
129+
export const sliseAdPlacesRulesMethods = objectStorageMethodsFactory<SliseAdPlacesRule[]>(
130+
SLISE_AD_PLACES_RULES_KEY,
131+
[]
132+
);
132133

133-
export const {
134-
getByKey: getSliseAdProvidersByDomain,
135-
getAllValues: getAllSliseAdProvidersBySites,
136-
upsertValues: upsertSliseAdProvidersBySites,
137-
removeValues: removeSliseAdProvidersBySites
138-
} = objectStorageMethodsFactory<SliseAdProvidersByDomainRule[]>(SLISE_AD_PROVIDERS_BY_SITES_KEY, []);
134+
export const sliseAdProvidersByDomainRulesMethods = objectStorageMethodsFactory<SliseAdProvidersByDomainRule[]>(
135+
SLISE_AD_PROVIDERS_BY_SITES_KEY,
136+
[]
137+
);
139138

140-
export const {
141-
getByKey: getSelectorsByProviderId,
142-
getAllValues: getAllProviders,
143-
upsertValues: upsertProviders,
144-
removeValues: removeProviders
145-
} = objectStorageMethodsFactory<string[]>(SLISE_AD_PROVIDERS_LIST_KEY, []);
139+
export const sliseAdProvidersMethods = objectStorageMethodsFactory<string[]>(SLISE_AD_PROVIDERS_LIST_KEY, []);
146140

147-
export const {
148-
getByKey: getPermanentSliseAdPlacesRulesByDomain,
149-
getAllValues: getAllPermanentSliseAdPlacesRules,
150-
upsertValues: upsertPermanentSliseAdPlacesRules,
151-
removeValues: removePermanentSliseAdPlacesRules
152-
} = objectStorageMethodsFactory<PermanentSliseAdPlacesRule[]>(PERMANENT_SLISE_AD_PLACES_RULES_KEY, []);
141+
export const permanentSliseAdPlacesMethods = objectStorageMethodsFactory<PermanentSliseAdPlacesRule[]>(
142+
PERMANENT_SLISE_AD_PLACES_RULES_KEY,
143+
[]
144+
);
145+
146+
export const permanentNativeAdPlacesMethods = objectStorageMethodsFactory<PermanentSliseAdPlacesRule[]>(
147+
PERMANENT_NATIVE_AD_PLACES_RULES_KEY,
148+
[]
149+
);
153150

154151
export const getSliseAdProvidersForAllSites = async () => redisClient.smembers(SLISE_AD_PROVIDERS_ALL_SITES_KEY);
155152

src/routers/slise-ad-rules/ad-places.ts

Lines changed: 108 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
import { Router } from 'express';
22

33
import {
4-
getAllPermanentSliseAdPlacesRules,
5-
getAllSliseAdPlacesRules,
6-
getPermanentSliseAdPlacesRulesByDomain,
7-
getSliseAdPlacesRulesByDomain,
8-
removePermanentSliseAdPlacesRules,
9-
removeSliseAdPlacesRules,
10-
upsertPermanentSliseAdPlacesRules,
11-
upsertSliseAdPlacesRules
4+
permanentNativeAdPlacesMethods,
5+
permanentSliseAdPlacesMethods,
6+
sliseAdPlacesRulesMethods
127
} from '../../advertising/slise';
138
import { addObjectStorageMethodsToRouter } from '../../utils/express-helpers';
149
import {
@@ -210,6 +205,11 @@ import {
210205
* shouldUseDivWrapper:
211206
* type: boolean
212207
* description: Whether the Slise ads banner should be wrapped in a div
208+
* elementStyle:
209+
* type: object
210+
* description: Style of the new ad banner
211+
* additionalProperties:
212+
* type: string
213213
* divWrapperStyle:
214214
* type: object
215215
* description: Style of the div wrapper
@@ -263,6 +263,104 @@ import {
263263

264264
export const sliseAdPlacesRulesRouter = Router();
265265

266+
/**
267+
* @swagger
268+
* /api/slise-ad-rules/ad-places/permanent-native/{domain}:
269+
* get:
270+
* summary: Get rules for permanent native ads places for the specified domain
271+
* tags:
272+
* - Slise ad places
273+
* parameters:
274+
* - in: path
275+
* name: domain
276+
* required: true
277+
* schema:
278+
* type: string
279+
* format: hostname
280+
* example: 'etherscan.io'
281+
* responses:
282+
* '200':
283+
* description: Rules list
284+
* content:
285+
* application/json:
286+
* schema:
287+
* type: array
288+
* items:
289+
* $ref: '#/components/schemas/PermanentSliseAdPlacesRule'
290+
* '500':
291+
* $ref: '#/components/responses/ErrorResponse'
292+
* /api/slise-ad-rules/ad-places/permanent-native:
293+
* get:
294+
* summary: Get all rules for permanent native ads places
295+
* tags:
296+
* - Slise ad places
297+
* responses:
298+
* '200':
299+
* description: Domain - rules list dictionary
300+
* content:
301+
* application/json:
302+
* schema:
303+
* $ref: '#/components/schemas/PermanentSliseAdPlacesRulesDictionary'
304+
* '500':
305+
* $ref: '#/components/responses/ErrorResponse'
306+
* post:
307+
* summary: Add rules for permanent ads places. If rules for a domain already exist, they will be overwritten
308+
* tags:
309+
* - Slise ad places
310+
* security:
311+
* - basicAuth: []
312+
* requestBody:
313+
* description: Domain - rules list dictionary
314+
* content:
315+
* application/json:
316+
* schema:
317+
* $ref: '#/components/schemas/PermanentSliseAdPlacesRulesDictionary'
318+
* responses:
319+
* '200':
320+
* $ref: '#/components/responses/SuccessResponse'
321+
* '400':
322+
* $ref: '#/components/responses/ErrorResponse'
323+
* '401':
324+
* $ref: '#/components/responses/UnauthorizedError'
325+
* '500':
326+
* $ref: '#/components/responses/ErrorResponse'
327+
* delete:
328+
* summary: Remove rules for permanent ads places
329+
* tags:
330+
* - Slise ad places
331+
* security:
332+
* - basicAuth: []
333+
* requestBody:
334+
* description: List of domain names to remove rules for
335+
* content:
336+
* application/json:
337+
* schema:
338+
* type: array
339+
* items:
340+
* type: string
341+
* format: hostname
342+
* example:
343+
* - 'etherscan.io'
344+
* responses:
345+
* '200':
346+
* $ref: '#/components/responses/SuccessResponse'
347+
* '400':
348+
* $ref: '#/components/responses/ErrorResponse'
349+
* '401':
350+
* $ref: '#/components/responses/UnauthorizedError'
351+
* '500':
352+
* $ref: '#/components/responses/ErrorResponse'
353+
*/
354+
addObjectStorageMethodsToRouter(
355+
sliseAdPlacesRulesRouter,
356+
'/permanent-native',
357+
permanentNativeAdPlacesMethods,
358+
'domain',
359+
permanentSliseAdPlacesRulesDictionarySchema,
360+
hostnamesListSchema,
361+
entriesCount => `${entriesCount} entries have been removed`
362+
);
363+
266364
/**
267365
* @swagger
268366
* /api/slise-ad-rules/ad-places/permanent/{domain}:
@@ -354,12 +452,7 @@ export const sliseAdPlacesRulesRouter = Router();
354452
addObjectStorageMethodsToRouter(
355453
sliseAdPlacesRulesRouter,
356454
'/permanent',
357-
{
358-
getByKey: getPermanentSliseAdPlacesRulesByDomain,
359-
getAllValues: getAllPermanentSliseAdPlacesRules,
360-
upsertValues: upsertPermanentSliseAdPlacesRules,
361-
removeValues: removePermanentSliseAdPlacesRules
362-
},
455+
permanentSliseAdPlacesMethods,
363456
'domain',
364457
permanentSliseAdPlacesRulesDictionarySchema,
365458
hostnamesListSchema,
@@ -457,12 +550,7 @@ addObjectStorageMethodsToRouter(
457550
addObjectStorageMethodsToRouter(
458551
sliseAdPlacesRulesRouter,
459552
'/',
460-
{
461-
getByKey: getSliseAdPlacesRulesByDomain,
462-
getAllValues: getAllSliseAdPlacesRules,
463-
upsertValues: upsertSliseAdPlacesRules,
464-
removeValues: removeSliseAdPlacesRules
465-
},
553+
sliseAdPlacesRulesMethods,
466554
'domain',
467555
sliseAdPlacesRulesDictionarySchema,
468556
hostnamesListSchema,

src/routers/slise-ad-rules/providers.ts

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,10 @@ import { Router } from 'express';
22

33
import {
44
addSliseAdProvidersForAllSites,
5-
getAllProviders,
6-
getAllSliseAdProvidersBySites,
7-
getSelectorsByProviderId,
8-
getSliseAdProvidersByDomain,
95
getSliseAdProvidersForAllSites,
10-
removeProviders,
11-
removeSliseAdProvidersBySites,
126
removeSliseAdProvidersForAllSites,
13-
upsertProviders,
14-
upsertSliseAdProvidersBySites
7+
sliseAdProvidersMethods,
8+
sliseAdProvidersByDomainRulesMethods
159
} from '../../advertising/slise';
1610
import { basicAuth } from '../../middlewares/basic-auth.middleware';
1711
import { addObjectStorageMethodsToRouter, withBodyValidation, withExceptionHandler } from '../../utils/express-helpers';
@@ -277,12 +271,7 @@ sliseAdProvidersRouter
277271
addObjectStorageMethodsToRouter(
278272
sliseAdProvidersRouter,
279273
'/by-sites',
280-
{
281-
getAllValues: getAllSliseAdProvidersBySites,
282-
getByKey: getSliseAdProvidersByDomain,
283-
upsertValues: upsertSliseAdProvidersBySites,
284-
removeValues: removeSliseAdProvidersBySites
285-
},
274+
sliseAdProvidersByDomainRulesMethods,
286275
'domain',
287276
sliseAdProvidersByDomainsRulesDictionarySchema,
288277
hostnamesListSchema,
@@ -383,12 +372,7 @@ addObjectStorageMethodsToRouter(
383372
addObjectStorageMethodsToRouter(
384373
sliseAdProvidersRouter,
385374
'/',
386-
{
387-
getAllValues: getAllProviders,
388-
getByKey: getSelectorsByProviderId,
389-
upsertValues: upsertProviders,
390-
removeValues: removeProviders
391-
},
375+
sliseAdProvidersMethods,
392376
'providerId',
393377
sliseAdProvidersDictionarySchema,
394378
adTypesListSchema,

src/utils/schemas.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ const permanentSliseAdPlacesRulesSchema = arraySchema()
148148
insertAfterSelector: cssSelectorSchema,
149149
insertionsCount: numberSchema().integer().min(1).default(1),
150150
shouldUseDivWrapper: booleanSchema().required(),
151+
elementStyle: styleSchema,
151152
divWrapperStyle: styleSchema,
152153
elementToMeasureSelector: cssSelectorSchema,
153154
stylesOverrides: arraySchema().of(sliseAdStylesOverridesSchema.clone().required()),

0 commit comments

Comments
 (0)