const fs = require('fs').promises; const { existsSync, appendFileSync } = require('fs'); const path = require('path'); const logger = require('../logger'); const CARD_LOG_PATH = path.resolve(__dirname, '..', process.env.CARD_LOG_PATH); const initCardLogs = async () => { try { await fs.mkdir(path.dirname(CARD_LOG_PATH), { recursive: true }); try { await fs.access(CARD_LOG_PATH); } catch (e) { await fs.writeFile(CARD_LOG_PATH, ''); logger.info(`Card log file created at: ${CARD_LOG_PATH}`); } } catch (err) { logger.error('Failed to initialize card logs:', err); throw err; } }; initCardLogs().catch(err => { logger.error('Card logs initialization error:', err); }); const cardEvent = (req, res) => { logger.info('[CARD EVENT] Received:', req.body); if (!req.body || !req.body.event) { logger.error('Invalid request body:', req.body); return res.status(400).json({ message: 'Missing required field: event' }); } const { event, uid = 'N/A', timestamp = Date.now() } = req.body; const logLine = `[${new Date(timestamp).toISOString()}] [${event}] UID: ${uid}\n`; try { if (!existsSync(CARD_LOG_PATH)) { initCardLogs(); } appendFileSync(CARD_LOG_PATH, logLine); logger.info('[CARD EVENT] Log written to:', CARD_LOG_PATH); return res.status(200).json({ message: 'OK', path: CARD_LOG_PATH }); } catch (err) { logger.error('[CARD EVENT] Failed to write log:', err); return res.status(500).json({ message: 'Failed to write log', error: err.message, path: CARD_LOG_PATH }); } }; const getCardLogs = async (req, res) => { try { try { await fs.access(CARD_LOG_PATH); } catch (e) { await initCardLogs(); return res.status(200).type('text/plain').send('Card logs initialized'); } const logs = await fs.readFile(CARD_LOG_PATH, 'utf-8'); res.type('text/plain').send(logs); } catch (err) { logger.error('Error reading card logs:', err); res.status(500).json({ error: err.message, path: CARD_LOG_PATH }); } }; module.exports = { cardEvent, getCardLogs, initCardLogs };