'use strict'; const normalize = (value) => String(value || '').trim(); module.exports = async (ctx, next) => { try { const query = ctx?.request?.query || {}; const body = ctx?.request?.body || {}; const rawUserId = normalize( query.userid || query.userId || query.creator || body.userid || body.userId || body.creator, ); if (!rawUserId) { await next(); return; } const models = ctx?.app?.fs?.dc?.models || {}; const TenderUser = models.TenderUser; if (!TenderUser) { await next(); return; } let mappedUserId = ''; const byPepId = await TenderUser.findOne({ attributes: ['id', 'pepId'], where: { pepId: rawUserId, deletedAt: null }, raw: true, }); if (byPepId?.pepId !== undefined && byPepId?.pepId !== null) { mappedUserId = String(byPepId.pepId); } else { const byId = await TenderUser.findOne({ attributes: ['id', 'pepId'], where: { id: rawUserId, deletedAt: null }, raw: true, }); if (byId?.id !== undefined && byId?.id !== null) { mappedUserId = byId.pepId ? String(byId.pepId) : String(byId.id); } else { const byExternalId = await TenderUser.findOne({ attributes: ['id', 'pepId'], where: { externalUserId: rawUserId, deletedAt: null }, raw: true, }); if (byExternalId?.id !== undefined && byExternalId?.id !== null) { mappedUserId = byExternalId.pepId ? String(byExternalId.pepId) : String(byExternalId.id); } } } if (mappedUserId) { if (query.userid !== undefined || query.userId !== undefined) { query.userId = mappedUserId; } if (query.creator !== undefined) { query.creator = mappedUserId; } if (body.userid !== undefined || body.userId !== undefined) { body.userId = mappedUserId; } if (body.creator !== undefined || body.userid !== undefined || body.userId !== undefined) { body.creator = mappedUserId; } ctx.fs = ctx.fs || {}; ctx.fs.userIdMapping = { externalUserId: rawUserId, internalUserId: mappedUserId, }; } await next(); } catch (error) { ctx.logger.error(error); await next(); } };