-
2019-10-22 개발일지개발일지 2019. 10. 22. 18:17
# 오늘의 TODO
- 모바일 통신 API 수정
- 공지사항, 업데이트 글 상세보기에 이전 글 번호, 다음 글 번호 응답 데이터에 포함
- (마이그레이션 프로젝트) 메인 화면 API 개발
- 월 별 총 광고 수익금 조회
- 7일 광고 수익금 조회
# 모바일 통신 API 수정 진행 내용
1. 개발 목적
공지사항, 업데이트 글 상세보기 API는 요구사항에 없었던 내용이었는데, 다 만들고 나서 클라이언트 팀에 API 문서 전달하니까 요구사항이 추가되었다.
요구사항은 다음과 같다.
모바일 게임 앱 화면에서 공지사항이나 업데이트 글의 상세보기 화면에 이전 글 컴포넌트와 다음 글 컴포넌트가 존재한다.
그래서 이전 글이나 다음 글 버튼을 클릭 했을 때 이전 혹은 다음 글을 볼 수가 있어야 한다.
2. 개발 내용
기능 조건 사항
- 공지사항 글을 보고 있을 때 이전이나 다음 글로 이동하면 반드시 '공지사항' 글이어야 한다.
- 업데이트 글을 보고 있을 때 이전이나 다음 글로 이동하면 반드시 '업데이트' 글이어야 한다.
즉, 두 카테고리의 글이 섞여서 이동되면 안된다.
왜 이 조건 사항이 있냐면, 현재 해당 게시판의 데이터를 저장하는 테이블은 공지사항 테이블, 업데이트 테이블로 나뉘어지지 않고 하나의 테이블에 카테고리로 구분하여 저장하도록 설계되어 있다.
왜냐면 웹 사이트를 기준으로 설계했는데, 웹에서는 공지사항 게시판을 기준으로 카테고리 별로 관리 / 조회를 하도록 구성되어 있다.
그래서 하나의 테이블에 카테고리로 구별하여 관리하도록 되어 있다.
그러다보니 단순히 현재 보고 있는 글의 이전 혹은 다음 글을 조회하면 그 글이 '공지사항'일 수도 '업데이트'일 수도 있게 된다.
그러니 WHERE 조건절에 카테고리 별로 조회할 수 있도록 처리해야한다.
시퀄라이즈 함수가 수행될 때 서브 쿼리를 통해 이전 글 번호와 다음 글 번호를 조회해서 요구사항을 충족시켰다.
await Model.findOne({ attributes: [ [ sequelize.literal(`COLAESCE( (SELECT sub.id FROM table AS sub WHERE sub.id < ${nowId} AND sub.cateogry = main.category ORDER BY sub.id DESC LIMIT 1), 0)`), 'prevId'], [ sequelize.literal(`COLAESCE( (SELECT sub.id FROM table AS sub WHERE sub.id > ${nowId} AND sub.category = main.category ORDER BY sub.id ASC LIMIT 1), 0)`), 'nextId'] ] });
먼저 현재 보려고 하는 게시글을 조회하고, 현재 게시글의 카테고리를 기준으로 이전, 다음 글도 해당 카테고리의 글들만 조회한다.
그리고 이전 글이나 다음 글이 없으면 0으로 전달하여 클라이언트에서 대응 처리할 수 있도록 제공했다.
쿼리 작성하는건 귀찮지만 요런 까다로운 조건에 대해서는 뭐 너그러이 ~_~
'개발일지' 카테고리의 다른 글
2019-10-24 ~ 2019-10-25 휴가 (0) 2019.10.23 2019-10-23 개발일지 (0) 2019.10.23 2019-10-18 개발일지 (0) 2019.10.18 2019-10-17 개발일지 (0) 2019.10.17 2019-10-16 개발일지 (0) 2019.10.16 - 모바일 통신 API 수정