ApiFileService.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. using AipGateway.AIP;
  2. using AipGateway.API.Domain.IRepositories.IGenericRepositories;
  3. using AipGateway.API.Domain.Models.Request;
  4. using AipGateway.API.Domain.Models.Response;
  5. using AutoMapper;
  6. using Quartz.Util;
  7. namespace AipGateway.API.Services.impl
  8. {
  9. public class ApiFileService : IApiFileService
  10. {
  11. private readonly ILogger<ApiFileService> _log;
  12. private readonly IUnitOfWork _unitOfWork;
  13. private readonly IMapper _mapper;
  14. public ApiFileService(ILogger<ApiFileService> logger, IUnitOfWork unitOfWork, IMapper mapper)
  15. {
  16. _log = logger;
  17. _unitOfWork = unitOfWork;
  18. _mapper = mapper;
  19. _log.LogError("ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: ApiFileService");
  20. }
  21. public async Task<ResponseInfo> GetInfo(RequestFile req)
  22. {
  23. try
  24. {
  25. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  26. if (!File.Exists(reqFileName))
  27. {
  28. return new ResponseInfo
  29. {
  30. errorCode = 101,
  31. errorMessage = "파일이 존재하지 않습니다.",
  32. };
  33. }
  34. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  35. if (newFileExt == null)
  36. {
  37. return new ResponseInfo
  38. {
  39. errorCode = 102,
  40. errorMessage = "지원하지 않는 파일형식 입니다.",
  41. };
  42. }
  43. var task = Task.Run(() =>
  44. {
  45. var fileInfo = ContainerService.aipFileManager.GetFileInfo(reqFileName);
  46. bool isLabled = false;
  47. bool isProtected = false;
  48. DateTime creationTime = DateTime.Now;
  49. string contentId = string.Empty;
  50. string owner = string.Empty;
  51. string labelId = string.Empty;
  52. string labelName = string.Empty;
  53. string templateId = string.Empty;
  54. string templateName = string.Empty;
  55. Int64 fileSize = 0;
  56. if (fileInfo != null)
  57. {
  58. fileSize = fileInfo.FileSize;
  59. if (fileInfo.Content != null)
  60. {
  61. creationTime = fileInfo.Content.CreationTime;
  62. }
  63. if (fileInfo.Label != null)
  64. {
  65. isLabled = true;
  66. labelId = fileInfo.Label.Id;
  67. labelName = fileInfo.Label.Name;
  68. }
  69. if (fileInfo.Protection != null)
  70. {
  71. owner = fileInfo.Protection.Owner;
  72. contentId = fileInfo.Protection.ContentId;
  73. if (fileInfo.Protection.ProtectionDescriptor != null)
  74. {
  75. isProtected = true;
  76. templateId = fileInfo.Protection.ProtectionDescriptor.TemplateId;
  77. templateName = fileInfo.Protection.ProtectionDescriptor.Name;
  78. }
  79. }
  80. }
  81. return new ResponseInfo
  82. {
  83. isLabled = isLabled,
  84. isProtected = isProtected,
  85. creationTime = creationTime,
  86. contentId = contentId,
  87. owner = owner,
  88. labelId = labelId,
  89. labelName = labelName,
  90. templateId = templateId,
  91. templateName = templateName,
  92. dispFileName = req.dispFileName,
  93. FileLabelGuid = labelId,
  94. FileProtectionGuid = templateId,
  95. FileOwner = owner,
  96. FileExt = Path.GetExtension(req.dispFileName),
  97. FileSize = fileSize,
  98. };
  99. });
  100. ResponseInfo result = await task;
  101. return result;
  102. }
  103. catch (Exception)
  104. {
  105. throw;
  106. }
  107. }
  108. public async Task<ResponseFile> SetLabel(RequestFileSet req)
  109. {
  110. try
  111. {
  112. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  113. if (!File.Exists(reqFileName))
  114. {
  115. return new ResponseFile
  116. {
  117. errorCode = 101,
  118. errorMessage = "파일이 존재하지 않습니다.",
  119. dispFileName = req.dispFileName,
  120. };
  121. }
  122. var task = Task.Run(() =>
  123. {
  124. string fileExt = Path.GetExtension(reqFileName).ToLower();
  125. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  126. if (newFileExt == null)
  127. {
  128. return new ResponseFile
  129. {
  130. errorCode = 102,
  131. errorMessage = "지원하지 않는 파일형식 입니다.",
  132. dispFileName = req.dispFileName,
  133. };
  134. }
  135. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  136. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  137. string comment = req.comment.IsNullOrWhiteSpace() ? "SetLabel" : req.comment;
  138. SetFileInfo result = ContainerService.aipFileManager.SetLabel(reqFileName, actualFileName, req.email, req.aipGuid, "", comment);
  139. return new ResponseFile
  140. {
  141. errorCode = result.errorNo,
  142. errorMessage = result.errorMsg,
  143. dispFileName = dispFileName,
  144. outputFileName = Path.GetFileName(actualFileName),
  145. FileOwner = result.fileOwner,
  146. FileExt = fileExt,
  147. FileSize = result.fileSize,
  148. FileLabelGuid = result.lableGuid,
  149. FileProtectionGuid = result.templateGuid,
  150. NewFileName = dispFileName,
  151. NewFileOwner = result.newFileOwner,
  152. NewFileExt = newFileExt,
  153. NewFileSize = result.newFileSize,
  154. NewFileLabelGuid = result.newFileLabelGuid,
  155. NewFileProtectionGuid = result.newFileTemplateGuid,
  156. };
  157. });
  158. ResponseFile result = await task;
  159. return result;
  160. }
  161. catch (Exception)
  162. {
  163. throw;
  164. }
  165. }
  166. public async Task<ResponseFile> DelLabel(RequestFileDel req)
  167. {
  168. try
  169. {
  170. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  171. if (!File.Exists(reqFileName))
  172. {
  173. return new ResponseFile
  174. {
  175. errorCode = 101,
  176. errorMessage = "파일이 존재하지 않습니다.",
  177. dispFileName = req.dispFileName,
  178. };
  179. }
  180. var task = Task.Run(() =>
  181. {
  182. string fileExt = Path.GetExtension(reqFileName).ToLower();
  183. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  184. if (newFileExt == null)
  185. {
  186. return new ResponseFile
  187. {
  188. errorCode = 102,
  189. errorMessage = "지원하지 않는 파일형식 입니다.",
  190. dispFileName = req.dispFileName,
  191. };
  192. }
  193. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  194. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  195. string comment = req.comment.IsNullOrWhiteSpace() ? "DelLabel" : req.comment;
  196. SetFileInfo result = ContainerService.aipFileManager.DeleteLabel(reqFileName, actualFileName, req.email, comment);
  197. return new ResponseFile
  198. {
  199. errorCode = result.errorNo,
  200. errorMessage = result.errorMsg,
  201. dispFileName = dispFileName,
  202. outputFileName = Path.GetFileName(actualFileName),
  203. FileOwner = result.fileOwner,
  204. FileExt = fileExt,
  205. FileSize = result.fileSize,
  206. FileLabelGuid = result.lableGuid,
  207. FileProtectionGuid = result.templateGuid,
  208. NewFileName = dispFileName,
  209. NewFileOwner = result.newFileOwner,
  210. NewFileExt = newFileExt,
  211. NewFileSize = result.newFileSize,
  212. NewFileLabelGuid = result.newFileLabelGuid,
  213. NewFileProtectionGuid = result.newFileTemplateGuid,
  214. };
  215. });
  216. ResponseFile result = await task;
  217. return result;
  218. }
  219. catch (Exception)
  220. {
  221. throw;
  222. }
  223. }
  224. public async Task<ResponseFile> SetProtection(RequestFileSet req)
  225. {
  226. try
  227. {
  228. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  229. if (!File.Exists(reqFileName))
  230. {
  231. return new ResponseFile
  232. {
  233. errorCode = 101,
  234. errorMessage = "파일이 존재하지 않습니다.",
  235. dispFileName = req.dispFileName,
  236. };
  237. }
  238. var task = Task.Run(() =>
  239. {
  240. string fileExt = Path.GetExtension(reqFileName).ToLower();
  241. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  242. if (newFileExt == null)
  243. {
  244. return new ResponseFile
  245. {
  246. errorCode = 102,
  247. errorMessage = "지원하지 않는 파일형식 입니다.",
  248. dispFileName = req.dispFileName,
  249. };
  250. }
  251. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  252. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  253. string comment = req.comment.IsNullOrWhiteSpace() ? "SetProtection" : req.comment;
  254. SetFileInfo result = ContainerService.aipFileManager.SetProtection(reqFileName, actualFileName, req.email, req.aipGuid, comment);
  255. return new ResponseFile
  256. {
  257. errorCode = result.errorNo,
  258. errorMessage = result.errorMsg,
  259. dispFileName = dispFileName,
  260. outputFileName = Path.GetFileName(actualFileName),
  261. FileOwner = result.fileOwner,
  262. FileExt = fileExt,
  263. FileSize = result.fileSize,
  264. FileLabelGuid = result.lableGuid,
  265. FileProtectionGuid = result.templateGuid,
  266. NewFileName = dispFileName,
  267. NewFileOwner = result.newFileOwner,
  268. NewFileExt = newFileExt,
  269. NewFileSize = result.newFileSize,
  270. NewFileLabelGuid = result.newFileLabelGuid,
  271. NewFileProtectionGuid = result.newFileTemplateGuid,
  272. };
  273. });
  274. ResponseFile result = await task;
  275. return result;
  276. }
  277. catch (Exception)
  278. {
  279. throw;
  280. }
  281. }
  282. public async Task<ResponseFile> DelProtection(RequestFileDel req)
  283. {
  284. try
  285. {
  286. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  287. if (!File.Exists(reqFileName))
  288. {
  289. return new ResponseFile
  290. {
  291. errorCode = 101,
  292. errorMessage = "파일이 존재하지 않습니다.",
  293. dispFileName = req.dispFileName,
  294. };
  295. }
  296. var task = Task.Run(() =>
  297. {
  298. string fileExt = Path.GetExtension(reqFileName).ToLower();
  299. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  300. if (newFileExt == null)
  301. {
  302. return new ResponseFile
  303. {
  304. errorCode = 102,
  305. errorMessage = "지원하지 않는 파일형식 입니다.",
  306. dispFileName = req.dispFileName,
  307. };
  308. }
  309. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  310. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  311. string comment = req.comment.IsNullOrWhiteSpace() ? "DelLabel" : req.comment;
  312. SetFileInfo result = ContainerService.aipFileManager.DeleteLabel(reqFileName, actualFileName, req.email, comment);
  313. return new ResponseFile
  314. {
  315. errorCode = result.errorNo,
  316. errorMessage = result.errorMsg,
  317. dispFileName = dispFileName,
  318. outputFileName = Path.GetFileName(actualFileName),
  319. FileOwner = result.fileOwner,
  320. FileExt = fileExt,
  321. FileSize = result.fileSize,
  322. FileLabelGuid = result.lableGuid,
  323. FileProtectionGuid = result.templateGuid,
  324. NewFileName = dispFileName,
  325. NewFileOwner = result.newFileOwner,
  326. NewFileExt = newFileExt,
  327. NewFileSize = result.newFileSize,
  328. NewFileLabelGuid = result.newFileLabelGuid,
  329. NewFileProtectionGuid = result.newFileTemplateGuid,
  330. };
  331. });
  332. ResponseFile result = await task;
  333. return result;
  334. }
  335. catch (Exception)
  336. {
  337. throw;
  338. }
  339. }
  340. public async Task<ResponseFile> SetLabelProtection(RequestFileAllSet req)
  341. {
  342. try
  343. {
  344. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  345. if (!File.Exists(reqFileName))
  346. {
  347. return new ResponseFile
  348. {
  349. errorCode = 101,
  350. errorMessage = "파일이 존재하지 않습니다.",
  351. dispFileName = req.dispFileName,
  352. };
  353. }
  354. var task = Task.Run(() =>
  355. {
  356. string fileExt = Path.GetExtension(reqFileName).ToLower();
  357. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  358. if (newFileExt == null)
  359. {
  360. return new ResponseFile
  361. {
  362. errorCode = 102,
  363. errorMessage = "지원하지 않는 파일형식 입니다.",
  364. dispFileName = req.dispFileName,
  365. };
  366. }
  367. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  368. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  369. string comment = req.comment.IsNullOrWhiteSpace() ? "SetLabel" : req.comment;
  370. SetFileInfo result = ContainerService.aipFileManager.SetLabel(reqFileName, actualFileName, req.email, req.labelGuid, req.templateGuid, comment);
  371. return new ResponseFile
  372. {
  373. errorCode = result.errorNo,
  374. errorMessage = result.errorMsg,
  375. dispFileName = dispFileName,
  376. outputFileName = Path.GetFileName(actualFileName),
  377. FileOwner = result.fileOwner,
  378. FileExt = fileExt,
  379. FileSize = result.fileSize,
  380. FileLabelGuid = result.lableGuid,
  381. FileProtectionGuid = result.templateGuid,
  382. NewFileName = dispFileName,
  383. NewFileOwner = result.newFileOwner,
  384. NewFileExt = newFileExt,
  385. NewFileSize = result.newFileSize,
  386. NewFileLabelGuid = result.newFileLabelGuid,
  387. NewFileProtectionGuid = result.newFileTemplateGuid,
  388. };
  389. });
  390. ResponseFile result = await task;
  391. return result;
  392. }
  393. catch (Exception)
  394. {
  395. throw;
  396. }
  397. }
  398. public async Task<ResponseFile> DelLabelProtection(RequestFileDel req)
  399. {
  400. try
  401. {
  402. string reqFileName = ContainerService.aipConfig.SourceFileDir + req.realFileName;
  403. if (!File.Exists(reqFileName))
  404. {
  405. return new ResponseFile
  406. {
  407. errorCode = 101,
  408. errorMessage = "파일이 존재하지 않습니다.",
  409. dispFileName = req.dispFileName,
  410. };
  411. }
  412. var task = Task.Run(() =>
  413. {
  414. string fileExt = Path.GetExtension(reqFileName).ToLower();
  415. string? newFileExt = ContainerService.GetSupportedFileType(reqFileName);
  416. if (newFileExt == null)
  417. {
  418. return new ResponseFile
  419. {
  420. errorCode = 102,
  421. errorMessage = "지원하지 않는 파일형식 입니다.",
  422. dispFileName = req.dispFileName,
  423. };
  424. }
  425. string dispFileName = Path.GetFileNameWithoutExtension(req.realFileName) + newFileExt;
  426. string actualFileName = Path.Combine(ContainerService.aipConfig.TargetFileDir, dispFileName);
  427. string comment = req.comment.IsNullOrWhiteSpace() ? "DelLabel" : req.comment;
  428. SetFileInfo result = ContainerService.aipFileManager.DeleteLabel(reqFileName, actualFileName, req.email, comment, true);
  429. return new ResponseFile
  430. {
  431. errorCode = result.errorNo,
  432. errorMessage = result.errorMsg,
  433. dispFileName = dispFileName,
  434. outputFileName = Path.GetFileName(actualFileName),
  435. FileOwner = result.fileOwner,
  436. FileExt = fileExt,
  437. FileSize = result.fileSize,
  438. FileLabelGuid = result.lableGuid,
  439. FileProtectionGuid = result.templateGuid,
  440. NewFileName = dispFileName,
  441. NewFileOwner = result.newFileOwner,
  442. NewFileExt = newFileExt,
  443. NewFileSize = result.newFileSize,
  444. NewFileLabelGuid = result.newFileLabelGuid,
  445. NewFileProtectionGuid = result.newFileTemplateGuid,
  446. };
  447. });
  448. ResponseFile result = await task;
  449. return result;
  450. }
  451. catch (Exception)
  452. {
  453. throw;
  454. }
  455. }
  456. }
  457. }