2025-07-10 10:56:52 -06:00

225 lines
6.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const nocodbService = require('../services/nocodb');
const config = require('../config');
const logger = require('../utils/logger');
const { generateQRCode } = require('../services/qrcode');
// Debug session endpoint
router.get('/session', (req, res) => {
res.json({
sessionID: req.sessionID,
session: req.session,
cookies: req.cookies,
authenticated: req.session?.authenticated || false
});
});
// Check table structure
router.get('/table-structure', async (req, res) => {
try {
const response = await nocodbService.getAll(config.nocodb.tableId, {
limit: 1
});
const sample = response.list?.[0] || {};
res.json({
success: true,
fields: Object.keys(sample),
sampleRecord: sample,
idField: sample.ID ? 'ID' : (sample.Id ? 'Id' : (sample.id ? 'id' : 'unknown'))
});
} catch (error) {
logger.error('Error checking table structure:', error);
res.status(500).json({
success: false,
error: 'Failed to check table structure'
});
}
});
// QR code generation test
router.get('/test-qr', async (req, res) => {
try {
const testUrl = req.query.url || 'https://example.com/test';
const testSize = parseInt(req.query.size) || 200;
logger.info('Testing local QR code generation...');
const qrOptions = {
type: 'png',
width: testSize,
margin: 1,
color: {
dark: '#000000',
light: '#FFFFFF'
},
errorCorrectionLevel: 'M'
};
const buffer = await generateQRCode(testUrl, qrOptions);
res.set({
'Content-Type': 'image/png',
'Content-Length': buffer.length
});
res.send(buffer);
} catch (error) {
logger.error('QR code test failed:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// Walk sheet configuration debug
router.get('/walk-sheet-config', async (req, res) => {
try {
const debugInfo = {
settingsSheetId: config.nocodb.settingsSheetId,
settingsSheetConfigured: process.env.NOCODB_SETTINGS_SHEET,
hasSettingsSheet: !!config.nocodb.settingsSheetId,
timestamp: new Date().toISOString()
};
if (!config.nocodb.settingsSheetId) {
return res.json({
success: true,
debug: debugInfo,
message: 'Settings sheet not configured'
});
}
// Test connection to settings sheet
const response = await nocodbService.getAll(config.nocodb.settingsSheetId, {
limit: 5,
sort: '-created_at'
});
const records = response.list || [];
const sampleRecord = records[0] || {};
res.json({
success: true,
debug: {
...debugInfo,
connectionTest: 'success',
recordCount: records.length,
availableFields: Object.keys(sampleRecord),
sampleRecord: sampleRecord,
recentRecords: records.slice(0, 3).map(r => ({
id: r.id || r.Id || r.ID,
created_at: r.created_at,
walk_sheet_title: r.walk_sheet_title,
hasQrCodes: !!(r.qr_code_1_url || r.qr_code_2_url || r.qr_code_3_url)
}))
}
});
} catch (error) {
logger.error('Error debugging walk sheet config:', error);
res.json({
success: false,
debug: {
settingsSheetId: config.nocodb.settingsSheetId,
settingsSheetConfigured: process.env.NOCODB_SETTINGS_SHEET,
hasSettingsSheet: !!config.nocodb.settingsSheetId,
timestamp: new Date().toISOString(),
error: error.message,
errorDetails: error.response?.data
}
});
}
});
// Test walk sheet save
router.post('/test-walk-sheet-save', async (req, res) => {
try {
const testConfig = {
walk_sheet_title: 'Test Walk Sheet',
walk_sheet_subtitle: 'Test Subtitle',
walk_sheet_footer: 'Test Footer',
qr_code_1_url: 'https://example.com/test1',
qr_code_1_label: 'Test QR 1',
qr_code_2_url: 'https://example.com/test2',
qr_code_2_label: 'Test QR 2',
qr_code_3_url: 'https://example.com/test3',
qr_code_3_label: 'Test QR 3'
};
logger.info('Testing walk sheet configuration save...');
if (!config.nocodb.settingsSheetId) {
return res.json({
success: false,
test: 'failed',
error: 'Settings sheet not configured',
config: testConfig
});
}
const walkSheetData = {
created_at: new Date().toISOString(),
created_by: req.session.userEmail,
...testConfig
};
const response = await nocodbService.create(
config.nocodb.settingsSheetId,
walkSheetData
);
res.json({
success: true,
test: 'passed',
message: 'Test walk sheet configuration saved successfully',
testData: walkSheetData,
saveResponse: response,
settingsId: response.id || response.Id || response.ID
});
} catch (error) {
logger.error('Test walk sheet save failed:', error);
res.json({
success: false,
test: 'failed',
error: error.message,
errorDetails: error.response?.data,
timestamp: new Date().toISOString()
});
}
});
// Raw walk sheet data
router.get('/walk-sheet-raw', async (req, res) => {
try {
if (!config.nocodb.settingsSheetId) {
return res.json({ error: 'No settings sheet ID configured' });
}
const response = await nocodbService.getAll(config.nocodb.settingsSheetId, {
sort: '-created_at',
limit: 5
});
return res.json({
success: true,
tableId: config.nocodb.settingsSheetId,
records: response.list || [],
count: response.list?.length || 0
});
} catch (error) {
logger.error('Error fetching raw walk sheet data:', error);
return res.status(500).json({
success: false,
error: error.message
});
}
});
module.exports = router;