deedee0905 / CreateType

0 stars 0 forks source link

구독 api #24

Open deedee0905 opened 1 year ago

deedee0905 commented 1 year ago

구독 관련 기능

deedee0905 commented 1 year ago

오늘은 구독과 관련한 내용들을 만들기로 계획되어 있어서 오후부터 view 페이지 작업을 시작했다.

오전에는 이전에 만들었던 기능들에서 부족한 점을 보완하고 큰 부분만 완성하고 디테일을 건드리지 못한 부분들의 코드들을 살펴봤는데 어려운 부분만 남겨두어서 그런지.. 크게 진전이 있지는 않았다. 데이터를 조합하는 과정 자체가 아직은 머리가 아파서 원하는 것 만큼 진도가 나가질 않았다.

오늘의 계획한 분량은 마무리 해야하니 구독 관련한 view페이지 작업을 시작했는데, 단일 컨텐츠 post/view 페이지에 구독하기 btn을 만들었고 btn을 만들면서 필요없는 css 코드도 일부 삭제하였다.

구독 view 페이지에서 구독한 채널들을 한번에 볼 수 있도록 정렬하는건 table 태그를 쓰면 되지않을까? 생각했지만 모티브 삼고있는 페이지에 들어가서 확인해보니 list-group 이라는 부트스트랩을 사용하고 있었다.

이게 뭐지? 싶어서 검색을 해보았는데 테이블을 쓰지 않고도 데이터를 예쁘게 정돈할 수 있는 부트스트랩이라서 나도 적용을 해 보았다.

view 페이지 샘플 작업이 끝났으니 본격적으로 api를 만들어야겠다. api까지 만들고 나면 아침와 이른 오후까지 지지부진했던 디테일한 기능들을 보완하는데에 신경을 쏟아야겠다.

deedee0905 commented 1 year ago

구독 insert api를 만들었다. 이제 insert api를 만드는건 많이 익숙해져서 에러 없이 한 번에 기능을 완성했다. insert 기능을 만들고나니 아, 좋아요 처럼 중복으로 체크되면 안되겠네. 중복이 생기지 않게끔 코드를 추가적으로 더 만들어야겠다 라는 생각이 들었고, 모티브 된 페이지에서는 어떤식으로 표시가 되는지 확인하기 위해 사이트를 한 번 더 들어가보았다.

구독 delete api를 만들고 그 다음에 판별 기능을 순차적으로 만들어야겠다!!

deedee0905 commented 1 year ago

취소하기 api를 만들다가 mysql 워크벤치를 확인할 일이 있어서 데이터를 띄워봤는데 api 기능은 멀쩡히 돌아가는데 db에 쌓이는 값이 좀 이상해서 원인을 찾고있다.

유효성 검사에서는 userId 값과 channelId 값이 잘 처리되고 디버깅을 돌려봐도 내가 생각했던 값이 그대로 나오는데 db에 저장되는 값은 0으로만 나오고 있다.

deedee0905 commented 1 year ago

어느 부분이 오류인지 찾기가 어려워서 insert api를 다시 구성해보았는데, 기능 자체는 돌아가지만 이번에도 db로 쌓이는 값이 0으로 확인되고있다. 어느 부분을 확인해야할까?

deedee0905 commented 1 year ago

구독하기 api에서 데이터베이스에 값이 원하는대로 저장되지 않는 문제 해결 mapper에서 sql 쿼리를 짜는 와중에 실수를 했다. insert는 일치시킬 값이 없이 그냥 받은 parameter를 고대로 전달하면 되는건데 이런 실수를 하다니. 그래도 이런식으로 insert 쿼리를 짰을때 정상 수행이 되고 값은 0으로 저장된다는 에러를 알게되었다.. 다음에 비슷한 실수를 할 때는 훨씬 빨리 깨닫겠지??

deedee0905 commented 1 year ago

구독취소 api도 완성했다.

insert / delete api를 만드는게 이제 그렇게 어렵진 않지만 과정을 만드는게 중요한게 아니라 api가 호출이 되더라도 내가 의도한대로 값이 제대로 db에 쌓이는지, 원하는 값이 정확하게 지워지는게 맞는지 확인하는 과정이 더 중요하다 라는 걸 느끼게 되었다.

이렇게 하나씩 여기저기 치고박고 다 문제 일으켜가면서 배우는거지.. 라고 생각은 하는데 그래도 빨리 더 잘해지고싶다..

deedee0905 commented 1 year ago

