295 lines
11 KiB
JavaScript
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();
|
|
}
|
|
} |