1) Forgien Key의 굴레,,
테이블을 대충 구상하고 나서 이제 실제로 구현할 차례인데, 다른 건 구현을 했는데 Forgien Key가 고비였다.
제대로 연결이 되었는지도 확인이 안되고, 내가 본 자료에서는 Forgien Key를 따로 해당 Schema에 추가하지 않았는데 어떻게 값을 추가할 수 있는지가 의문이었다. 이걸로 며칠을 고민했는지,,,,
아무튼 해결한 것은 다음과 같다! 이게 올바른 사용법인지는 모르겠으나, 잘 뜨니 일단은 사용해본다. 이후 다시 공부해볼 예정!
1. 시퀄라이즈로 FK 설정하는 법은 다양한 사이트를 참고하여 진행하였다. 아래의 출처를 많이 참고하여 사용하였으며, index.js 파일에 모두 작성하는 것으로 진행하였다.
(출처1) https://devlog-wjdrbs96.tistory.com/221
(출처2) https://darrengwon.tistory.com/146
2. Schema에 FK의 이름을 넣는다.
- 예시에 나오는 관계 → (부모:User-자식:ChatGPTList) 관계
[예시] ChatGPTList의 FK는 User의 id이다. FK의 이름은 user_id로 설정하였다.
3. 이후 associate에서, 아래의 사진과 같이 foreignKey에 아까 설정했던 FK 이름을 적어준다.
4. 그리고 create할 때는 아래와 같이 적어준다.
5. 그리고나서 findAll할 때 아래와 같이 사용해주면 user 정보까지 가져오는 것을 확인할 수 있다.
- 시퀄라이즈 함수에 관해서는 아래의 출처를 참고
(출처) https://spicycookie.me/Nodejs/sequelizecrud/
여기까지 하는데 거의 이틀 걸린 듯,,, 솔직히 그렇게 어려운 건 아닌 것 같은데 아예 시작 방향을 잘못 잡았다.
너무 오랜만에 해서 그런가,,? 이전에 디바이스 개발을 해서 그런가,, 아무튼 시작 방향부터 잘못 잡았더니 허비한 시간이 길었다. ㅜ 하지만 이번 경험을 토대로 앞으로는 이런 시간이 줄어들겠지!
2) 구현한 것
① GET 대화목록 : 해당 user의 대화목록을 전부 가져오는 API
② POST 대화목록 : 새로운 대화를 시작했을 때 사용하는 API
③ GET 대화 : 해당 대화목록의 대화를 전부 가져오는 API
④ POST 대화 : gpt에게 질문할 때 사용하는 API
→ 이후 이전 대화에 이어서 사용할 수 있도록 수정할 예정
⑤ DELETE 대화목록 : 대화목록을 삭제할 때 사용하는 API
⑥ GET 북마크 : 하나의 대화 목록의 북마크한 대화를 보여주는 API
→ 이후 해당 사용자가 가진 목록 전체의 북마크를 가져오는 것으로 수정할 예정
⑦ POST 북마크 : 북마크 생성/삭제할 때 사용하는 API
오늘 하루에 만든 API들이다. 많아보이지만,, 사실 비슷한 API가 많기 때문에 빠르게 할 수 있었다. 허비한 시간을 조금이나마 절약한 기분,,^^
그렇지만 완벽하게 만든 것이 아니기 때문에 아직 수정해야할 부분도 많다.
3) 수정 및 앞으로 구현해야할 부분
① getBookmark에서
- 지금은 하나의 대화 목록이지만, 해당 유저가 가진 목록 전체의 북마크를 가져오기로 구현하기
② postContent에서
- 지금은 대화 목록에 이전 메시지가 없는 경우만 했지만 이전 메시지가 있는 경우도 구현하기
③ setBookmark / getBookmark / deleteList 테스트 해보기
④ deleteList
- cascade로 구현했는데 List 삭제는 잘 되는데 content 삭제가 안됨(deleteAt이 안 찍힘)
프론트엔드 공부에 흥미가 없다보니 소홀히 했었는데, 오늘 구현하면서 느낀 점은 프론트엔드 공부도 해야겠다는 것이다,,, API를 사용하는 곳이 프론트이다 보니까, 프론트에서 작업할 때 어떤 식으로 API를 만들어놓아야 편하게 사용할 수 있겠구나에 대해 고민하며 작업을 했다.
그런데 프론트에 대해 아는 게 별로 없다보니까 어떤 식으로 구성했을 때 프론트에서 사용하기 쉬운지에 대해 감이 없어서 힘들었다. 물론 내일 직접 물어보면서 다시 구상할 것이지만, 내가 조금이라도 프론트 지식이 있었다면 질문의 개수가 줄었을 것이라 생각된다.
4) 프론트에게 질문
① query에 user_id / list_id / content_id를 넣을 수 있을까?
- user_id는 getUser와 같이 API로 받아오면 될 듯
- list_id는 getList를 통해 받은 list_id들을 프론트 쪽에서 저장해놓을 수 있는지?
- content_id 역시 getContent를 만들어서 content_id를 프론트에 저장해놔야할지?
아니면 request body에 content를 넣어서 보내서 백에서 검색해서 사용하는 방식으로 해야할지?
② bookmark
- 프론트에서 toggle을 구현하고 백으로 값을 보낼 수 있는지? 보낸다면 어떻게 값이 보내지는지?
- 숫자로 값을 보내는 게 좋은지? Boolean으로 하는 게 좋은지?
③ 구현한 목록에서 더 필요한 기능이 있을지?
역시 기능 구현을 해낼 때가 제일 짜릿한 것 같다!! 프로젝트 세팅과 CI/CD를 벗어나니 코딩하는게 재밌고 즐겁다,,!!