forked from Deen-Bridge/dnb-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNotification.js
More file actions
85 lines (82 loc) · 2.08 KB
/
Copy pathNotification.js
File metadata and controls
85 lines (82 loc) · 2.08 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
import mongoose from "mongoose";
const notificationSchema = new mongoose.Schema(
{
recipient: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
type: {
type: String,
enum: [
"follow", // Someone followed you
"unfollow", // Someone unfollowed you
"new_course", // New course from someone you follow
"new_book", // New book from someone you follow
"course_like", // Someone liked your course
"book_like", // Someone liked your book
"course_comment", // Someone commented on your course
"book_comment", // Someone commented on your book
"system", // System notification
"welcome", // Welcome notification
"recommendation", // New recommendation
],
required: true,
},
title: {
type: String,
required: true,
},
message: {
type: String,
required: true,
},
data: {
// Additional data for the notification
courseId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Course",
},
bookId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Book",
},
spaceId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Space",
},
reelId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Reel",
},
commentId: String,
// Any other relevant data
},
isRead: {
type: Boolean,
default: false,
},
isDeleted: {
type: Boolean,
default: false,
},
priority: {
type: String,
enum: ["low", "medium", "high", "urgent"],
default: "medium",
},
},
{
timestamps: true,
}
);
// Indexes for efficient querying
notificationSchema.index({ recipient: 1, createdAt: -1 });
notificationSchema.index({ recipient: 1, isRead: 1 });
notificationSchema.index({ recipient: 1, isDeleted: 1 });
export default mongoose.model("Notification", notificationSchema);