티스토리 뷰
어드민 페이지는 따로 만들지 않아서 모임들은 DB에 임의로 등록해놨다.
유저에 따라 모임 가입 상태나 관심 목록이 다르기 때문에 사용자별로 모임을 불러왔다.
* 회원가입 URI : /clubs
1. controllers/clubController.js
const express = require("express");
const checkAuth = require("../middlewares/checkAuth");
const router = express.Router()
const clubService = require("../services/clubService")
// 모임 불러오기
router.get("/", checkAuth, async (req, res) => {
const userId = req.user.id
const newClubs = await clubService.getNew();
const allClubs = await clubService.getAll();
const categories = await clubService.getCategories();
const joinInfos = await clubService.getJoinInfos();
const likedClubsById = await clubService.getLikedClubsById(userId);
return res.json({ newClubs, allClubs, categories, joinInfos, likedClubsById });
})
- 모임들을 단순 조회하는 API기 때문에 HTTP Method는 GET을 이용했다.
- 구현해뒀던 checkAuth 미들웨어를 통해 request를 한 유저 id 값을 받아온다.
- newClubs : 새로 추가된 모임(최근 4개)
allClubs : 전체 모임
categories : 카테고리
joinInfos : 유저의 모임 가입 정보
likedClubsById : 유저의 관심 모임 목록
2. services/clubsService.js
const db = require("../libs/db")
// * SQL문 변수에 담아 사용
const CLUBS_WITH_CATEGORIES =
`SELECT cb.id AS clubs_id, cb.name AS clubs_name, location, capacity, img, views, description,
cg.id AS categories_id, cg.name AS categories_name
FROM clubs AS cb LEFT JOIN categories AS cg ON cb.category_id = cg.id`
const JOIN_INFO_WITH_USERS =
`SELECT users.id, users.name, status FROM clubs_users
LEFT JOIN users ON clubs_users.user_id = users.id`
const clubService = {
getNew: async () => {
const contentSize = 4;
const conn = await db.getConnection();
const [newClubs] = await conn.query(`${CLUBS_WITH_CATEGORIES} ORDER BY cb.id DESC LIMIT ${contentSize}`);
conn.release();
return newClubs;
},
getAll: async () => {
const conn = await db.getConnection();
const [clubs] = await conn.query(`${CLUBS_WITH_CATEGORIES}`);
conn.release();
return { clubs };
},
getCategories: async () => {
const conn = await db.getConnection();
const [categories] = await conn.query("SELECT * FROM categories");
conn.release();
return categories;
},
getJoinInfos: async () => {
const conn = await db.getConnection();
const [joinInfos] = await conn.query("SELECT * FROM clubs_users WHERE status = 'JOINED'");
conn.release();
return joinInfos;
},
getLikedClubsById : async (userId) => {
const conn = await db.getConnection();
const [likedClubsById] = await conn.query("SELECT club_id FROM likes WHERE user_id = ?", [userId])
conn.release();
return likedClubsById
},
}
module.exports = clubService;
* SQL문 변수에 담아 사용
const CLUBS_WITH_CATEGORIES =
`SELECT cb.id AS clubs_id, cb.name AS clubs_name, location, capacity, img, views, description,
cg.id AS categories_id, cg.name AS categories_name
FROM clubs AS cb LEFT JOIN categories AS cg ON cb.category_id = cg.id`
const JOIN_INFO_WITH_USERS =
`SELECT users.id, users.name, status FROM clubs_users
LEFT JOIN users ON clubs_users.user_id = users.id`
- 여러 번 사용될 SQL문을 변수에 담았다.
→ 값이 이렇게 상수인 경우는 변수명을 모두 대문자로 사용한다고 한다.
개선할 점
- 에러 핸들링
- new, all, categories, joinInfo 등을 모두 나눠서 가져올 필요가 있을까?
→ 데이터는 한 번에 보내고 프론트에서 가공해서 사용할 수 있을까? 뭐가 더 효율적일까 고민..
'프로젝트 > 모임모임' 카테고리의 다른 글
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 모임별 디테일 페이지 불러오기 (0) | 2022.05.27 |
|---|---|
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 사용자 권한(Authorization) 관련 미들웨어 구현 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 로그인 기능 구현 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 회원가입 기능 구현 (0) | 2022.05.26 |
| [모임 플랫폼 서비스 개발] 백엔드(Node.js) - 폴더 생성, 분류 (0) | 2022.05.26 |
댓글
