import { Router } from 'express'; import validateSchema from '../tools/validateSchema'; import * as lc from '../controllers/linkController'; import * as ls from '../schemas/linkSchema'; import requireUser from '../middleware/requireUser'; const linkRouter = Router(); /** * @openapi * * /api/v1/link/short: * get: * description: Generates a new short link * tags: [Link] * summary: Get a new short link * parameters: * - name: length * in: query * description: generated URL's length * required: false * schema: * type: integer * format: int32 * default: 9 * minimum: 2 * maximum: 127 * - name: alphanum * in: query * description: whether to use numbers in generated URL * required: false * schema: * type: boolean * default: true * - name: case * in: query * description: whether to use uppercase ("upper"), lowercase ("lower") or mixed case (default) * schema: * type: string * - name: withSubdomain * in: query * description: whether to generate a subdomain too (will be generated only if supported by server) * required: false * schema: * type: boolean * default: false * produces: * - application/json * responses: * 200: * description: Link generated successfully * content: * application/json: * schema: * $ref: '#/components/schemas/LinkResponseDTO' * 400: * description: Bad request * content: * application/json: * schema: * $ref: '#/components/schemas/ErrorDTO' */ linkRouter.get('/api/v1/link/short', validateSchema(ls.shortLinkRequestSchema), lc.generateShortLinkHandler); /** * @openapi * * /api/v1/link/fromWordlist: * get: * description: Generates a new pseudosentence link from wordlist. * tags: [Link] * summary: Get a new "sentence" link * parameters: * - name: withSubdomain * in: query * description: whether to generate a subdomain too (will be generated only if supported by server) * required: false * schema: * type: boolean * default: false * produces: * - application/json * responses: * 200: * description: Link generated successfully * content: * application/json: * schema: * $ref: '#/components/schemas/LinkResponseDTO' * 400: * description: Bad request * content: * application/json: * schema: * $ref: '#/components/schemas/ErrorDTO' */ linkRouter.get('/api/v1/link/fromWordlist', validateSchema(ls.sentenceLinkRequestSchema), lc.generateSentenceLinkHandler); /** * @openapi * * /api/v1/link/new: * post: * description: * Register a new shortened URL.
* See linkSchema.ts for constraints.
* Note: This endpoint's functionality differs depending on the user info, * which means guests will be treated differently from authenticated users. * tags: [Link] * summary: "[AUTHED?] Shorten a link" * requestBody: * required: true * content: * application/json: * schema: * $ref: '#/components/schemas/CreateLinkRequestDTO' * produces: * - application/json * responses: * 200: * description: New link created successfully * content: * application/json: * schema: * $ref: '#/components/schemas/CreateLinkResponseDTO' * 400: * description: Bad request * content: * application/json: * schema: * $ref: '#/components/schemas/ErrorDTO' */ linkRouter.post('/api/v1/link/new', validateSchema(ls.createLinkRequestSchema), lc.createLinkHandler ); export default linkRouter;