User

const UserSchema = new mongoose.Schema({
  email: { type: String, required: true, unique: true },
  nickname: { type: String },
  googleId: { type: String },
  profileImage: { type: String },
  favoriteGenres: [{ type: String }], // 예: ["Action", "Drama"]
  likedMovies: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Movie' }],
  isAdmin: { type: Boolean, default: false },
  language: { type: String, default: 'ko' }
}, { timestamps: true });

const MovieSchema = new mongoose.Schema({
  tmdbId: { type: Number, required: true, unique: true }, // TMDB 고유 ID
  title: { type: String, required: true },
  overview: { type: String },
  posterPath: { type: String },
  releaseDate: { type: String },
  genres: [{ type: String }], // TMDB 장르 이름 배열
  language: { type: String, default: 'ko' },
}, { timestamps: true });

Comic

const ComicSchema = new mongoose.Schema({
  movie: { type: mongoose.Schema.Types.ObjectId, ref: 'Movie', required: true },
  type: { type: String, enum: ['summary', 'parody'], required: true }, // 예: 'summary' or 'parody'
  title: { type: String },        // 만화 제목 (선택)
  description: { type: String },  // 간략 설명
  language: { type: String, default: 'ko' },
  createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // 만든 유저 (선택)
}, { timestamps: true });

ComicStep

const ComicStepSchema = new mongoose.Schema({
  comic: { type: mongoose.Schema.Types.ObjectId, ref: 'Comic', required: true },
  stepNumber: { type: Number, required: true },
  imageUrl: { type: String }, // 각 컷의 이미지
  text: { type: String },     // 대사나 설명
  audioUrl: { type: String }, // TTS 음성 경로 (선택)
}, { timestamps: true });

Comment

const CommentSchema = new mongoose.Schema({
  comic: { type: mongoose.Schema.Types.ObjectId, ref: 'Comic', required: true },
  author: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
  content: { type: String, required: true },
  likes: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
  createdAt: { type: Date, default: Date.now },
  updatedAt: { type: Date, default: Date.now }
});

ERD 요약

User
 ├─ _id (ObjectId, PK)
 ├─ email (String, required, unique)
 ├─ nickname (String)
 ├─ googleId (String)
 ├─ profileImage (String)
 ├─ favoriteGenres [String]
 ├─ likedMovies [ObjectId] → Movie._id
 ├─ isAdmin (Boolean)
 └─ language (String)

   ▲
   │ 1:N (optional)
   │
   ▼

Comic
 ├─ _id (ObjectId, PK)
 ├─ movie (ObjectId, FK → Movie._id)
 ├─ type ('summary' | 'parody')
 ├─ title (String)
 ├─ description (String)
 ├─ createdBy (ObjectId, FK → User._id)
 └─ language (String)

   ▲
   │ 1:N
   │
   ▼

ComicStep
 ├─ _id (ObjectId, PK)
 ├─ comic (ObjectId, FK → Comic._id)
 ├─ stepNumber (Number)
 ├─ imageUrl (String)
 ├─ text (String)
 └─ audioUrl (String, optional)

Movie
 ├─ _id (ObjectId, PK)
 ├─ tmdbId (Number, unique)
 ├─ title (String)
 ├─ overview (String)
 ├─ posterPath (String)
 ├─ releaseDate (String)
 ├─ genres [String]
 └─ language (String)

주요 관계 설명

관계 설명
User → Comic User._id가 Comic.createdBy에 연결 (유저가 만든 만화)
User → Movie User.likedMovies는 여러 개의 Movie._id를 참조 (1:N)
Movie → Comic 하나의 영화는 여러 개의 만화를 가질 수 있음 (1:N)
Comic → ComicStep 하나의 만화는 여러 컷으로 이루어짐 (1:N)