post view 페이지에서 데이터를 합치는 와중에 like처럼 subcription 코드들도 post의 하위에 두는게 맞는 것 같아서 리팩토링을 진행하였다.

그런데 리팩토링을 진행했더니 전에는 기능하던 코드들이 에러가 나서 현재 에러를 찾는 중이다. db를 연결하는 와중에 문제가 있다고 계속 에러 메세지가 나오고 있는데 음... mapper에 있는 namespace의 이름은 틀린 부분이 없고 insert 태그의 id도 일치하는데 어디서 에러가 나는걸까??

deedee0905 commented 1 year ago

오류가 있다는 곳을 뚫~~~~어져라 쳐다봤는데 역시.. 지정해놓은대로 파일명mapper.xml로 파일명을 만들어야했는데 단순하게 파일명.xml이라고 해서 오류가 나고있었다. 당연히 dao를 찾을 수 없다고 나올 수 밖에 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

시간은 꽤 많이 걸렸지만... 그래도 나 혼자서 에러를 잡았으니 되었다고 생각하고 다음 기능들 빠르게 만들어야겠다!!!

deedee0905 commented 1 year ago

구독하기 판별 기능도 완성했다. 판별 기능을 만드는건 진짜 시간 별로 안 걸린듯 하다!!

오늘도 여러가지 에러를 많이 발생시켰고 해결하는데 꽤 오랜 시간이 걸렸다. 앞으로는 이런 자잘한 실수들을 좀 덜 했으면 좋겠다 ㅠㅠ

deedee0905 commented 1 year ago

생각을 해보니 구독 판별 기능은 만들었는데 포스트를 작성한 사람이 본인일때는 구독하기 기능 자체가 필요 없어서 코드를 추가하였다.

이미 post/view 페이지를 접속할때에 channelId가 필요하고 로그인하면서 해당 계정에 대한 channelId가 부여되므로 두 개의 값을 비교해서 처리하였다.

deedee0905 commented 1 year ago

로그인한 계정이 구독한 채널의 개수만큼 반복문을 통해 출력하는 부분은 완성하였다. 이제 출력된 내용을 채워야하는데 채널이름과 채널의 정보 등은 channel 테이블에 들어있다.

subscription 테이블 만으로는 안에 데이터를 다 채울 수 없는데 그렇다면 SubscriptionDetail 객체를 만들어서 subscription의 객체와 channel 객체 두 가지를 같이 조합한 다음 model로 값을 보내야하는지 현재 생각중에 있다.

deedee0905 commented 1 year ago

각각의 다른 테이블에 있는 정보를 model 객체로 합쳐서 데이터 출력하기에 성공하였다!!

이 부분이 너무 어려워서 계속 생각을 정리하느라 시간이 많이 필요했는데, 이전에 mysql을 공부했을때 join 을 썼던 기억이 나서 xml에서 데이터를 합칠 수 있지 않을까? 검색을 해보았다. join 기능을 사용할 수 있는 resultMap 이라는 xml 쿼리가 있었지만 어떻게 사용하는것인지 이건 조금 더 원리를 공부할 필요가 있을 것 같았다. 그래서 이전에 MyGram을 만들었을때 BO에서 데이터를 합쳐서 조작하는 방법을 다시 한 번 더 공부했고 지금 이 페이지에서도 데이터를 가져올 수 있도록 적용을 해 보았다.

subscription 테이블에 있는 정보들을 기반으로 가져와 channel 데이터에 channelId를 parameter로 주고 채널의 정보를 가져올 수 있도록 SubscrptionDetail이라는 객체를 만들어 보았고 이 데이터를 view 페이지로 출력을 해 보았다.

내가 머릿속에서 생각한 기능대로 정상 작동이 되어주어서 정말 다행이었다... 데이터를 합치는 부분을 아직 많이 해보지 않아서 걱정이 되었었는데 하나하나 생각을 노트에 적으면서 정리하고 코드로 구현해보니 다행히 결과가 잘 나온 것 같다.

데이터를 불러오는 과정에서 각각의 데이터가 가지고있는 분량이 다르다보니 화면 구성이 조금 예쁘지않게 변해 justify-content-around에서 justify-content-between으로 화면 구성 코드도 조금 변경하였다.

deedee0905 commented 1 year ago

구독한 채널을 전체적으로 볼 수 있는 view 페이지에서 구독을 취소하는 api 기능도 활용하였다. 가장 최근에 구독한 채널의 데이터가 가장 먼저 출력되게끔 mapper에서 코드도 일부 수정하였다 :-) !