All files / api/swagger registerSwaggerModuleComponents.ts

100% Statements 37/37
100% Branches 4/4
100% Functions 1/1
100% Lines 37/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 26x 26x 26x 26x 26x 12x 12x 26x 26x 26x 26x 26x 26x 26x 26x 26x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x  
import { moduleLookup } from '@api/module/moduleLookup';
import { SwaggerBuilder } from '@api/swagger/swaggerBuilder';
import { IApiSegment, segmentLabels } from '@constants/api';
import { segmentToDtoName } from './commonSwaggerOptions';
 
export const registerSwaggerModuleComponents = (props: { swaggerBuilder: SwaggerBuilder }) => {
  for (const segment of Object.keys(segmentLabels)) {
    const module = moduleLookup[segment as keyof IApiSegment];
 
    let propsObj = {};
    for (const dtoMetaKey of Object.keys(module.dtoMeta)) {
      const dtoMetaObj = module.dtoMeta[dtoMetaKey];
      let typeDescrip: Record<string, any> | null = {
        type: 'string',
      };
      if (dtoMetaObj.swaggerSchema != null) {
        typeDescrip = dtoMetaObj.swaggerSchema;
      }
 
      propsObj = {
        ...propsObj,
        [dtoMetaKey]: {
          ...typeDescrip,
          nullable: false,
        },
      };
    }
 
    props.swaggerBuilder.addComponent({
      [segmentToDtoName(module.segment)]: {
        type: 'object',
        properties: propsObj,
        additionalProperties: false,
      },
    });
  }
};