Tests, UX improvements.
This commit is contained in:
parent
4e6f5d36b8
commit
0ae18f495e
63 changed files with 1384 additions and 2330 deletions
58
server/models/activityLog.js
Normal file
58
server/models/activityLog.js
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import mongoose from 'mongoose'
|
||||
|
||||
const ACTIVITY_TYPES = [
|
||||
'member_joined',
|
||||
'event_registered',
|
||||
'event_cancelled',
|
||||
'event_waitlisted',
|
||||
'peer_support_enabled',
|
||||
'peer_support_disabled',
|
||||
'circle_changed',
|
||||
'contribution_changed',
|
||||
'email_changed',
|
||||
'profile_updated',
|
||||
'subscription_created',
|
||||
'subscription_cancelled',
|
||||
'status_changed',
|
||||
'role_changed',
|
||||
'admin_profile_update',
|
||||
'slack_invited',
|
||||
'email_sent'
|
||||
]
|
||||
|
||||
const activityLogSchema = new mongoose.Schema({
|
||||
member: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'Member',
|
||||
required: true
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
enum: ACTIVITY_TYPES,
|
||||
required: true
|
||||
},
|
||||
visibility: {
|
||||
type: String,
|
||||
enum: ['member', 'admin', 'public'],
|
||||
default: 'member'
|
||||
},
|
||||
metadata: {
|
||||
type: mongoose.Schema.Types.Mixed,
|
||||
default: () => ({})
|
||||
},
|
||||
performedBy: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'Member'
|
||||
},
|
||||
timestamp: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
}
|
||||
})
|
||||
|
||||
// Indexes
|
||||
activityLogSchema.index({ member: 1, timestamp: -1 })
|
||||
activityLogSchema.index({ member: 1, visibility: 1, timestamp: -1 })
|
||||
activityLogSchema.index({ type: 1, timestamp: -1 })
|
||||
|
||||
export default mongoose.models.ActivityLog || mongoose.model('ActivityLog', activityLogSchema)
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
import mongoose from "mongoose";
|
||||
|
||||
const updateSchema = new mongoose.Schema({
|
||||
author: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Member",
|
||||
required: true,
|
||||
},
|
||||
content: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
images: [
|
||||
{
|
||||
url: String,
|
||||
publicId: String,
|
||||
alt: String,
|
||||
},
|
||||
],
|
||||
privacy: {
|
||||
type: String,
|
||||
enum: ["public", "members", "private"],
|
||||
default: "members",
|
||||
},
|
||||
commentsEnabled: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
default: Date.now,
|
||||
},
|
||||
updatedAt: {
|
||||
type: Date,
|
||||
default: Date.now,
|
||||
},
|
||||
});
|
||||
|
||||
// Update the updatedAt timestamp on save
|
||||
updateSchema.pre("save", function (next) {
|
||||
this.updatedAt = Date.now();
|
||||
next();
|
||||
});
|
||||
|
||||
// Indexes for performance
|
||||
updateSchema.index({ createdAt: -1 }); // For sorting by date
|
||||
updateSchema.index({ privacy: 1, createdAt: -1 }); // Compound index for filtering and sorting
|
||||
updateSchema.index({ author: 1 }); // For author lookups
|
||||
|
||||
export default mongoose.models.Update || mongoose.model("Update", updateSchema);
|
||||
Loading…
Add table
Add a link
Reference in a new issue