북마크 기능 구현

윤성준·2023년 12월 6일
0

first react project

목록 보기
13/17

북마크 기능 구현을 위해서 우선적으로 생각을 해봐야 할 것이 있었다.
바로 테이블간의 관계형성.

내가 만든 테이블중에서 관련 지어야 할 것은
'recipe','bookmark' 이다.

한명의 유저가 북마크 되어있는 레시피를 살펴볼 수 있게하기 위해서는 레시피와 북마크에 관계형성을 해주어야 했다.

const { DataTypes } = require('sequelize');
const { sequelize } = require('../util/database.util');
const Bookmark = require('./bookmark.model');
const Recipe = sequelize.define('recipe', {


    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    userId: {
        type: DataTypes.INTEGER
    },
    categoryId: {
        type: DataTypes.INTEGER
    },
    categoryName: {
        type: DataTypes.STRING
    },
    name: {
        type: DataTypes.STRING
    },
    createdAt: {
        type: DataTypes.DATE
    },
    updatedAt: {
        type: DataTypes.DATE
    },
    view: {
        type: DataTypes.INTEGER
    }


}, { freezeTableName: true }) // table 이름 고정 (변형위험있음)

Recipe.hasMany(Bookmark, {
    as: "Bookmarks",
    foreignKey: "recipeId"
})



module.exports = Recipe

model 파일에서 관계정의를 해주었지만 오류가 떴다.

구글링을 해보니 오타, define하지 않아서 등등 많은 솔루션들이 있었지만 계속해서 오류가 났다.

계속 된 구글링에 지친 찰나 한 문서를 발견 했다.

관련문서

솔루션3에서 관계정의를 각각의 하나의 모델파일에서 따로하는 것이 아닌 하나의 파일에서 모두 이뤄지라고 하는 것.

그래서 바로 app.js 에서 시퀄라이즈 코드부분에서 관계를 정의해봤더니 오류가 뜨지 않고 해결이 되었다.

이제 북마크 api 로직을 생각해보자.

model: Bookmark
포함할 모델을 지정한다. 이 모델은 현재 모델과 어떤 종류의 관계를 가지는지에 따라 달라진다.

as: 'Bookmarks'
현재 모델에서 다른 모델을 참조하는데 사용되는 별칭(alias). 관계가 여러 개인 경우 as를 사용하여 각 관계를 구별할 수 있다.

attributes: 'userId', 'recipeId'
포함된 모델에서 가져올 속성을 지정한다. 이를 통해 필요한 속성만 가져올 수 있다.

where: 'userId'
포함된 모델에 대한 추가적인 조건을 정의한다. 이를 사용하여 가져올 데이터를 필터링할 수 있다.

required:
true로 설정하면 내가 원하는 결과 값을 도출해준다.

이렇게 즐겨찾기 버튼을 누르면 북마크 지정을 해놓은 레시피만 보이게 된다!

profile
반갑습니다

0개의 댓글