-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinboxroutes.ts
49 lines (40 loc) · 1.54 KB
/
inboxroutes.ts
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
import express, { Request, Response } from 'express';
import { db } from '../config/firebase';
import { Assistant, WorkType, Researcher } from '../models/interfaces';
const router = express.Router();
router.get('/search/messages', async (req: Request, res: Response) => {
try {
// Extract query parameters from the request
const { sender, recipient, content } = req.query;
// Reference to the Firestore 'messages' collection
let query = db.collection('messages') as FirebaseFirestore.Query;
// Add filters based on the query parameters
if (sender) {
query = query.where('sender', '==', sender);
}
if (recipient) {
query = query.where('recipient', '==', recipient);
}
if (content) {
// Assuming you want to perform a case-insensitive search on the message content
query = query.where('content', '>=', content).where('content', '<=', content + '\uf8ff');
}
// Execute the query
const snapshot = await query.get();
// Handle empty results
if (snapshot.empty) {
return res.status(404).json({ message: 'No messages found matching the criteria.' });
}
// Map Firestore documents to an array of messages
const messages = snapshot.docs.map(doc => ({
id: doc.id,
...doc.data(),
}));
// Send the response
res.status(200).json(messages);
} catch (error) {
console.error('Error fetching messages:', error);
res.status(500).json({ message: 'An error occurred while fetching messages.', error: error.message });
}
});
export default router;