- 게시글, 코멘트Id, likeId 함께 나오게 출력하기
router.get('/', async (req, res, next) => {
try {
const posts = await prisma.posts.findMany({
orderBy: {
createdAt: 'desc',
},
select: {
postId: true,
UserId: true,
User: {
select: {
nickname: true,
},
},
Like: {
select: {
likeId: true,
},
},
Comment: {
select: {
commentId: true,
},
},
title: true,
createdAt: true,
updatedAt: true,
},
});
{
"posts": [
{
"postId": "27689747-08c5-4906-a541-8213144648b4",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T09:20:56.695Z",
"updatedAt": "2023-09-12T09:20:56.695Z"
},
{
"0": {
"commentId": "0ae21f60-51bd-48a8-acf3-b43328f87244"
},
"1": {
"commentId": "1602566c-f459-4428-9c90-b1ed66097cce"
},
"2": {
"commentId": "24e9b1eb-eab1-4dde-8fa4-0310af305341"
},
"3": {
"commentId": "8a3e26e1-0819-4a0e-83a3-910bb70ea887"
},
"4": {
"commentId": "a9413ebc-cf66-4783-a5fe-5d8a2c23da60"
},
"5": {
"commentId": "cdc9f8b0-70c8-4999-8404-eafc2fc3a34d"
},
"postId": "8f65e962-f3ef-417b-ba72-3b3d0b81c8db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "수정된 안녕하세요2",
"createdAt": "2023-09-12T08:46:36.972Z",
"updatedAt": "2023-09-12T09:21:13.045Z"
},
{
"0": {
"likeId": "ee6a2fdf-e901-49de-8aff-f617f6eeacd8"
},
"postId": "6eb8377c-c0c3-4cc4-b4b6-5513e9f6d6db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.824Z",
"updatedAt": "2023-09-12T08:46:36.824Z"
},
{
"postId": "8561a7fb-2e07-40cb-9037-2f3ecfd5e4fd",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.663Z",
"updatedAt": "2023-09-12T08:46:36.663Z"
},
{
"postId": "1aee3562-a2ae-46d0-9eb0-4cc1bdb780a8",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.492Z",
"updatedAt": "2023-09-12T08:46:36.492Z"
},
{
"postId": "7980811b-0bfa-4657-bcf0-068dffb3f565",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.408Z",
"updatedAt": "2023-09-12T08:46:36.408Z"
},
{
"postId": "b9dcc589-158d-4877-93e3-d2f1f71a08a2",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:35.728Z",
"updatedAt": "2023-09-12T08:46:35.728Z"
},
{
"postId": "d0f72b2d-acdd-44b0-ae1b-66f4b8fdcb31",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:31:20.211Z",
"updatedAt": "2023-09-12T08:31:20.211Z"
}
]
}
- 게시글, 코멘트, 좋아요 수와 함께 response
- https://www.prisma.io/docs/concepts/components/prisma-client/aggregation-grouping-summarizing#count-relations
/* 전체 게시물 목록 조회 Logic */
router.get('/', async (req, res, next) => {
try {
const posts = await prisma.posts.findMany({
orderBy: {
createdAt: 'desc',
},
select: {
postId: true,
UserId: true,
User: {
select: {
nickname: true,
},
},
_count: {
select: {
Comment: true,
Like: true,
},
},
// Like: {
// select: {
// likeId: true,
// },
// },
// Comment: {
// select: {
// commentId: true,
// },
// },
title: true,
createdAt: true,
updatedAt: true,
},
});
res.status(200).json({ posts: posts.map((post) => parseModelToFlatObject(post)) });
} catch (error) {
console.error(error);
next(error);
}
});
{
"posts": [
{
"postId": "27689747-08c5-4906-a541-8213144648b4",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T09:20:56.695Z",
"updatedAt": "2023-09-12T09:20:56.695Z",
"Comment": 0,
"Like": 0
},
{
"postId": "8f65e962-f3ef-417b-ba72-3b3d0b81c8db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "수정된 안녕하세요2",
"createdAt": "2023-09-12T08:46:36.972Z",
"updatedAt": "2023-09-12T09:21:13.045Z",
"Comment": 6,
"Like": 1
},
{
"postId": "6eb8377c-c0c3-4cc4-b4b6-5513e9f6d6db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.824Z",
"updatedAt": "2023-09-12T08:46:36.824Z",
"Comment": 0,
"Like": 1
},
{
"postId": "8561a7fb-2e07-40cb-9037-2f3ecfd5e4fd",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.663Z",
"updatedAt": "2023-09-12T08:46:36.663Z",
"Comment": 0,
"Like": 0
},
{
"postId": "1aee3562-a2ae-46d0-9eb0-4cc1bdb780a8",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.492Z",
"updatedAt": "2023-09-12T08:46:36.492Z",
"Comment": 0,
"Like": 0
},
{
"postId": "7980811b-0bfa-4657-bcf0-068dffb3f565",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.408Z",
"updatedAt": "2023-09-12T08:46:36.408Z",
"Comment": 0,
"Like": 0
},
{
"postId": "b9dcc589-158d-4877-93e3-d2f1f71a08a2",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:35.728Z",
"updatedAt": "2023-09-12T08:46:35.728Z",
"Comment": 0,
"Like": 0
},
{
"postId": "d0f72b2d-acdd-44b0-ae1b-66f4b8fdcb31",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:31:20.211Z",
"updatedAt": "2023-09-12T08:31:20.211Z",
"Comment": 0,
"Like": 0
}
]
}
- posts 안에서 내림차순으로 정리
/* 전체 게시물 목록 조회 Logic */
router.get('/', async (req, res, next) => {
try {
const posts = await prisma.posts.findMany({
select: {
postId: true,
UserId: true,
User: {
select: {
nickname: true,
},
},
_count: {
select: {
Comment: true,
Like: true,
},
},
title: true,
createdAt: true,
updatedAt: true,
},
});
// 내림차순으로 정렬
posts.sort((a, b) => {
return b._count.Like - a._count.Like;
});
res.status(200).json({ posts: posts.map((post) => parseModelToFlatObject(post)) });
} catch (error) {
console.error(error);
next(error);
}
});
{
"posts": [
{
"postId": "8f65e962-f3ef-417b-ba72-3b3d0b81c8db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "수정된 안녕하세요2",
"createdAt": "2023-09-12T08:46:36.972Z",
"updatedAt": "2023-09-12T09:21:13.045Z",
"Comment": 6,
"Like": 2
},
{
"postId": "1aee3562-a2ae-46d0-9eb0-4cc1bdb780a8",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.492Z",
"updatedAt": "2023-09-12T08:46:36.492Z",
"Comment": 0,
"Like": 1
},
{
"postId": "6eb8377c-c0c3-4cc4-b4b6-5513e9f6d6db",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.824Z",
"updatedAt": "2023-09-12T08:46:36.824Z",
"Comment": 0,
"Like": 1
},
{
"postId": "27689747-08c5-4906-a541-8213144648b4",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T09:20:56.695Z",
"updatedAt": "2023-09-12T09:20:56.695Z",
"Comment": 0,
"Like": 0
},
{
"postId": "7980811b-0bfa-4657-bcf0-068dffb3f565",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.408Z",
"updatedAt": "2023-09-12T08:46:36.408Z",
"Comment": 0,
"Like": 0
},
{
"postId": "8561a7fb-2e07-40cb-9037-2f3ecfd5e4fd",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:36.663Z",
"updatedAt": "2023-09-12T08:46:36.663Z",
"Comment": 0,
"Like": 0
},
{
"postId": "b9dcc589-158d-4877-93e3-d2f1f71a08a2",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:46:35.728Z",
"updatedAt": "2023-09-12T08:46:35.728Z",
"Comment": 0,
"Like": 0
},
{
"postId": "d0f72b2d-acdd-44b0-ae1b-66f4b8fdcb31",
"UserId": "262c9e5f-2d82-4286-8ccc-c45cbfdec786",
"nickname": "Developer1",
"title": "안녕하세요 게시글 제목입니다.",
"createdAt": "2023-09-12T08:31:20.211Z",
"updatedAt": "2023-09-12T08:31:20.211Z",
"Comment": 0,
"Like": 0
}
]
}
내일 목표
- error handling
- lv5 - OOP 완료
- swagger