[Backend] 서비스에 필요한 스키마 설계하기 (mongoose, mongoDB)

thousand_yj·2023년 7월 24일
0

Willing 프로젝트

목록 보기
14/18

필요한 스키마

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);
profile
함께 일하고 싶은 개발자가 되기 위해 노력합니다. 코딩테스트 관련 공부 및 이야기는 티스토리에도 업로드되어 있습니다.

0개의 댓글