Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
147 lines (126 loc) · 4.31 KB
/
Copy pathserver.js
File metadata and controls
147 lines (126 loc) · 4.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
const path = require('path');
const express = require('express');
const session = require('express-session');
const http = require('http');
const { Server } = require('socket.io');
// Import configuration and database
const connectDB = require('./server/config/database');
// Import routes
const authRoutes = require('./server/routes/auth');
const postRoutes = require('./server/routes/posts');
const workoutRoutes = require('./server/routes/workouts');
const userRoutes = require('./server/routes/users');
const reviewRoutes = require('./server/routes/reviews');
const appointmentRoutes = require('./server/routes/appointments');
const gymRoutes = require('./server/routes/gyms');
const messageRoutes = require('./server/routes/messages');
const packageRoutes = require('./server/routes/packages');
const subscriptionRoutes = require('./server/routes/subscriptions');
const notificationRoutes = require('./server/routes/notifications');
// Initialize app
const app = express();
const serverHttp = http.createServer(app);
const socketServer = new Server(serverHttp);
// Connect to database
connectDB();
// Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Session configuration
app.use(
session({
secret: 'myworkoutplan-secret-key-2024',
resave: false,
saveUninitialized: false,
cookie: {
secure: false, // Set to true in production with HTTPS
maxAge: 24 * 60 * 60 * 1000 // 24 hours
}
})
);
// Static files
app.use(express.static(path.join(__dirname, 'public')));
app.use('/uploads', express.static(path.join(__dirname, 'public/uploads')));
// Store socket.io instance for access in routes
app.set('io', socketServer);
// API Routes
app.use('/api/auth', authRoutes);
app.use('/api/posts', postRoutes);
app.use('/api/workouts', workoutRoutes);
app.use('/api/users', userRoutes);
app.use('/api/reviews', reviewRoutes);
app.use('/api/appointments', appointmentRoutes);
app.use('/api/gyms', gymRoutes);
app.use('/api/messages', messageRoutes);
app.use('/api/packages', packageRoutes);
app.use('/api/subscriptions', subscriptionRoutes);
app.use('/api/notifications', notificationRoutes);
// Socket.io for real-time chat
socketServer.on('connection', (socket) => {
console.log('User connected:', socket.id);
// Join personal room
socket.on('join', (userId) => {
socket.join(userId);
console.log(`User ${userId} joined room`);
});
// Send message
socket.on('sendMessage', (data) => {
const { toUserId, fromUserId, message } = data;
socket.to(toUserId).emit('receiveMessage', {
from: fromUserId,
message,
timestamp: new Date()
});
});
// Typing indicator
socket.on('typing', (data) => {
const { toUserId, fromUserId } = data;
socket.to(toUserId).emit('userTyping', {
userId: fromUserId
});
});
socket.on('stopTyping', (data) => {
const { toUserId, fromUserId } = data;
socket.to(toUserId).emit('userStopTyping', {
userId: fromUserId
});
});
socket.on('disconnect', () => {
console.log('User disconnected:', socket.id);
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error('Server error:', err);
res.status(500).json({ error: 'Something went wrong!' });
});
// Serve home page (landing page)
app.get('/', (req, res) => {
// If user is logged in, redirect to app
if (req.session && req.session.userId) {
return res.redirect('/app.html');
}
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
// Serve login/register page
app.get('/login', (req, res) => {
// If user is logged in, redirect to app
if (req.session && req.session.userId) {
return res.redirect('/app.html');
}
res.sendFile(path.join(__dirname, 'public', 'login.html'));
});
// Redirect old /home to /
app.get('/home', (req, res) => {
res.redirect('/');
});
// 404 handler
app.use((req, res) => {
res.status(404).sendFile(path.join(__dirname, 'public', 'index.html'));
});
// Start server
const PORT = process.env.PORT || 3000;
serverHttp.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
console.log(`Serving static files from: ${path.join(__dirname, 'public')}`);
});