diff options
Diffstat (limited to 'src/models')
-rwxr-xr-x | src/models/Event.js | 259 | ||||
-rwxr-xr-x | src/models/EventGroup.js | 57 | ||||
-rwxr-xr-x | src/models/Log.js | 26 |
3 files changed, 342 insertions, 0 deletions
diff --git a/src/models/Event.js b/src/models/Event.js new file mode 100755 index 0000000..234084a --- /dev/null +++ b/src/models/Event.js @@ -0,0 +1,259 @@ +const mongoose = require("mongoose"); + +const Attendees = new mongoose.Schema({ + name: { + type: String, + trim: true, + }, + status: { + type: String, + trim: true, + }, + email: { + type: String, + trim: true, + }, + removalPassword: { + type: String, + trim: true, + unique: true, + sparse: true, + }, + id: { + type: String, + trim: true, + unique: true, + sparse: true, + }, + // The number of people that are attending under one 'attendee' object + number: { + type: Number, + trim: true, + default: 1, + }, + created: Date, +}); + +const Followers = new mongoose.Schema( + { + // this is the id of the original follow *request*, which we use to validate Undo events + followId: { + type: String, + trim: true, + }, + // this is the actual remote user profile id + actorId: { + type: String, + trim: true, + }, + // this is the stringified JSON of the entire user profile + actorJson: { + type: String, + trim: true, + }, + name: { + type: String, + trim: true, + }, + }, + { _id: false } +); + +const ReplySchema = new mongoose.Schema({ + id: { + type: String, + required: true, + unique: true, + sparse: true, + }, + author: { + type: String, + trim: true, + required: true, + }, + content: { + type: String, + trim: true, + required: true, + }, + timestamp: { + type: Date, + trim: true, + required: true, + }, +}); + +const ActivityPubMessages = new mongoose.Schema({ + id: { + type: String, + required: true, + unique: true, + sparse: true, + }, + content: { + type: String, + trim: true, + required: true, + }, +}); + +const CommentSchema = new mongoose.Schema({ + id: { + type: String, + required: true, + unique: true, + sparse: true, + }, + author: { + type: String, + trim: true, + required: true, + }, + content: { + type: String, + trim: true, + required: true, + }, + timestamp: { + type: Date, + trim: true, + required: true, + }, + activityJson: { + type: String, + trim: true, + }, + actorJson: { + type: String, + trim: true, + }, + activityId: { + type: String, + trim: true, + }, + actorId: { + type: String, + trim: true, + }, + replies: [ReplySchema], +}); + +const EventSchema = new mongoose.Schema({ + id: { + type: String, + required: true, + unique: true, + }, + type: { + type: String, + trim: true, + required: true, + }, + name: { + type: String, + trim: true, + required: true, + }, + location: { + type: String, + trim: true, + required: true, + }, + start: { + // Stored as a UTC timestamp + type: Date, + trim: true, + required: true, + }, + end: { + // Stored as a UTC timestamp + type: Date, + trim: true, + required: true, + }, + timezone: { + type: String, + default: "Etc/UTC", + }, + description: { + type: String, + trim: true, + required: true, + }, + image: { + type: String, + trim: true, + }, + url: { + type: String, + trim: true, + }, + creatorEmail: { + type: String, + trim: true, + }, + hostName: { + type: String, + trim: true, + }, + viewPassword: { + type: String, + trim: true, + }, + editPassword: { + type: String, + trim: true, + }, + editToken: { + type: String, + trim: true, + minlength: 32, + maxlength: 32, + }, + eventGroup: { type: mongoose.Schema.Types.ObjectId, ref: "EventGroup" }, + usersCanAttend: { + type: Boolean, + trim: true, + default: false, + }, + showUsersList: { + type: Boolean, + trim: true, + default: false, + }, + usersCanComment: { + type: Boolean, + trim: true, + default: false, + }, + firstLoad: { + type: Boolean, + trim: true, + default: true, + }, + attendees: [Attendees], + maxAttendees: { + type: Number, + }, + comments: [CommentSchema], + activityPubActor: { + type: String, + trim: true, + }, + activityPubEvent: { + type: String, + trim: true, + }, + publicKey: { + type: String, + trim: true, + }, + privateKey: { + type: String, + trim: true, + }, + followers: [Followers], + activityPubMessages: [ActivityPubMessages], +}); + +module.exports = mongoose.model("Event", EventSchema); diff --git a/src/models/EventGroup.js b/src/models/EventGroup.js new file mode 100755 index 0000000..1a4ac64 --- /dev/null +++ b/src/models/EventGroup.js @@ -0,0 +1,57 @@ +const mongoose = require("mongoose"); + +const Subscriber = new mongoose.Schema({ + email: { + type: String, + trim: true, + }, +}); + +const EventGroupSchema = new mongoose.Schema({ + id: { + type: String, + required: true, + unique: true, + }, + name: { + type: String, + trim: true, + required: true, + }, + description: { + type: String, + trim: true, + required: true, + }, + image: { + type: String, + trim: true, + }, + url: { + type: String, + trim: true, + }, + creatorEmail: { + type: String, + trim: true, + }, + hostName: { + type: String, + trim: true, + }, + editToken: { + type: String, + trim: true, + minlength: 32, + maxlength: 32, + }, + firstLoad: { + type: Boolean, + trim: true, + default: true, + }, + events: [{ type: mongoose.Schema.Types.ObjectId, ref: "Event" }], + subscribers: [Subscriber], +}); + +module.exports = mongoose.model("EventGroup", EventGroupSchema); diff --git a/src/models/Log.js b/src/models/Log.js new file mode 100755 index 0000000..b048a45 --- /dev/null +++ b/src/models/Log.js @@ -0,0 +1,26 @@ +const mongoose = require("mongoose"); + +const LogSchema = new mongoose.Schema({ + status: { + type: String, + trim: true, + required: true, + }, + process: { + type: String, + trim: true, + required: true, + }, + message: { + type: String, + trim: true, + required: true, + }, + timestamp: { + type: Date, + trim: true, + required: true, + }, +}); + +module.exports = mongoose.model("Log", LogSchema); |