Skip to content
Snippets Groups Projects
db.js 1.79 KiB
import dotenv from "dotenv";
import mongoose from "mongoose";

dotenv.config();

const GoogleProviderSchema = new mongoose.Schema({
  id: {
    type: String,
    required: true,
    //unique: true,
  },
  profileUrl: {
    type: String,
  },
});

const UserSchema = new mongoose.Schema({
  user_id: {
    type: String,
    required: true,
    //unique: true,
  },
  nickname: {
    type: String,
  },
  email: {
    type: String,
    //unique: true,
  },
  google: {
    type: GoogleProviderSchema,
  }
});


const UserModel = mongoose.model("User", UserSchema);

const CommentSchema = new mongoose.Schema({
	/*
  commentId: {
    type: String,
    required: true,
    unique: false,
  },	
	*/
  content: {
    type: String,
    required: true,
  },
  author: {
    type: UserSchema,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});
CommentSchema.index( { commentId: 1 } , { sparse: true } )

const ArticleSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true,
  },
  /*
   articleId: {
    type: String,
	unique: true,
  }, 
  */
  content: {
    type: String,
    required: true,
  },
  imageUrls: {
    type: [String],
  },
  author: {
    type: UserSchema,
    required: true,
  },
  comments: {
    type: [CommentSchema],
	unique: false,
  },
  likes: {
    type: [UserSchema],
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

ArticleSchema.index({articleId:1}, { sparse: true })
const ArticleModel = mongoose.model("Article", ArticleSchema);

const connectDB = async () => {
  const url = process.env.MONGODB_URI;
  let db;
  try {
    db = await mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true });
  } catch (error) {
    console.error(error);
  }
  return db;
}

export default { connectDB, UserModel, ArticleModel }