필요한 스키마
todo : 할일과 관련된 정보 저장
const mongoose = require("mongoose");
const todoSchema = new mongoose.Schema({
text: { type: String, required: true },
isDone: { type: Boolean, required: true },
groupId: { type: Number, required: true },
dueDate: { type: Date, required: true },
createDate: { type: Date, required: true },
user: { type: mongoose.Types.ObjectId, required: true, ref: "User" },
});
module.exports = mongoose.model("Todo", todoSchema);
user : 유저 정보 (이름, 비밀번호, 이메일, 프로필 이미지)
- 이메일의 경우 유저의 정보가 많이 저장된 DB에서는 최대한 빠르게 이메일 쿼리가 되도록 설계해야 함. 따라서 이메일에 인덱스를 설정하여 이메일을 요청할 때마다 실행되는 쿼리 처리 속도를 높일 수 있도록
unique : true
옵션 부여
mongoose-unique-validator
설치, unique한지 처리해줄 수 있도록 함
- memo와 todo는 한 유저가 여러개를 생성할 수 있으므로 user 내에 배열로 입력받았다.
const mongoose = require("mongoose");
const uniqueValidator = require("mongoose-unique-validator");
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
image: { type: String, required: true },
todos: [{ type: mongoose.Types.ObjectId, required: true, ref: "Todo" }],
memos: [{ type: mongoose.Types.ObjectId, required: true, ref: "Memo" }],
});
userSchema.plugin(uniqueValidator);
module.exports = mongoose.model("User", userSchema);
memo : 메모와 관련된 정보 저장
const mongoose = require("mongoose");
const memoSchema = new mongoose.Schema({
text: { type: String, required: true },
sendTime: { type: Date, required: true },
user: { type: mongoose.Types.ObjectId, required: true, ref: "User" },
});
module.exports = mongoose.model("Memo", memoSchema);