Skip to content
Snippets Groups Projects
db.js 1.64 KiB
Newer Older
Gwangbin's avatar
Gwangbin committed
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: true,
  },
  content: {
    type: String,
    required: true,
  },
  author: {
    type: UserSchema,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

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],
  },
  likes: {
    type: [UserSchema],
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

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 }