import { Request, Response } from "express"; import { getConnection } from "typeorm"; import { getSuggestionsDataRepository } from "../repositories/suggestionsData.repository"; import { getSuggestionsMetadataRepository } from "../repositories/suggestionsMetadata.repository"; import { asSuggestionMetadata, asSuggestionsData, } from "./oldPostSuggestionParsing"; import { parseSuggestionsData, parseSuggestionsMetadata, } from "./postSuggestionsParsing"; import { NewPostSuggestions, OldPostSuggestions, PostSuggestions, } from "./types"; export default async function postSuggestions( req: Request, res: Response ): Promise { if (isOldVersion(req.body)) { await oldPostSuggestions( req as Request, res ); } else { await newPostSuggestions( req as Request, res ); } } async function newPostSuggestions( req: Request, res: Response ): Promise { if (req.body.data.length !== req.body.metadata.length) { req.logger.error("Request data length is not matching metadata length", { dataLength: req.body.data.length, metadataLength: req.body.metadata.length, }); res.sendStatus(400); return; } req.logger.info("Suggestions received", { num_of_suggestions: req.body.data.length, }); await getConnection().transaction(async (entityManager) => { const suggestsionsMetadata = await getSuggestionsMetadataRepository( entityManager ).save(parseSuggestionsMetadata(req.body.metadata, req.user)); await getSuggestionsDataRepository(entityManager).save( parseSuggestionsData(req.body.data, suggestsionsMetadata) ); }); res.sendStatus(200); } async function oldPostSuggestions( req: Request, res: Response ): Promise { req.logger.info("Old version suggestions received", { num_of_suggestions: req.body.suggestions.length, }); await getConnection().transaction(async (entityManager) => { const suggestionsMetadata = await getSuggestionsMetadataRepository( entityManager ).save(req.body.suggestions.map(asSuggestionMetadata(req.user))); await getSuggestionsDataRepository(entityManager).save( asSuggestionsData(req.body.suggestions, suggestionsMetadata) ); }); res.sendStatus(200); } function isOldVersion(body: PostSuggestions): body is OldPostSuggestions { return !!(body as OldPostSuggestions).suggestions; }