์๋ ํ์ธ์ Foma ์ ๋๋ค.
์์ฆ ์ฑํ ์ฑ์ ๋ง๋ค๋ฉด์ ์ ์ ์ ์ฑํ ๋ฐฉ์ ๊ด๊ณ๋ฅผ ์ค์ ํด์ผ ํ๋๋ฐ ์กฐ๊ธ ๋ณต์กํ ๊ฒ ์๋๋ผ๊ตฌ์.
๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ์ฑํ ์ฑ์ ๋ง๋๋๋ฐ User๋ ์ฌ๋ฌ ์ฑํ ๋ฐฉ์ ๊ฐ์ ธ์ผ ํ๊ณ ,
์ฑํ ๋ฐฉ์ ์ฌ๋ฌ ์ ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๋ง๋ค๊ณ ์ถ์๋๋ฐ์.
๊ณต์ ๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ๋ชจ๋ธ๊ณผ ๊ด๊ณ๋ฅผ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Model
User
์ ์ ๋ชจ๋ธ์ ์๋์ ๊ฐ์ด ๋ง๋ค์ด ์ค๋๋ค.
model User {
id String @id @default(uuid())
name String @unique
profileImage String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
ChatRoom
์ฑํ ๋ฐฉ ๋ชจ๋ธ์ ์๋์ ๊ฐ์ด ๋ง๋ค์ด ์ค๋๋ค.
model ChatRoom {
id String @id @default(uuid())
title String
hasNewMessage Boolean @default(false)
lastChatContent String @default("")
lastChatDate DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
๊ทธ ๋ค์ ์ ์ ์ ์ฑํ ๋ฐฉ์ ๊ฐ๋ ์๋ก์ด ๋ชจ๋ธ์ ๋ง๋ค์ด ์ค์ผ ํ๋๋ฐ์.
์ ๋ ์ฑํ ๋ฐฉ๊ณผ ์ ์ ๋ฅผ ๋ชจ๋ ์ ์ฅํ ๋ชจ๋ธ์ธ ChatRoomUser๋ผ๊ณ ์ด๋ฆ ์ง๊ฒ ์ต๋๋ค.
ํด๋น ๋ชจ๋ธ์ ์ฑํ ๋ฐฉ id์ ์ ์ id๋ฅผ ๊ด๊ณ๋ก ๊ฐ์ต๋๋ค.
model ChatRoomUser {
id String @id @default(uuid())
chatRoom ChatRoom? @relation(fields: [chatRoomId], references: [id])
user User? @relation(fields: [userId], references: [id])
userId String?
chatRoomId String?
}
์ ๋ชจ๋ธ์ ๋ง๋ค๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ฌ ๋ด์ฉ์ ๊ด๊ณ๊ฐ ์๋๋ฐ ํ์ฌ ๊ทธ ๋ชจ๋ธ์ ์ด ๋ชจ๋ธ์ด ์์ด๋ผ๋ ๋ป์ ๋๋ค.
ctrl+s๋ฅผ ํ๋ฉด ์๋์ผ๋ก ์๋ฌ๊ฐ ๊ณ ์ณ์ง ๊ฑฐ์์.
์๋์ ๊ฐ์ด ๋ ๋ชจ๋ธ์ ChatRoomUser[]๊ฐ ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
model User {
...
ChatRoomUser ChatRoomUser[]
}
model ChatRoom {
...
ChatRoomUser ChatRoomUser[]
}
์ ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ chatRooms์ users๋ก ์ด๋ฆ์ ๋ฐ๊ฟ ์ฃผ๊ฒ ์ต๋๋ค.
model User {
...
chatRooms ChatRoomUser[]
}
model ChatRoom {
...
users ChatRoomUser[]
}
Test
์ฑํ ๋ฐฉ์ ์๋ก์ด ์ ์ ๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ด ChatRoom ๋ชจ๋ธ์ users๋ฅผ ์ ๊ทผํด create๋ก userId๋ฅผ ๋ฃ์ด ์ค๋๋ค.
await prisma.chatRoom
.create({
data: {
title: req.body.title,
hasNewMessage: req.body.hasNewMessage,
users: { create: { userId: req.body.userId } },
},
})
.then((data) => {
res.json(data);
console.log("Insert a chatRoom: ", data);
});
Prisma Studio๋ฅผ ํตํด์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด ๊ฐ๋์ง ํ ์คํธ ํด๋ณด๊ฒ ์ต๋๋ค.
์ ์ ๋ฐ์ดํฐ์ chatRooms์ ์ฑํ ๋ฐฉ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ณ ,
์ฑํ ๋ฐฉ ๋ฐ์ดํฐ์ ์ ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Reference
'โ Backend > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] Socket.io๋ก Room ๊ตฌํํ๊ธฐ (feat. TypeScript) (0) | 2022.08.10 |
---|---|
[Node.js] Prisma CRUD ๊ตฌํํด ๋ณด๊ธฐ (feat Prisma Studio) (0) | 2022.08.02 |
[Node.js] Prisma๋? (feat. ์ฌ์ฉํด์ผ ๋๋ ์ด์ ) (0) | 2022.08.02 |
[Node.js] TypeORM๋ก CRUD ๊ตฌํํด ๋ณด๊ธฐ (feat. MySQL) (0) | 2022.08.02 |
[Node.js] TypeORM์ด๋? (feat. ORM Library) (0) | 2022.08.02 |
๋๊ธ