95 lines
3.4 KiB
JavaScript
95 lines
3.4 KiB
JavaScript
const express = require('express');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const auth = require('../middleware/auth');
|
|
const logger = require('../logger');
|
|
|
|
const router = express.Router();
|
|
const dataDir = '/data';
|
|
|
|
// Ensure the /data directory exists
|
|
if (!fs.existsSync(dataDir)) {
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
}
|
|
|
|
// Ensure the tags.json file exists
|
|
const tagsFilePath = path.join(dataDir, 'tags.json');
|
|
if (!fs.existsSync(tagsFilePath)) {
|
|
fs.writeFileSync(tagsFilePath, JSON.stringify([]));
|
|
}
|
|
|
|
// Protect the /add-task endpoint with authentication
|
|
router.post('/add-task', auth, async (req, res) => {
|
|
const { subject, description, scheduled } = req.body;
|
|
const currentDateTime = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '');
|
|
|
|
// Format the scheduled date and time for Org mode
|
|
const scheduledDate = new Date(scheduled);
|
|
const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
const dayName = dayNames[scheduledDate.getUTCDay()];
|
|
|
|
let formattedScheduled;
|
|
if (scheduledDate.getUTCHours() === 0 && scheduledDate.getUTCMinutes() === 0) {
|
|
// No time provided, format without time
|
|
formattedScheduled = `<${scheduledDate.getUTCFullYear()}-${String(scheduledDate.getUTCMonth() + 1).padStart(2, '0')}-${String(scheduledDate.getUTCDate()).padStart(2, '0')} ${dayName}>`;
|
|
} else {
|
|
// Time provided, format with time
|
|
formattedScheduled = `<${scheduledDate.getUTCFullYear()}-${String(scheduledDate.getUTCMonth() + 1).padStart(2, '0')}-${String(scheduledDate.getUTCDate()).padStart(2, '0')} ${dayName} ${String(scheduledDate.getUTCHours()).padStart(2, '0')}:${String(scheduledDate.getUTCMinutes()).padStart(2, '0')}>`;
|
|
}
|
|
|
|
let orgFormattedData = `* TODO ${subject}
|
|
SCHEDULED: ${formattedScheduled}
|
|
:LOGBOOK:
|
|
- State "TODO" from "TODO" [${currentDateTime}]
|
|
:END:
|
|
`;
|
|
|
|
if (description) {
|
|
orgFormattedData = `* TODO ${subject}
|
|
${description}
|
|
SCHEDULED: ${formattedScheduled}
|
|
:LOGBOOK:
|
|
- State "TODO" from "TODO" [${currentDateTime}]
|
|
:END:
|
|
`;
|
|
logger.info(`Task added: ${orgFormattedData}`);
|
|
}
|
|
|
|
const filePath = path.join(dataDir, 'tasks.org');
|
|
try {
|
|
await fs.promises.appendFile(filePath, orgFormattedData);
|
|
res.json({ message: 'Task added successfully' });
|
|
} catch (error) {
|
|
logger.error('Error writing to tasks.org file:', error);
|
|
res.status(500).json({ message: 'Error adding task' });
|
|
}
|
|
});
|
|
|
|
// Endpoint to save tags
|
|
router.post('/save-tags', auth, async (req, res) => {
|
|
const { tags } = req.body;
|
|
const filePath = path.join(dataDir, 'tags.json');
|
|
try {
|
|
await fs.promises.writeFile(filePath, JSON.stringify(tags));
|
|
res.send({ message: 'Tags saved successfully!' });
|
|
logger.info(`New tags saved: ${tags}`);
|
|
} catch (err) {
|
|
logger.error('Error saving tags:', err);
|
|
res.status(500).send('Error saving tags.');
|
|
}
|
|
});
|
|
|
|
// Endpoint to retrieve tags
|
|
router.get('/get-tags', auth, async (req, res) => {
|
|
const filePath = path.join(dataDir, 'tags.json');
|
|
try {
|
|
const data = await fs.promises.readFile(filePath, 'utf-8');
|
|
const tags = JSON.parse(data);
|
|
res.json(tags);
|
|
} catch (err) {
|
|
logger.error('Error retrieving tags:', err);
|
|
res.status(500).json({ error: 'Error retrieving tags' });
|
|
}
|
|
});
|
|
|
|
module.exports = router; |