TIL

24.02.13

아리단길아조씨 2024. 2. 14. 00:04
728x90

팀프로젝트 제출 기한이 하루 늘어서 팀원들 모두 실력 향상의 느낌으로 내일 오후 까지 개인적으로 좋아요 기능을 구현해보기로 했다.

좋아요 기능을 구현하기 위해 내가 생각해본 것
어떤 포스트에서 좋아요를 누르면 작동하게 해야한다.
포스트를 누르는 대상은? 유저
좋아요를 눌렀을 때 서버에 저장되야하는 것은? 좋아요를 누른 사람, 언제 눌렀는지, 좋아요가 눌린 포스트의 정보

내가 생각한 것을 바탕으로 테이블을 만들기 위해 schema 모델을 작성해보았다.

model Likes {
  likeId    Int      @id @default(autoincrement()) @map("likeId")
  userId    Int      @map("userId")
  postId    Int      @map("postId")
  createdAt DateTime @default(now()) @map("createdAt")

  post Posts @relation(fields: [postId], references: [postId], onDelete: Cascade)
  user Users @relation(fields: [userId], references: [userId], onDelete: Cascade)

  @@map("Likes")
}

likeId, userId, postId, createdAt 속성을 넣어주었고, 미리 작성되어 있던 Posts, Users 테이블과 Likes 테이블을 1대 1 관계로 맺어준 후 npx prisma db push 명령어를 통해 테이블 생성에 성공했다.

성공적으로 만들어진 Likes 테이블과 속성들

import express from 'express';
import { prisma } from './model/index.js';
// import validateAccessToken from './middlewares/authomiddleware.js'; // 토큰 검증 미들웨어

const router = express();

// get: 서버에 있는 데이터를 꺼내올 때(볼 때) post: 서버에 데이터를 새로 만들거나, 서버에 뭔가를 요청하거나
router.post('/', async (req, res, next) => {
  const { userId, postId } = req.body;

  const someLike = await prisma.likes.create({
    data: {
      userId,
      postId,
    },
  });
  return res.status(201).json({ someLike });
});

export default router;

여기에는 안보이지만 export로 외부에서 사용할 수 있게 하여 app.js파일에 app.use('/like', likeRouter); 로 라우터를 등록해주었다.
like로 접근을 하면 req.body에 있는 userId와 postId 값을 각각 할당을 한다.
특별하게 해줄 것이 없으니 새로운 데이터를 만들고 접근하기 위해 someLike 상수에 userId, postId가 포함된 새로운 데이터를 할당한 후 성공적으로 이뤄졌다면 201번 상태코드와 생성된 데이터를 담은 someLike를 json으로 반환한다.

사실 아직 테스트는 해보지 않았다. 도와주신 분의 말씀으로는 인증미들웨어를 추가를 해야한다고 하셨는데.... 
아직 잘 모르겠다... 내일 다시 작업을 해야할 것 같다. 

'TIL' 카테고리의 다른 글

24.02.15  (0) 2024.02.16
24.02.14  (0) 2024.02.15
24.02.08  (0) 2024.02.13
24.02.07  (0) 2024.02.07
24.02.06  (0) 2024.02.06