1. stopwatch 스키마에 total_time 만들기

1) total_time field가 왜 필요한가?

staopwatch와 관련한 기본 기능은 다 만들어진 상태. start버튼과 stop버튼을 누르면 각 과목 대해서 시간이 mongoDB에 잘 저장되고 있다.

그런데 문제가 있음. 랭킹에 보여주려면 각 과목의 timer를 매번 더해서 쿼리를 짜야하는데 매번 요청을 날릴 때 마다 이렇게 하기에는 무리가 있을 듯함.

그리고 1시간마다 시간을 저장하기로 했는데 각 과목의 타이머만 저장해놓으면 다시 또 다 더하는 코드를 짜야함… 그냥 저장할 떄 total_time 필드를 만들면 좋지 않을까 하는 생각에 만들어 봄

total_time field 추가 전의 timer스키마

const timerSchema = new Schema({
  user_id: { type: Schema.Types.ObjectId, ref: 'User' },
  daily: {
    date: String, // 오늘 날짜
    data: [
      {
        title: { type: String }, // 과목
        timer: { type: Number }, // 초 단위로 공부한 시간
      },
    ],
  },
});

그래서 total_time field를 추가해서 뭘 할거냐면,,,

db에서 user를 찾고 해당 사용자의 daily filed에서 과목을 찾아서 업데이트하고, total_time을 업데이트해서 저장할거다!

2) daily field 안에 있어야 하는가, 밖에 있어야 하는가?

안에 있는 경우

const timerSchema = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'User' },
daily: {
date: String, // 오늘 날짜
total_time: { type: Number, default: 0 }, // 총 공부 시간
data: [
{
title: { type: String }, // 과목
timer: { type: Number }, // 초 단위로 공부한 시간
},
],
},
});

밖에 있는 경우

const timerSchema = new Schema({
user_id: { type: Schema.Types.ObjectId, ref: 'User' },
total_time: { type: Number, default: 0 }, // 총 공부 시간
daily: {
date: String, // 오늘 날짜
data: [
{
title: { type: String }, // 과목
timer: { type: Number }, // 초 단위로 공부한 시간
},
],
},
});