88 lines
2.3 KiB
TypeScript
88 lines
2.3 KiB
TypeScript
import express from 'express';
|
|
import cors from 'cors';
|
|
import sqlite3 from 'sqlite3';
|
|
import { open } from 'sqlite';
|
|
import dotenv from 'dotenv';
|
|
import path from 'path';
|
|
|
|
dotenv.config();
|
|
|
|
const app = express();
|
|
const port = process.env.PORT || 3000;
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Database connection
|
|
let db;
|
|
async function initializeDatabase() {
|
|
try {
|
|
db = await open({
|
|
filename: './database.sqlite',
|
|
driver: sqlite3.Database
|
|
});
|
|
|
|
await db.exec(`
|
|
CREATE TABLE IF NOT EXISTS events (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
date TEXT NOT NULL,
|
|
location TEXT,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
`);
|
|
console.log('Database initialized successfully');
|
|
} catch (error) {
|
|
console.error('Error initializing database:', error);
|
|
}
|
|
}
|
|
|
|
// Serve static files from the frontend build directory
|
|
app.use(express.static(path.join(__dirname, '../frontend/build')));
|
|
|
|
// API Routes
|
|
app.get('/api/events', async (req, res) => {
|
|
try {
|
|
const rows = await db.all('SELECT * FROM events');
|
|
console.log('Fetched events:', rows);
|
|
res.json(rows);
|
|
} catch (error) {
|
|
console.error('Error fetching events:', error);
|
|
res.status(500).json({
|
|
error: 'Internal server error',
|
|
details: error instanceof Error ? error.message : 'Unknown error'
|
|
});
|
|
}
|
|
});
|
|
|
|
app.post('/api/events', async (req, res) => {
|
|
try {
|
|
const { title, description, date, location } = req.body;
|
|
console.log('Creating event with data:', { title, description, date, location });
|
|
const result = await db.run(
|
|
'INSERT INTO events (title, description, date, location) VALUES (?, ?, ?, ?)',
|
|
[title, description, date, location]
|
|
);
|
|
console.log('Event created:', result);
|
|
res.status(201).json(result);
|
|
} catch (error) {
|
|
console.error('Error creating event:', error);
|
|
res.status(500).json({
|
|
error: 'Internal server error',
|
|
details: error instanceof Error ? error.message : 'Unknown error'
|
|
});
|
|
}
|
|
});
|
|
|
|
// Serve the React app for all other routes
|
|
app.get('*', (req, res) => {
|
|
res.sendFile(path.join(__dirname, '../frontend/build/index.html'));
|
|
});
|
|
|
|
// Start server
|
|
app.listen(port, () => {
|
|
console.log(`Server running on port ${port}`);
|
|
initializeDatabase();
|
|
});
|