import { pipe } from './utils'; import { MockCategory } from './enums'; import { ILogger, IMockRepository } from './types'; import { getMockData } from '../mockData'; // the data source could be a database, a file, or a remote API, etc., so this could be modified to fit the needs. // main condition is that this repository needs to fulfill the IChatUserMockRepository interface all the time // to guarantee that the service will work properly where implemented export const getMockRepository = (logger: ILogger): IMockRepository => { const parseTokenToFileName = (token: string): string | Error => { try { return token.replace(/\//g, '_'); } catch (e) { logger.error(e); return new Error(`Error parsing token: ${token}`); } }; const getMockFile = ( fileName: string, mockCategory: MockCategory ) => getMockData(mockCategory, fileName); const getMockDataByMockToken = ( token: string, mockCategory: MockCategory ): T | Error => { try { if (token === undefined) return new Error('No token provided'); return pipe(token, parseTokenToFileName, (fileName) => getMockFile(fileName, mockCategory)); } catch (e) { logger.error(e); return new Error(`Error getting mock data for token: ${token}`); } }; return { getMockDataByMockToken }; };