Merge pull request '401에러 수정' (#21) from feature/screen-management into dev
Reviewed-on: http://39.117.244.52:3000/kjs/ERP-node/pulls/21
This commit is contained in:
commit
deb01bc7a5
|
|
@ -172,7 +172,20 @@ router.get(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const filePath = path.join(UPLOAD_PATH, serverFilename as string);
|
// 회사별 폴더 구조를 고려하여 파일 경로 찾기
|
||||||
|
const user = req.user;
|
||||||
|
const companyCode = user?.companyCode || "default";
|
||||||
|
|
||||||
|
// 먼저 회사별 폴더에서 찾기
|
||||||
|
let filePath = FileSystemManager.findFileInCompanyFolders(
|
||||||
|
companyCode,
|
||||||
|
serverFilename as string
|
||||||
|
);
|
||||||
|
|
||||||
|
// 찾지 못하면 기본 uploads 폴더에서 찾기 (하위 호환성)
|
||||||
|
if (!filePath) {
|
||||||
|
filePath = path.join(UPLOAD_PATH, serverFilename as string);
|
||||||
|
}
|
||||||
|
|
||||||
// 파일 존재 확인
|
// 파일 존재 확인
|
||||||
if (!fs.existsSync(filePath)) {
|
if (!fs.existsSync(filePath)) {
|
||||||
|
|
@ -180,7 +193,8 @@ router.get(
|
||||||
fileId,
|
fileId,
|
||||||
serverFilename,
|
serverFilename,
|
||||||
filePath,
|
filePath,
|
||||||
userId: req.user?.userId,
|
companyCode,
|
||||||
|
userId: user?.userId,
|
||||||
});
|
});
|
||||||
|
|
||||||
res.status(404).json({
|
res.status(404).json({
|
||||||
|
|
@ -257,15 +271,37 @@ router.delete(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const filePath = path.join(UPLOAD_PATH, serverFilename);
|
// 회사별 폴더 구조를 고려하여 파일 경로 찾기
|
||||||
|
const user = req.user;
|
||||||
|
const companyCode = user?.companyCode || "default";
|
||||||
|
|
||||||
// 파일 존재 확인
|
// 먼저 회사별 폴더에서 찾기
|
||||||
|
let filePath = FileSystemManager.findFileInCompanyFolders(
|
||||||
|
companyCode,
|
||||||
|
serverFilename
|
||||||
|
);
|
||||||
|
|
||||||
|
// 찾지 못하면 기본 uploads 폴더에서 찾기 (하위 호환성)
|
||||||
|
if (!filePath) {
|
||||||
|
filePath = path.join(UPLOAD_PATH, serverFilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 파일 존재 확인 및 삭제
|
||||||
if (fs.existsSync(filePath)) {
|
if (fs.existsSync(filePath)) {
|
||||||
fs.unlinkSync(filePath);
|
fs.unlinkSync(filePath);
|
||||||
logger.info("파일 삭제 완료", {
|
logger.info("파일 삭제 완료", {
|
||||||
fileId,
|
fileId,
|
||||||
serverFilename,
|
serverFilename,
|
||||||
userId: req.user?.userId,
|
filePath,
|
||||||
|
companyCode,
|
||||||
|
userId: user?.userId,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.warn("삭제할 파일을 찾을 수 없음", {
|
||||||
|
fileId,
|
||||||
|
serverFilename,
|
||||||
|
companyCode,
|
||||||
|
userId: user?.userId,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,52 @@ export class FileSystemManager {
|
||||||
return sharedPath;
|
return sharedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회사별 폴더 구조에서 파일 찾기
|
||||||
|
* @param companyCode 회사 코드
|
||||||
|
* @param serverFilename 서버 파일명
|
||||||
|
* @returns 찾은 파일의 전체 경로 또는 null
|
||||||
|
*/
|
||||||
|
static findFileInCompanyFolders(
|
||||||
|
companyCode: string,
|
||||||
|
serverFilename: string
|
||||||
|
): string | null {
|
||||||
|
try {
|
||||||
|
const companyBasePath = path.join(
|
||||||
|
this.BASE_UPLOAD_PATH,
|
||||||
|
`company_${companyCode}`
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!fs.existsSync(companyBasePath)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 회사 폴더 내의 모든 하위 폴더를 재귀적으로 검색
|
||||||
|
const findFileRecursively = (dirPath: string): string | null => {
|
||||||
|
const items = fs.readdirSync(dirPath);
|
||||||
|
|
||||||
|
for (const item of items) {
|
||||||
|
const itemPath = path.join(dirPath, item);
|
||||||
|
const stats = fs.statSync(itemPath);
|
||||||
|
|
||||||
|
if (stats.isFile() && item === serverFilename) {
|
||||||
|
return itemPath;
|
||||||
|
} else if (stats.isDirectory()) {
|
||||||
|
const found = findFileRecursively(itemPath);
|
||||||
|
if (found) return found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
return findFileRecursively(companyBasePath);
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(`파일 검색 실패: ${companyCode}/${serverFilename}`, error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회사별 디스크 사용량 조회
|
* 회사별 디스크 사용량 조회
|
||||||
* @param companyCode 회사 코드
|
* @param companyCode 회사 코드
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue