401에러 수정 #21

Merged
kjs merged 1 commits from feature/screen-management into dev 2025-09-05 15:13:40 +09:00
2 changed files with 87 additions and 5 deletions

View File

@ -172,7 +172,20 @@ router.get(
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)) {
@ -180,7 +193,8 @@ router.get(
fileId,
serverFilename,
filePath,
userId: req.user?.userId,
companyCode,
userId: user?.userId,
});
res.status(404).json({
@ -257,15 +271,37 @@ router.delete(
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)) {
fs.unlinkSync(filePath);
logger.info("파일 삭제 완료", {
fileId,
serverFilename,
userId: req.user?.userId,
filePath,
companyCode,
userId: user?.userId,
});
} else {
logger.warn("삭제할 파일을 찾을 수 없음", {
fileId,
serverFilename,
companyCode,
userId: user?.userId,
});
}

View File

@ -132,6 +132,52 @@ export class FileSystemManager {
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