Database models - IanMcC123/Stoopify GitHub Wiki
Models(Versrion 1)
User Model
import mongoose from 'mongoose';
const userSchema = new mongoose.Schema(
{
username: { //username of user. It is unique
type: String,
required: true,
min: 3,
max: 20,
unique: true,
},
password: { // password of user
type: String,
required: true,
},
email: { // email of user
type: String,
required: true,
unique: true,
trim: true, // Remove leading and trailing whitespaces
lowercase: true, // Convert email to lowercase
match: [/^\S+@\S+\.\S+$/, 'Please enter a valid email address'], // /^\S+@\S+\.\S+$/ is a regular expression (regex) pattern used for validating email addresses
},
address: { // address of user
street: {
type: String,
required: true,
},
city: {
type: String,
required: true,
},
state: {
type: String,
required: true,
},
zipCode: {
type: String,
required: true,
},
country: {
type: String,
required: true,
},
},
phoneNumber: { // phone number of user
type: String,
required: true,
},
},
{timestamps: true} // time the profile was created
);
const User = mongoose.model('User', userSchema);
export default User;
Post Model
import mongoose from 'mongoose';
const commentSchema = new mongoose.Schema(
{
user: { // references the user who comments
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
content: { // the comment written
type: String,
max: 50,
required: true,
},
timestamp: {// Date of comment
type: Date,
default: Date.now,
},
}
);
const postItem = new mongoose.Schema(
{
image: {
type: String,
required: true,
},
description: { // description of image
type: String,
max: 50,
required: true,
},
likes: [ // an array that tracks likes with reference to each user who liked the post
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
],
available: { // availibilty status
type: Boolean,
default: true,
},
timestamp: { // time when post was created
type: Date,
default: Date.now,
},
userCreated: { // references the user who created the post
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
userAcquired: { // references teh User who aqcuires the item
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
},
comments: [commentSchema], // an array of comments
}
);
const Post = mongoose.model('Post', postItem);
export default Post;
Message Model
import mongoose from 'mongoose';
const messageSchema = new mongoose.Schema(
{
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
receiver: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
content: {
type: String,
required: true,
},
timestamp: {
type: Date,
default: Date.now,
},
}
);
const Message = mongoose.model('Message', messageSchema);
export default Message;
Models(Version 2)
....