Files
fibonacci-fold/server/server.js
Christian Medina d0e8d36c33
Some checks failed
Deploy to Firebase Hosting on merge / build_and_deploy (push) Has been cancelled
latest changes before server transfer
2025-08-05 15:42:36 -04:00

109 lines
3.4 KiB
JavaScript
Executable File

const authRoutes = require('./authRoutes');
const app = require('./app');
const db = require('./db');
// Routes
app.use(authRoutes);
// Create new session
app.post('/api/session', async (req, res) => {
const sessionId = req.body.sessionId;
const query = 'INSERT INTO sessions (id) VALUES (?)';
await db.query(query, [sessionId], (err, result) => {
if (err) return res.status(500).json({ error: err });
res.json({ sessionId });
});
});
// Add user to session
app.post('/api/session/:sessionId/user', async (req, res) => {
const { sessionId } = req.params;
const { userId, provider } = req.body;
// Insert the user into the `users` table if they don't already exist
const userQuery = `
INSERT INTO users (id, provider)
VALUES (?, ?)
ON DUPLICATE KEY UPDATE id = id`; // If the user already exists, do nothing
// Insert the user into the `session_users` table for this session
const sessionUserQuery = `
INSERT INTO session_users (session_id, user_id, provider)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE session_id = session_id`; // If the user is already in the session, do nothing
// Insert the initial vote (-1) for the user in this session
const voteQuery = `
INSERT INTO votes (session_id, user_id, vote)
VALUES (?, ?, -1)
ON DUPLICATE KEY UPDATE vote = -1`; // If a vote already exists, reset it to -1
try {
// Insert the user into the `users` table
await db.query(userQuery, [userId, provider]);
// Add the user to the `session_users` table
await db.query(sessionUserQuery, [sessionId, userId, provider]);
// Set the initial vote for the user in the session
await db.query(voteQuery, [sessionId, userId]);
res.json({ userId });
} catch (err) {
console.error('Error adding user to session:', err);
res.status(500).json({ error: 'Server error' });
}
});
// Get users in a session
app.get('/api/session/:sessionId/users', async (req, res) => {
const { sessionId } = req.params;
const query = `
SELECT session_users.user_id, session_users.provider
FROM session_users
WHERE session_id = ?
`;
try {
const [results] = await db.query(query, [sessionId]);
console.log('Query results:', results);
res.json(results);
} catch (err) {
console.error('Error fetching session users:', err);
res.status(500).json({ error: 'Server error' });
}
});
app.delete('/api/session/:sessionId/votes/:userId', async (req, res) => {
const { sessionId, userId } = req.params;
const query = 'DELETE FROM votes WHERE session_id = ? AND user_id = ?';
try {
const [result] = await db.query(query, [sessionId, userId]);
res.json({ success: true, message: 'Vote removed successfully' });
} catch (error) {
console.error('Error removing vote:', error);
res.status(500).json({ error: 'Server error' });
}
});
app.delete('/api/session/:sessionId/users/:userId', async (req, res) => {
const { sessionId, userId } = req.params;
const query =
'DELETE FROM session_users WHERE session_id = ? AND user_id = ?';
try {
const [result] = await db.query(query, [sessionId, userId]);
res.json({ success: true, message: 'User removed successfully' });
} catch (error) {
console.error('Error removing user:', error);
res.status(500).json({ error: 'Server error' });
}
});
// Start the server
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});