diff --git a/src/controller/book.ts b/src/controller/book.ts index 65ff054..d117c5d 100644 --- a/src/controller/book.ts +++ b/src/controller/book.ts @@ -108,9 +108,93 @@ const getBookController = async (req: Request, res: Response) => { } }; +/** + * @서재 독서전 책 조회 + * @route GET /book/pre + * @access private + */ +const getBookPreController = async (req: Request, res: Response) => { + try { + const resData = await bookService.getBookPreService(req.user.id); + return response.dataResponse( + res, + returnCode.OK, + "독서전 서재 조회 성공", + true, + resData + ); + } catch (err) { + slack.slackWebhook(req, err.message); + console.error(err.message); + return response.basicResponse( + res, + returnCode.INTERNAL_SERVER_ERROR, + false, + "서버 오류" + ); + } +}; + +/** + * @서재 독서중 책 조회 + * @route GET /book/peri + * @access private + */ +const getBookPeriController = async (req: Request, res: Response) => { + try { + const resData = await bookService.getBookPeriService(req.user.id); + return response.dataResponse( + res, + returnCode.OK, + "독서중 서재 조회 성공", + true, + resData + ); + } catch (err) { + slack.slackWebhook(req, err.message); + console.error(err.message); + return response.basicResponse( + res, + returnCode.INTERNAL_SERVER_ERROR, + false, + "서버 오류" + ); + } +}; + +/** + * @서재 독서완료 책 조회 + * @route GET /book/post + * @access private + */ +const getBookPostController = async (req: Request, res: Response) => { + try { + const resData = await bookService.getBookPostService(req.user.id); + return response.dataResponse( + res, + returnCode.OK, + "독서완료 서재 조회 성공", + true, + resData + ); + } catch (err) { + slack.slackWebhook(req, err.message); + console.error(err.message); + return response.basicResponse( + res, + returnCode.INTERNAL_SERVER_ERROR, + false, + "서버 오류" + ); + } +}; + const bookController = { postBookController, getBookController, + getBookPreController, + getBookPeriController, + getBookPostController, }; export default bookController; diff --git a/src/router/book.ts b/src/router/book.ts index 692fd3e..aecd663 100644 --- a/src/router/book.ts +++ b/src/router/book.ts @@ -10,5 +10,8 @@ const router = express.Router(); router.post("/", isLogin, bookController.postBookController); router.get("/", auth, bookController.getBookController); +router.get("/pre", auth, bookController.getBookPreController); +router.get("/peri", auth, bookController.getBookPeriController); +router.get("/post", auth, bookController.getBookPostController); module.exports = router; diff --git a/src/service/book.ts b/src/service/book.ts index ffc042a..f5793c2 100644 --- a/src/service/book.ts +++ b/src/service/book.ts @@ -133,7 +133,115 @@ const getBookService = async (userId: number) => { thumbnail: review.book.thumbnail, title: review.book.title, author: review.book.author, - state: review.reviewSt, + reviewSt: review.reviewSt, + }); + }) + ); + + return { books: books }; +}; + +/** + * @서재 독서전 책 조회 + * @route GET /book/pre + * @access private + */ +const getBookPreService = async (userId: number) => { + let books = []; + await Review.findAll({ + attributes: ["id", "reviewSt"], + include: [ + { + model: Book, + attributes: ["title", "author", "thumbnail"], + }, + ], + where: { + userId, + reviewSt: 2, + isDeleted: false, + }, + order: [["updatedAt", "DESC"]], + }).then((reviews) => + reviews.forEach((review) => { + books.push({ + reviewId: review.id, + thumbnail: review.book.thumbnail, + title: review.book.title, + author: review.book.author, + reviewSt: review.reviewSt, + }); + }) + ); + + return { books: books }; +}; + +/** + * @서재 독서중 책 조회 + * @route GET /book/peri + * @access private + */ +const getBookPeriService = async (userId: number) => { + let books = []; + await Review.findAll({ + attributes: ["id", "reviewSt"], + include: [ + { + model: Book, + attributes: ["title", "author", "thumbnail"], + }, + ], + where: { + userId, + reviewSt: 3, + isDeleted: false, + }, + order: [["updatedAt", "DESC"]], + }).then((reviews) => + reviews.forEach((review) => { + books.push({ + reviewId: review.id, + thumbnail: review.book.thumbnail, + title: review.book.title, + author: review.book.author, + reviewSt: review.reviewSt, + }); + }) + ); + + return { books: books }; +}; + +/** + * @서재 독서완료 책 조회 + * @route GET /book/post + * @access private + */ +const getBookPostService = async (userId: number) => { + let books = []; + await Review.findAll({ + attributes: ["id", "reviewSt"], + include: [ + { + model: Book, + attributes: ["title", "author", "thumbnail"], + }, + ], + where: { + userId, + reviewSt: 4, + isDeleted: false, + }, + order: [["updatedAt", "DESC"]], + }).then((reviews) => + reviews.forEach((review) => { + books.push({ + reviewId: review.id, + thumbnail: review.book.thumbnail, + title: review.book.title, + author: review.book.author, + reviewSt: review.reviewSt, }); }) ); @@ -144,6 +252,9 @@ const getBookService = async (userId: number) => { const bookService = { postBookService, getBookService, + getBookPreService, + getBookPeriService, + getBookPostService, }; export default bookService;