327 lines
10 KiB
JavaScript
327 lines
10 KiB
JavaScript
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.*,
|
|
(SELECT notice_text
|
|
FROM ver4.tb_banner_notice b
|
|
WHERE (b.project_id = p.project_id OR b.project_id IS NULL)
|
|
AND b.status_code = 'NOTICE_STATUS_active'
|
|
AND CURRENT_DATE BETWEEN b.start_date AND b.end_date
|
|
ORDER BY b.banner_id DESC
|
|
LIMIT 1) as banner_notice
|
|
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();
|
|
}
|
|
}; |