-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmongodb.js
More file actions
162 lines (141 loc) · 4.14 KB
/
Copy pathmongodb.js
File metadata and controls
162 lines (141 loc) · 4.14 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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import { MongoClient, ObjectId, ServerApiVersion } from 'mongodb';
const uri = "mongodb+srv://ashuadarsh001:tiWVrEuhYDBwO6mM@employee.efvl2.mongodb.net/?retryWrites=true&w=majority&appName=employee";
const dbName = 'employee-management-dev';
// Create a single MongoClient instance (connection pooling)
const client = new MongoClient(uri, {
serverApi: ServerApiVersion.v1,
maxPoolSize: 20, // up to 20 concurrent operations
});
let dbInstance;
async function connectDB() {
if (!dbInstance) {
await client.connect();
dbInstance = client.db(dbName);
console.log("✅ Connected to MongoDB");
}
return dbInstance;
}
// Utility: get collection quickly
async function col(name) {
const db = await connectDB();
return db.collection(name);
}
// ===== Functions =====
async function getEmployee(id) {
return await (await col('employee')).findOne({ _id: new ObjectId(id) });
}
async function getEmployeesByTeam(team) {
return await (await col('employee')).find({ team }).toArray();
}
async function getEmployeeByEmail(email) {
return await (await col('employee')).findOne({ email });
}
async function getMessages() {
return await (await col('messages')).find({receiverEmpId: {$exists: false}}).toArray();
}
async function getUnicastMessages(senderEmpId, receiverEmpId) {
const senderId = new ObjectId(senderEmpId);
const receiverId = new ObjectId(receiverEmpId);
const messages = await (await col('messages')).find({
$or: [
{ senderEmpId: senderId, receiverEmpId: receiverId },
{ senderEmpId: receiverId, receiverEmpId: senderId }
],
receiverEmpId: { $exists: true } // ensures receiverEmpId field exists
}).sort({ date: 1 }).toArray(); // optional: sort by date ascending
return messages;
}
async function getEmployees() {
return await (await col('employee')).find().toArray();
}
async function getTaskforEmployeeById(id) {
return await (await col('tasks')).findOne({ _id: new ObjectId(id) });
}
async function getTaskforEmployee(id) {
return await (await col('tasks')).find({ empId: id }).toArray();
}
async function createTask({ empId, assigneeId, completionDate, status, title, description, type }) {
const assignedDate = new Date().toISOString().split("T")[0];
return await (await col('tasks')).insertOne({
empId: new ObjectId(empId),
assigneeId: new ObjectId(assigneeId),
completionDate,
status,
title,
description,
assignedDate,
type
});
}
async function updateTask({ _id, empId, assigneeId, completionDate, status, title, description, type }) {
return await (await col('tasks')).updateOne(
{ _id: new ObjectId(_id) },
{
$set: {
empId: new ObjectId(empId),
assigneeId: new ObjectId(assigneeId),
completionDate,
status,
title,
description,
type
}
}
);
}
async function createMessage(empId, firstName, text) {
const date = new Date().toISOString();
const collection = await col('messages');
const { insertedId } = await collection.insertOne({
senderEmpId: empId,
senderName: firstName,
text,
date
});
return await collection.findOne({ _id: insertedId });
}
async function createUnicastMessage(text, senderEmpId, receiverEmpId, firstName) {
const date = new Date().toISOString();
const collection = await col('messages');
const { insertedId } = await collection.insertOne({
senderEmpId: new ObjectId(senderEmpId),
senderName: firstName,
text,
date,
receiverEmpId: new ObjectId(receiverEmpId)
});
return await collection.findOne({ _id: insertedId });
}
async function signup({ email, password, firstName, lastName, dob, mobileNo, pan, gender, team, designation, address, address2, city, zip }) {
return await (await col('employee')).insertOne({
email,
password,
firstName,
lastName,
designation,
mobileNo,
dob,
address,
gender,
pan,
address2,
city,
zip,
team
});
}
export {
getEmployees,
getTaskforEmployee,
getTaskforEmployeeById,
updateTask,
getEmployee,
createTask,
getEmployeeByEmail,
signup,
getEmployeesByTeam,
getMessages,
createMessage,
createUnicastMessage,
getUnicastMessages
};