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)

....