99 adProvidersByDomainRulesMethods ,
1010 AdProviderSelectorsRule ,
1111 filterRules ,
12- AdProvidersByDomainRule
12+ AdProvidersByDomainRule ,
13+ adProvidersCategoriesMethods
1314} from '../../advertising/external-ads' ;
1415import { basicAuth } from '../../middlewares/basic-auth.middleware' ;
1516import { addObjectStorageMethodsToRouter , withBodyValidation , withExceptionHandler } from '../../utils/express-helpers' ;
@@ -18,7 +19,8 @@ import {
1819 nonEmptyStringsListSchema ,
1920 hostnamesListSchema ,
2021 adProvidersByDomainsRulesDictionarySchema ,
21- adProvidersDictionarySchema
22+ adProvidersDictionarySchema ,
23+ adProvidersCategoriesDictionarySchema
2224} from '../../utils/schemas' ;
2325
2426/**
@@ -116,6 +118,12 @@ import {
116118 * type: array
117119 * items:
118120 * $ref: '#/components/schemas/AdProvidersInputValue'
121+ * AdProvidersCategoriesDictionary:
122+ * type: object
123+ * additionalProperties:
124+ * type: array
125+ * items:
126+ * type: string
119127 */
120128
121129export const adProvidersRouter = Router ( ) ;
@@ -328,6 +336,78 @@ addObjectStorageMethodsToRouter<AdProvidersByDomainRule[]>(adProvidersRouter, {
328336 objectTransformFn : identity
329337} ) ;
330338
339+ /**
340+ * @swagger
341+ * /api/slise-ad-rules/providers/categories:
342+ * get:
343+ * summary: Get categories for providers
344+ * tags:
345+ * - Known ads providers
346+ * responses:
347+ * '200':
348+ * description: Provider - categories dictionary
349+ * content:
350+ * application/json:
351+ * schema:
352+ * $ref: '#/components/schemas/AdProvidersCategoriesDictionary'
353+ * '500':
354+ * $ref: '#/components/responses/ErrorResponse'
355+ * post:
356+ * summary: Upsert categories for providers
357+ * tags:
358+ * - Known ads providers
359+ * security:
360+ * - basicAuth: []
361+ * requestBody:
362+ * description: Provider - categories dictionary
363+ * content:
364+ * application/json:
365+ * schema:
366+ * $ref: '#/components/schemas/AdProvidersCategoriesDictionary'
367+ * responses:
368+ * '200':
369+ * $ref: '#/components/responses/SuccessResponse'
370+ * '400':
371+ * $ref: '#/components/responses/ErrorResponse'
372+ * '401':
373+ * $ref: '#/components/responses/UnauthorizedError'
374+ * '500':
375+ * $ref: '#/components/responses/ErrorResponse'
376+ * delete:
377+ * summary: Delete categories for providers
378+ * tags:
379+ * - Known ads providers
380+ * security:
381+ * - basicAuth: []
382+ * requestBody:
383+ * description: List of provider IDs for which categories should be deleted
384+ * content:
385+ * application/json:
386+ * schema:
387+ * type: array
388+ * items:
389+ * type: string
390+ * responses:
391+ * '200':
392+ * $ref: '#/components/responses/SuccessResponse'
393+ * '400':
394+ * $ref: '#/components/responses/ErrorResponse'
395+ * '401':
396+ * $ref: '#/components/responses/UnauthorizedError'
397+ * '500':
398+ * $ref: '#/components/responses/ErrorResponse'
399+ */
400+ addObjectStorageMethodsToRouter < string [ ] > ( adProvidersRouter , {
401+ path : '/categories' ,
402+ methods : adProvidersCategoriesMethods ,
403+ keyName : 'providerId' ,
404+ objectValidationSchema : adProvidersCategoriesDictionarySchema ,
405+ keysArrayValidationSchema : nonEmptyStringsListSchema ,
406+ successfulRemovalMessage : entriesCount => `${ entriesCount } entries have been removed` ,
407+ valueTransformFn : identity ,
408+ objectTransformFn : identity
409+ } ) ;
410+
331411/**
332412 * @swagger
333413 * /api/slise-ad-rules/providers/negative-selectors:
0 commit comments