자취생들이 간단하게 만들어 먹을 수 있는 레시피를 공유할 수 있는 웹 사이트를 만들어보기로 했다.
Backend를 구현하기 위해 모 사이트에서 수강한 인스타 클론 강의에서 배운 GraphQL, Prisma(ORM)을 이용하기로 하고, 기본적인 setting을 마쳤다.
스키마
1. User
- username과 password로 로그인하고, 당연히 username은 unique 해야한다.
- 하나의 email로만 회원 가입이 가능하기 위해 email도 unique로 설정해준다.
- password는 bcrypt를 이용해서 hashing되어 저장된다.
- bio는 상태메시지, avatar는 프사이고, 필수는 아니기 때문에 ?를 붙였다.
- User는 여러 Recipe를 작성 할 수 있고, Like를 많이 날릴 수 있고, Comment도 많이 작성 할 수 있기 때문에 배열 관계로 정의하였다.
2. Recipe
- Recipe는 title(제목), content(내용)을 가지고, 여러 사진도 업로드 할 수 있다. (게시글과 같음)
- 하나의 Recipe는 한 명의 User에 의해서만 작성될 수 있다.
- 사진, 댓글, 좋아요는 여러개가 있을 수 있다.
3. Photo
- Photo는 한 명의 User에 의해서 하나의 Recipe에 업로드 된다.
- caption은 사진에 딸린 간단한 설명으로, 필수는 아니다.
- file 필드는 url로, 추후 aws s3에 업로드한 후 그것을 저장할 예정이다.
4. Like
- 특정한 id를 갖는 Like는 한 명의 User가 하나의 Recipe에 날릴 수 있다.
- 한 명의 User가 여러 Recipe에 Like를 날리는 건 가능하지만 하나의 Recipe에 여러 Like를 날리는 건 불가능하다. 따라서 Like의 recipeId와 userId의 조합은 unique해야 한다.
- 특정한 id를 갖는 Comment는 한 명의 User에 의해 하나의 Recipe에 작성된다.
- payload는 댓글의 내용이다.
- Like와 달리 한 명의 User가 하나의 Recipe에 여러 댓글을 쓸 수 있다. 그래서 recipeId와 userId가 unique할 필요가 없다.
보완점?
나중에 대댓글 기능이나, 해쉬태그 기능도 천천히 추가해 볼 예정! 일단 천천히 기본 기능부터 구현해보자