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 }