Skip to content
Snippets Groups Projects
db.js 1.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 }