초기 PM 소스 전체 업로드
This commit is contained in:
320
controllers/commonController.js
Normal file
320
controllers/commonController.js
Normal file
@@ -0,0 +1,320 @@
|
||||
const pool = require('../db/pool.js');
|
||||
const env = process.env.NODE_ENV;
|
||||
const { getIo } = require('../socket.js');
|
||||
|
||||
const tbProject = env == 'production'? 'tb_project':'_test_tb_project';
|
||||
const tbPermission = env == 'production'? 'tb_permission':'_test_tb_permission';
|
||||
|
||||
|
||||
function snakeToCamel(snakeStr) {
|
||||
return snakeStr.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
||||
}
|
||||
|
||||
exports.getEnvData = async (req,res,next)=>{
|
||||
const deploymentType = process.env.DEPLOYMENT_TYPE;
|
||||
const cloudType = process.env.CLOUD_TYPE;
|
||||
const serviceName = process.env.SERVICE_NAME;
|
||||
res.status(200).json({
|
||||
message : 'getEnvData',
|
||||
deploymentType: deploymentType,
|
||||
cloudType: cloudType,
|
||||
serviceName: serviceName,
|
||||
});
|
||||
}
|
||||
|
||||
exports.getProject = async (req,res,next)=>{
|
||||
let {project_id} = req.query;
|
||||
const client = await pool.connect();
|
||||
//////// 원본코드
|
||||
// let user_id = req.user.user_id;
|
||||
// let user_group = req.user.group;
|
||||
|
||||
//////// pm-bcmf 연결용 테스트 코드 - pm-bcmf url로 접속하면 정상적으로 로그인이 되지 않아 req.user가 없기 때문에 user_id, user_group 강제 설정
|
||||
let user_id = (req.user) ? req.user.user_id : undefined;
|
||||
let user_group = (req.user) ? req.user.group : undefined;
|
||||
|
||||
const authController = require('../controllers/authController');
|
||||
let bcmfId = await authController.getBcmfId();
|
||||
if (bcmfId && bcmfId.includes('bcmf-')) {
|
||||
user_id = bcmfId;
|
||||
user_group = 'bcmf';
|
||||
}
|
||||
|
||||
try {
|
||||
// 테스트
|
||||
let queryString = `
|
||||
select p.*, u.*
|
||||
from ver4.${tbProject} p
|
||||
inner join ver4.tb_user u
|
||||
on p.user_id = u.user_id
|
||||
where show_in_index = true
|
||||
`;
|
||||
|
||||
// let queryString = `
|
||||
// select p.*, u.*
|
||||
// from ver4.${tbProject} p
|
||||
// inner join ver4.tb_user u
|
||||
// on p.user_id = u.user_id
|
||||
// where show_in_index = true
|
||||
// `;
|
||||
|
||||
if(!user_group){
|
||||
queryString += `and ( p.user_id = '${user_id}' or p.project_id in (select project_id from ver4.${tbPermission} where user_id = '${user_id}')) `;
|
||||
}
|
||||
|
||||
// 251223 dev계정도 총괄 제한
|
||||
if(user_group != 'super'){
|
||||
queryString += ` and ( (p.project_type != 'secret' or p.project_type is null )
|
||||
or exists (select 1 from ver4.${tbPermission} tp where tp.project_id = p.project_id and tp.user_id = '${user_id}')
|
||||
) `;
|
||||
}
|
||||
|
||||
if(project_id && project_id != '')
|
||||
queryString += `and project_id = '${project_id}' `;
|
||||
queryString += `order by p.create_date`;
|
||||
|
||||
console.log(queryString);
|
||||
const {rows} = await client.query(queryString);
|
||||
res.status(200).json({message : 'getProject', data: rows});
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
res.status(500).json({message : 'getProject error'});
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
exports.mgmtFunc_updateProject = async (req,res)=>{
|
||||
let { params } = req.body;
|
||||
let { projectIdList, targetColumn, state, text } = params;
|
||||
|
||||
let value;
|
||||
if (targetColumn == 'is_active') value = state;
|
||||
if (targetColumn == 'banner_notice') value = text;
|
||||
|
||||
let projectArr = JSON.parse(projectIdList);
|
||||
|
||||
const client = await pool.connect();
|
||||
try {
|
||||
await client.query('BEGIN');
|
||||
|
||||
let updateQueryString = `
|
||||
UPDATE ver4.${tbProject}
|
||||
SET ${targetColumn} = $1
|
||||
WHERE project_id = ANY($2)
|
||||
`;
|
||||
|
||||
let selectQueryString = `
|
||||
SELECT p.*, u.*
|
||||
FROM ver4.${tbProject} p
|
||||
INNER JOIN ver4.tb_user u
|
||||
ON p.user_id = u.user_id
|
||||
WHERE show_in_index = true;
|
||||
`;
|
||||
|
||||
await client.query(updateQueryString, [value, projectArr]);
|
||||
let { rows } = await client.query(selectQueryString);
|
||||
|
||||
await client.query('COMMIT');
|
||||
|
||||
params.allProject = rows;
|
||||
|
||||
let successMessage = `updateProject_${snakeToCamel(targetColumn)}_success`;
|
||||
|
||||
let io = getIo();
|
||||
io.emit(successMessage, params);
|
||||
|
||||
res.status(200).json({
|
||||
message: successMessage,
|
||||
});
|
||||
|
||||
} catch(err) {
|
||||
console.error("updateProject err:", err);
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
exports.getVersion = async(req,res,next)=>{
|
||||
res.status(200).json({
|
||||
message : 'getVersion success',
|
||||
version : process.env.PROJECT_VERSION
|
||||
});
|
||||
}
|
||||
|
||||
// 🔻🔻🔻🔻🔻🔻🔻🔻 LIST화면용 함수 시작 🔻🔻🔻🔻🔻🔻🔻🔻
|
||||
|
||||
//프로젝트 (권한 있는) 목록들 가져오기
|
||||
exports.getProjects = async (req,res,next) => {
|
||||
let user_id = req.user.user_id;
|
||||
const client = await pool.connect();
|
||||
|
||||
try{
|
||||
let queryString = `select project_id, user_id, category, project_nm, create_date, lon, lat, height, step, emp_map, flyto from ver4.${tbProject} where project_id in (select project_id from ver4.${tbPermission} where user_id = $1)`;
|
||||
const {rows} = await client.query(queryString, [user_id]);
|
||||
|
||||
res.status(200).json({message : 'getProjects', data : rows});
|
||||
}catch(err){
|
||||
console.error(err);
|
||||
res.status(500).json({message : 'getProjects error'});
|
||||
}finally{
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
//북마크 프로젝트들 가져오기
|
||||
exports.getBookmark = async (req,res,next) =>{
|
||||
let user_id = req.user.user_id;
|
||||
const client = await pool.connect();
|
||||
|
||||
try{
|
||||
let queryString = `select project_id, user_id, category, project_nm, create_date, lon, lat, height, step, emp_map, flyto from ver4.tb_project where project_id in (select unnest(string_to_array(bookmark, ',')) from ver4.tb_user where user_id = $1)`;
|
||||
const {rows} = await client.query(queryString, [user_id]);
|
||||
|
||||
res.status(200).json({message : 'getBookmark', data : rows});
|
||||
}catch(err){
|
||||
console.error(err);
|
||||
res.status(500).json({message : 'getBookmark error'});
|
||||
}finally{
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
//북마크 update (JS의 array.toString() 형태로 넣기.)
|
||||
exports.updateBookmark = async (req, res, next) =>{
|
||||
let user_id = req.user.user_id;
|
||||
const {bookmark} = req.query;
|
||||
|
||||
const client = await pool.connect();
|
||||
try {
|
||||
let queryString = `update ver4.tb_user set bookmark = $1 where user_id = $2`;
|
||||
await client.query(queryString, [bookmark, user_id]);
|
||||
res.status(200).json({message : `updateBookmark`});
|
||||
}catch(err){
|
||||
console.error(err);
|
||||
res.status(500).json({message : `updateBookmark error`});
|
||||
}finally{
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
// 🔺🔺🔺🔺🔺🔺🔺🔺 LIST화면용 함수 끝 🔺🔺🔺🔺🔺🔺🔺🔺
|
||||
|
||||
// 프로젝트 정보 업데이트
|
||||
exports.updateProjectInfo = async (req, res) => {
|
||||
let { params } = req.body;
|
||||
|
||||
let result = await updateProjectInfoAction(params);
|
||||
|
||||
res.status(200).json(result);
|
||||
}
|
||||
|
||||
async function updateProjectInfoAction(params) {
|
||||
const client = await pool.connect();
|
||||
|
||||
try {
|
||||
const {
|
||||
projectId,
|
||||
category,
|
||||
project_nm,
|
||||
project_type,
|
||||
step,
|
||||
} = params
|
||||
|
||||
// let queryString;
|
||||
|
||||
// if(category !== 'overseas' && category !== 'bimproject') {
|
||||
// queryString = `
|
||||
// UPDATE ver4.${tbProject}
|
||||
// SET
|
||||
// project_type = $1,
|
||||
// step = $2,
|
||||
// project_nm = $3
|
||||
// WHERE project_id = $4
|
||||
// AND category = $5
|
||||
// `;
|
||||
// } else {
|
||||
let queryString = `
|
||||
UPDATE ver4.${tbProject}
|
||||
SET
|
||||
project_type = $1,
|
||||
step = $2,
|
||||
short_nm = $3
|
||||
WHERE project_id = $4
|
||||
AND category = $5
|
||||
`;
|
||||
// }
|
||||
|
||||
let values = [project_type, step, project_nm, projectId, category];
|
||||
|
||||
let { rows } = await client.query(queryString, values);
|
||||
return { message: 'updateProjectInfo_success'};
|
||||
|
||||
} catch(err) {
|
||||
console.error('updateProjectInfoAction err : ', err);
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
// 프로젝트 위치 업데이트
|
||||
exports.updateLocationInfo = async (req, res) => {
|
||||
let { params } = req.body;
|
||||
|
||||
let result = await updateLocationInfoAction(params);
|
||||
|
||||
res.status(200).json(result);
|
||||
}
|
||||
|
||||
async function updateLocationInfoAction(params) {
|
||||
const client = await pool.connect();
|
||||
|
||||
try {
|
||||
const {
|
||||
projectId,
|
||||
category,
|
||||
project_nm,
|
||||
lon,
|
||||
lat,
|
||||
} = params
|
||||
|
||||
let queryString = `
|
||||
UPDATE ver4.${tbProject}
|
||||
SET
|
||||
lon = $1,
|
||||
lat = $2
|
||||
WHERE project_id = $3
|
||||
AND category = $4
|
||||
AND project_nm = $5
|
||||
RETURNING lon, lat;
|
||||
`;
|
||||
|
||||
let values = [lon, lat, projectId, category, project_nm];
|
||||
|
||||
let { rows } = await client.query(queryString, values);
|
||||
return { message: 'updateLocationInfo_success', data: rows[0] };
|
||||
|
||||
} catch(err) {
|
||||
console.error('updateLocationInfoAction err : ', err);
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
}
|
||||
|
||||
// 일반 사용자용 보존/삭제 정책 조회 API
|
||||
exports.getSystemPolicyPublic = async (req, res, next) => {
|
||||
const client = await pool.connect();
|
||||
try {
|
||||
const result = await client.query("SELECT limit_file_count, limit_days, is_active FROM ver4.tb_system_policy WHERE policy_key = 'GLOBAL_DELETE_POLICY'");
|
||||
if (result.rows.length === 0) {
|
||||
return res.status(200).json({ limit_file_count: 100, limit_days: 30, is_active: false });
|
||||
}
|
||||
res.status(200).json(result.rows[0]);
|
||||
} catch (err) {
|
||||
console.error("getSystemPolicyPublic error:", err);
|
||||
res.status(500).json({ message: "정책 조회 중 오류가 발생했습니다." });
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user