Skip to content

Commit

Permalink
[FEAT] #2 - 취업교육 keyword 검색 API 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
charBS0701 committed Jul 20, 2023
1 parent d1e5dd9 commit d0edccc
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 33 deletions.
54 changes: 31 additions & 23 deletions src/app/JobEdu/jobEduController.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,13 @@ const { response, errResponse } = require("../../../config/response");

export const getJobEduList = async (req, res) => {
try {
// 페이지 크기
let perPage = req.query.perPage;
// 페이지 번호
let page = req.query.page;

// 페이지 크기가 없으면 10으로 설정
if (perPage == undefined || typeof perPage == "undefined" || perPage == null) {
perPage = 10;
} else {
perPage = parseInt(perPage);
}

// 페이지 번호가 없으면 0으로 설정
if (page == undefined || typeof page == "undefined" || page == null) {
page = 0;
} else {
page = parseInt(page);
}

const jobEduListResult = await jobEduProvider.retrieveJobEduList(perPage, page);
const page = req.query.page || 1; // 페이지 번호가 주어지지 않은 경우 기본값은 1
const pageSize = req.query.pageSize || 10; // 페이지 크기가 주어지지 않은 경우 기본값은 10

const jobEduListResult = await jobEduProvider.retrieveJobEduList(
pageSize,
page
);

return res.send(response(baseResponse.SUCCESS, jobEduListResult));
} catch (error) {
Expand All @@ -33,9 +20,9 @@ export const getJobEduList = async (req, res) => {
};

export const getJobEduListCount = async (req, res) => {
const jobEduListCountResult = await jobEduProvider.retrieveJobEduListCount();
const jobEduListCountResult = await jobEduProvider.retrieveJobEduListCount();

return res.send(response(baseResponse.SUCCESS, jobEduListCountResult));
return res.send(response(baseResponse.SUCCESS, jobEduListCountResult));
};

export const getJobEduById = async (req, res) => {
Expand All @@ -46,4 +33,25 @@ export const getJobEduById = async (req, res) => {
const jobEduByIdResult = await jobEduProvider.retrieveJobEduById(jobEduId);

return res.send(response(baseResponse.SUCCESS, jobEduByIdResult));
}
};

export const getJobEduBySearch = async (req, res) => {
const keyword = req.query.keyword;
const page = req.query.page || 1; // 페이지 번호가 주어지지 않은 경우 기본값은 1
const pageSize = req.query.pageSize || 10; // 페이지 크기가 주어지지 않은 경우 기본값은 10
if (!keyword) {
return res.status(400).json({ error: "keyword is required" });
}

try {
const data = await jobEduProvider.searchWithPagination(
keyword,
page,
pageSize
);
return res.send(response(baseResponse.SUCCESS, data));
} catch (err) {
console.log(err.stack);
res.status(500).json({ error: "Something went wrong" });
}
};
40 changes: 35 additions & 5 deletions src/app/JobEdu/jobEduDao.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
const { logger } = require("../../../config/winston");
import pool from "../../../config/database";

export const selectJobEduList = async function (perPage, offset) {
export const selectJobEduList = async function (pageSize, offset) {
const query = `
SELECT * FROM job_educations ORDER BY posted_at DESC LIMIT ${perPage} OFFSET ${offset}`;
SELECT * FROM job_educations ORDER BY posted_at DESC LIMIT ${pageSize} OFFSET ${offset}`;

try {
const result = await pool.query(query);
return result.rows;
} catch (error) {
logger.error("쿼리 실패");
logger.error("selectJobEduList 쿼리 실패");
throw error;
}
};
Expand All @@ -23,7 +23,7 @@ export const selectJobEduListCount = async function () {
const result = await pool.query(query);
return result;
} catch (error) {
logger.error("쿼리 실패");
logger.error("selectJobEduListCount 쿼리 실패");
throw error;
}
};
Expand All @@ -36,7 +36,37 @@ export const selectJobEduById = async function (jobEduId) {
const result = await pool.query(query);
return result.rows[0];
} catch (error) {
logger.error("쿼리 실패");
logger.error("selectJobEduById 쿼리 실패");
throw error;
}
};

export const selectJobEduByKeyword = async function (
keyword,
offset,
pageSize
) {
const query = `
SELECT * FROM job_educations WHERE title LIKE '%${keyword}%' OR content LIKE '%${keyword}%' ORDER BY posted_at DESC LIMIT ${pageSize} OFFSET ${offset};`;

try {
const result = await pool.query(query);
return result.rows;
} catch (error) {
logger.error("selectJobEduByKeyword 쿼리 실패");
throw error;
}
};

export const selectJobEduTotalCountByKeyword = async function (keyword) {
const query = `
SELECT count(*) as total_count FROM job_educations WHERE title LIKE '%${keyword}%' OR content LIKE '%${keyword}%';`;

try {
const result = await pool.query(query);
return result.rows[0]["total_count"];
} catch (error) {
logger.error("selectJobEduTotalCountByKeyword 쿼리 실패");
throw error;
}
};
29 changes: 25 additions & 4 deletions src/app/JobEdu/jobEduProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ const jobEduDao = require("./jobEduDao");

const { logger } = require("../../../config/winston");

export const retrieveJobEduList = async function (perPage, page) {
export const retrieveJobEduList = async function (pageSize, page) {
try {
const offset = (page - 1) * perPage;
const result = await jobEduDao.selectJobEduList(perPage, offset);
const offset = (page - 1) * pageSize;
const result = await jobEduDao.selectJobEduList(pageSize, offset);
return result;
} catch (error) {
logger.error("DB 연결 실패");
Expand Down Expand Up @@ -37,4 +37,25 @@ export const retrieveJobEduById = async function (jobEduId) {
logger.error(error);
throw error;
}
}
};

// 취업지원 검색 함수
export const searchWithPagination = async function (keyword, page, pageSize) {
try {
const offset = (page - 1) * pageSize;
const result = await jobEduDao.selectJobEduByKeyword(
keyword,
offset,
pageSize
);
const totalCount = await jobEduDao.selectJobEduTotalCountByKeyword(keyword);
return {
totalCount: totalCount,
data: result,
};
} catch (error) {
logger.error("DB 연결 실패");
logger.error(error);
throw error;
}
};
5 changes: 4 additions & 1 deletion src/app/JobEdu/jobEduRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ module.exports = function (app) {
// 1. 취업교육 목록 API
app.get("/app/jobEdu", jobEdu.getJobEduList);

// 3. 취업교육 검색 API
app.get("/app/jobEdu/search", jobEdu.getJobEduBySearch);

// 2. 취업교육 상세 조회 API
app.get("/app/jobEdu/:jobEduId", jobEdu.getJobEduById);




/*
Expand Down

0 comments on commit d0edccc

Please sign in to comment.