Skip to content

Commit 90e2c3b

Browse files
committed
feat: Implement basic chat-app concept
1 parent f7ed68f commit 90e2c3b

6 files changed

Lines changed: 1491 additions & 0 deletions

File tree

chat-app/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/

chat-app/backend/index.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import express from "express";
2+
import cors from "cors";
3+
4+
const app = express();
5+
app.use(cors());
6+
app.use(express.json());
7+
8+
const port = 3000;
9+
const messages = [
10+
{
11+
message: "Hello",
12+
user: "Jane",
13+
time: Date.now() - 6000,
14+
},
15+
{
16+
message: "Hey",
17+
user: "John",
18+
time: Date.now() - 3000,
19+
},
20+
{
21+
message: "Hi",
22+
user: "Bob",
23+
time: Date.now(),
24+
},
25+
];
26+
const callbacksForNewMessages = [];
27+
28+
app.get("/", (req, res) => {
29+
res.json({ message: `Welcome to my Chat Application!` });
30+
});
31+
32+
app.get("/messages", (req, res) => {
33+
let since = Number(req.query.since);
34+
let longPoll = req.query.longPoll === "true";
35+
36+
if (since) {
37+
const messagesToSend = messages.filter((msg) => msg.time > since);
38+
if (messagesToSend.length === 0 && longPoll) {
39+
callbacksForNewMessages.push((val) => res.json(val));
40+
return;
41+
} else res.json(messagesToSend);
42+
return;
43+
}
44+
res.json(messages);
45+
});
46+
47+
app.post("/messages", (req, res) => {
48+
const { message, user } = req.body;
49+
50+
if (
51+
typeof message !== "string" ||
52+
typeof user !== "string" ||
53+
!message.trim() ||
54+
!user.trim()
55+
) {
56+
res.status(400).json({ error: `Message and user are required!` });
57+
return;
58+
}
59+
60+
messages.push({
61+
message,
62+
user,
63+
time: Date.now(),
64+
});
65+
while (callbacksForNewMessages.length > 0) {
66+
const callback = callbacksForNewMessages.pop();
67+
callback([messages[messages.length - 1]]);
68+
}
69+
res.status(201).json({ success: true });
70+
});
71+
72+
app.listen(port, () => {
73+
console.log(`Chat server listening on port ${port}`);
74+
});

0 commit comments

Comments
 (0)