Files
PM_test/controllers/gsimController.js
2026-06-12 17:14:03 +09:00

295 lines
11 KiB
JavaScript

const pool = require('../db/pool.js');
const env = process.env.NODE_ENV;
const tbProject = env === 'production' ? 'tb_project' : '_test_tb_project';
const tbPermission = env === 'production' ? 'tb_permission' : '_test_tb_permission';
const cloudClient = require('../config/cloudClient.js');
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
const {
ListObjectsV2Command,
DeleteObjectCommand,
CopyObjectCommand,
HeadObjectCommand,
PutObjectCommand,
GetObjectCommand,
ListBucketsCommand
} = require('@aws-sdk/client-s3');
// 🔻🔻🔻🔻🔻🔻🔻🔻 리스트관련 함수 시작 🔻🔻🔻🔻🔻🔻🔻🔻
// 분류 가져오기
exports.getListClass = async(req, res, next) =>{
const {steps, search} = req.query;
const client = await pool.connect();
let user_id = req.user.user_id;
let user_group = req.user.group;
try{
let queryString = `select b.class ,b.large_class, b.mid_class from ver4.${tbProject} a, ver4.ref_project_class b
where a.class = b.class and a.show_in_index = true `;
if(!user_group){
queryString += `and ( a.user_id = '${user_id}' or a.project_id in (select project_id from ver4.${tbPermission} where user_id = '${user_id}')) `;
}
if(steps){
//입력되는 필더 조건에 따라 변경예정
queryString += `and a.step in ( `;
for(let i =0; i < steps.length; i++){
queryString += ` '${steps[i]}' ${(i < steps.length-1)?',':''}`
}
queryString += ` ) `;
}
if(search != '' && search != null && search != undefined){
queryString += ` and UPPER(a.project_nm) like '%${search}%' `;
}
queryString += ` order by b.class asc`;
const {rows} = await client.query(queryString);
//순서때문에 client에서 받아서 처리
res.status(200).json({data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'getDepth1 error'});
}finally{
client.release();
}
}
//depth3 list불러오기
exports.getList = async (req,res,next) =>{
const {steps, classNo, search } = req.query;
const client = await pool.connect();
let user_id = req.user.user_id;
let user_group = req.user.group;
try{
// let queryString = `select * from ver4.tb_project where project_id in (select unnest(string_to_array(bookmark, ',')) from ver4.tb_user where user_id = $1)`;
let queryString = `select a.project_id, a.category, a.project_nm, a.lon, a.lat, a.height, a.step, a.emp_map, a.flyto, b.user_id, b.user_nm, b.company, b.dept, a.class, b.position
from ver4.${tbProject} a, ver4.tb_user b where a.user_id = b.user_id and a.show_in_index = true and a.class = ${classNo} `;
if(steps){
//입력되는 필더 조건에 따라 변경예정
queryString += `and a.step in ( `;
for(let i =0; i < steps.length; i++){
queryString += ` '${steps[i]}' ${(i < steps.length-1)?',':''}`
}
queryString += ` ) `;
}
if(!user_group){
queryString += `and ( a.user_id = '${user_id}' or a.project_id in (select project_id from ver4.${tbPermission} where user_id = '${user_id}')) `;
}
if(search != '' && search != null && search != undefined){
queryString += ` and UPPER(a.project_nm) like '%${search}%' `;
}
queryString += `order by project_id, project_nm asc`;
const {rows} = await client.query(queryString);
res.status(200).json({message : 'getModelList', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'getModelList error'});
}finally{
client.release();
}
}
// 🔺🔺🔺🔺🔺🔺🔺🔺 리스트관련 함수 끝 🔺🔺🔺🔺🔺🔺🔺🔺
// 🔻🔻🔻🔻🔻🔻🔻🔻 북마크관련 함수 시작 🔻🔻🔻🔻🔻🔻🔻🔻
exports.updateBookmark = async(req,res,next)=>{
const {bookmark} = req.query;
let user_id = req.user.user_id;
const client = await pool.connect();
try {
let queryString = `update ver4.tb_user set bookmark = $1 where user_id = $2`;
const { rows } = await client.query(queryString, [bookmark,user_id]);
res.status(200).json({ message: 'updateBookmark Done'});
}catch(error) {
console.error("updateBookmark err:", error);
}finally {
client.release();
}
}
// 🔺🔺🔺🔺🔺🔺🔺🔺 북마크관련 함수 끝 🔺🔺🔺🔺🔺🔺🔺🔺
exports.projectstatusList = async(req,res,next)=>{
const client = await pool.connect();
try{
let queryString = `select * from ver4.test_tb_projectstatus order by create_date`;
const {rows} = await client.query(queryString);
res.status(200).json({message : 'projectstatusList', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'projectstatusList error'});
}finally{
client.release();
}
}
exports.getPresignedUrl = async(req, res, next) =>{
const {bucket, objectKey} = req.query;
try{
let command = new GetObjectCommand({
Bucket: bucket,
Key: objectKey,
});
//cloudClient에 강제로 던지기
let url = await getSignedUrl(cloudClient, command, { expiresIn: 60 * 30 }); // 30분 유효
res.status(200).json({message : 'getProsignedUrl', data : url});
}catch(err){
console.error(err);
res.status(500).json({message : 'getProsignedUrl error'});
}
}
exports.uploadUrl = async(req, res, next) => {
const {filename} = req.query;
try{
const command = new PutObjectCommand({
Bucket: 'gsimdev',
Key: `projectStatus/${filename}`,
ContentType: 'application/pdf'
});
//cloudClient에 강제로 던지기
let url = await getSignedUrl(cloudClient, command, { expiresIn: 60 * 30 }); // 30분 유효
res.status(200).json({message : 'uploadUrl', data : url});
}catch(err){
console.error(err);
res.status(500).json({message : 'uploadUrl error'});
}
}
exports.insertProjectStatusData = async(req, res, next) => {
const {filename} = req.query;
const client = await pool.connect();
try{
let queryString = `insert into ver4.test_tb_projectstatus (file_nm, object_key, bucket) values ($1, $2, $3) returning *`;
const {rows} = await client.query(queryString, [filename, `projectStatus/${filename}`, 'gsimdev']);
res.status(200).json({message : 'insertProjectStatusData', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'insertProjectStatusData error'});
}finally{
client.release();
}
}
//우선 DB만 삭제
exports.deleteFile = async(req, res, next) => {
const {objectKey, bucket} = req.query;
const client = await pool.connect();
try{
let queryString = `delete from ver4.test_tb_projectstatus where object_key = $1 and bucket = $2 returning *`;
const {rows} = await client.query(queryString, [objectKey, bucket]);
res.status(200).json({message : 'deleteFile', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'deleteFile error'});
}finally{
client.release();
}
}
// 🔻🔻🔻🔻🔻🔻🔻🔻 new! 리스트관련 함수 시작 🔻🔻🔻🔻🔻🔻🔻🔻
// 전체 리스트 가져오기
exports.getAllList = async(req, res, next) =>{
const {steps, search, type, category} = req.query;
const client = await pool.connect();
let user_id = req.user.user_id;
let user_group = req.user.group;
try{
let queryString = `select b.class ,b.large_class, b.mid_class, a.*, (select user_nm from ver4.tb_user where user_id = a.user_id) as master from ver4.${tbProject} a, ver4.ref_project_class b
where a.class = b.class and a.show_in_index = true and category = '${category}' `;
if(!user_group){
queryString += `and ( a.user_id = '${user_id}' or a.project_id in (select project_id from ver4.${tbPermission} where user_id = '${user_id}')) `;
}
if(steps && steps != 'overseas'){
//입력되는 필더 조건에 따라 변경
queryString += `and a.step in ( `;
for(let i =0; i < steps.length; i++){
queryString += ` '${steps[i]}' ${(i < steps.length-1)?',':''}`
}
queryString += ` ) `;
}
if(type && type != 'overseas'){
//입력되는 필더 조건에 따라 변경
queryString += `and a.project_type in ( `;
for(let i =0; i < type.length; i++){
queryString += ` '${type[i]}' ${(i < type.length-1)?',':''}`
}
queryString += ` ) `;
}
if(search != '' && search != null && search != undefined){
queryString += ` and UPPER(a.project_nm) like '%${search}%' `;
}
if(steps == 'overseas' || type == 'overseas'){
queryString += ` and a.category = 'overseas' `;
}
queryString += ` order by b.class asc`;
const {rows} = await client.query(queryString);
//순서때문에 client에서 받아서 처리
res.status(200).json({data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'getDepth1 error'});
}finally{
client.release();
}
}
// 🔺🔺🔺🔺🔺🔺🔺🔺 new! 리스트관련 함수 끝 🔺🔺🔺🔺🔺🔺🔺🔺
exports.setProjectType = async (req,res, next)=>{
const {project_id, type} = req.query;
const client = await pool.connect();
try{
let query = `update ver4.tb_project set project_type = $1 where project_id = $2 returning *`;
const {rows} = await client.query(query, [type, project_id]);
res.status(200).json({message : 'setProjectTypeSuccess', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'setProjectType error'});
}finally{
client.release();
}
}
exports.setProjectStep = async (req,res, next)=>{
const {project_id, step} = req.query;
const client = await pool.connect();
try{
let query = `update ver4.tb_project set step = $1 where project_id = $2 returning *`;
const {rows} = await client.query(query, [step, project_id]);
res.status(200).json({message : 'setProjectStepSuccess', data : rows});
}catch(err){
console.error(err);
res.status(500).json({message : 'setProjectStep error'});
}finally{
client.release();
}
}