초기 PM 소스 전체 업로드

This commit is contained in:
koj729
2026-06-12 17:14:03 +09:00
commit 4e33c9a02a
1769 changed files with 377797 additions and 0 deletions

View 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();
}
};