86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
/**
|
|
* Simple data API for Weight Tracker
|
|
* This script handles data storage operations when deployed in Docker
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const express = require('express');
|
|
const bodyParser = require('body-parser');
|
|
const cors = require('cors');
|
|
|
|
// Create Express app
|
|
const app = express();
|
|
const port = process.env.PORT || 3000;
|
|
|
|
// Data file path in the Docker volume
|
|
const DATA_DIR = process.env.DATA_DIR || '/data';
|
|
const DATA_FILE = path.join(DATA_DIR, 'weight-tracker-data.json');
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(bodyParser.json({ limit: '5mb' }));
|
|
app.use(express.static('public')); // Serve static files
|
|
|
|
// Ensure data directory exists
|
|
if (!fs.existsSync(DATA_DIR)) {
|
|
fs.mkdirSync(DATA_DIR, { recursive: true });
|
|
console.log(`Created data directory: ${DATA_DIR}`);
|
|
}
|
|
|
|
// Initialize data file if it doesn't exist
|
|
if (!fs.existsSync(DATA_FILE)) {
|
|
const defaultData = {
|
|
weights: [],
|
|
meals: [],
|
|
version: '1.0.0'
|
|
};
|
|
|
|
fs.writeFileSync(DATA_FILE, JSON.stringify(defaultData, null, 2));
|
|
console.log(`Created initial data file: ${DATA_FILE}`);
|
|
}
|
|
|
|
// GET endpoint to retrieve data
|
|
app.get('/data/weight-tracker-data.json', (req, res) => {
|
|
try {
|
|
if (fs.existsSync(DATA_FILE)) {
|
|
const data = fs.readFileSync(DATA_FILE, 'utf8');
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send(data);
|
|
} else {
|
|
res.status(404).send({ error: 'Data file not found' });
|
|
}
|
|
} catch (error) {
|
|
console.error('Error reading data file:', error);
|
|
res.status(500).send({ error: 'Failed to read data file' });
|
|
}
|
|
});
|
|
|
|
// PUT endpoint to update data
|
|
app.put('/data/weight-tracker-data.json', (req, res) => {
|
|
try {
|
|
const data = req.body;
|
|
|
|
// Validate data structure
|
|
if (!data || !data.weights || !data.meals) {
|
|
return res.status(400).send({ error: 'Invalid data structure' });
|
|
}
|
|
|
|
// Write to file
|
|
fs.writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));
|
|
res.send({ success: true, message: 'Data saved successfully' });
|
|
|
|
console.log(`Data updated: ${new Date().toISOString()}`);
|
|
} catch (error) {
|
|
console.error('Error writing data file:', error);
|
|
res.status(500).send({ error: 'Failed to write data file' });
|
|
}
|
|
});
|
|
|
|
// Start server
|
|
app.listen(port, () => {
|
|
console.log(`Data API server running on port ${port}`);
|
|
console.log(`Data directory: ${DATA_DIR}`);
|
|
console.log(`Data file: ${DATA_FILE}`);
|
|
});
|