using AipGateway.AIP; using AipGateway.API.Application; using AipGateway.API.Application.Utils; using AipGateway.API.Domain.Entities; using AipGateway.API.Domain.Models.App; using AipGateway.API.Domain.Models.Response; using AipGateway.API.Services.Interfaces; using AipGateway.API.Utils; namespace AipGateway.API.Services { public class BaseService { protected readonly IAipFileService _aipFileService; public BaseService(IAipFileService aipFileService) { _aipFileService = aipFileService; } protected CheckAip CheckAipRequest(string apiGuid, string dispFileName, string realFileName, bool isStream, int aipJobType) { string reqFileName = ""; if (isStream) { reqFileName = _aipFileService.GetRequestFileName(apiGuid + AipFileUtils.getExtension(dispFileName)); } else { reqFileName = _aipFileService.GetRequestFileName(realFileName); if (!AipFileUtils.isExists(reqFileName)) { return new CheckAip(101, "파일이 존재하지 않습니다.", dispFileName); } } string? newFileExt = _aipFileService.GetSupportedFileType(reqFileName); if (newFileExt == null) { return new CheckAip(102, "지원하지 않는 파일형식 입니다.", dispFileName); } CheckAip result = new CheckAip(0, GlobalConstants.API_RESULT_SUCCESS, dispFileName); result.reqFileName = reqFileName; result.newFileExt = newFileExt; if (isStream) { result.dispFileName = AipFileUtils.getFileNameWithoutExtension(dispFileName) + newFileExt; } else { result.dispFileName = AipFileUtils.getFileNameWithoutExtension(realFileName) + newFileExt; } result.actualFileName = _aipFileService.GetActualFileName(AipFileUtils.getFileNameWithoutExtension(realFileName) + newFileExt); //result.actualFileName = _aipFileService.GetActualFileName(apiGuid + newFileExt); return result; } protected ResponseFile ResponseFileException(Exception exception, string displayFileName) { if (exception is AipFileException) { AipFileException aipFileException = (AipFileException)exception; return new ResponseFile { errorCode = aipFileException.ErrorCode, errorMessage = aipFileException.Message, dispFileName = displayFileName, }; } else { return new ResponseFile { errorCode = 109, errorMessage = exception.Message ?? "파일 작업 중에 시스템 오류가 발생했습니다.", dispFileName = displayFileName, }; } } protected ResponseStream ResponseStreamException(Exception exception, string displayFileName) { if (exception is AipFileException) { AipFileException aipFileException = (AipFileException)exception; return new ResponseStream { errorCode = aipFileException.ErrorCode, errorMessage = aipFileException.Message, dispFileName = displayFileName, }; } else { return new ResponseStream { errorCode = 109, errorMessage = exception.Message ?? "파일 스트림 작업 중에 시스템 오류가 발생했습니다.", dispFileName = displayFileName, }; } } protected ResponseInfo ResponseInfoException(Exception exception) { if (exception is AipFileException) { AipFileException aipFileException = (AipFileException)exception; return new ResponseInfo { errorCode = aipFileException.ErrorCode, errorMessage = aipFileException.Message, }; } else { return new ResponseInfo { errorCode = 109, errorMessage = exception.Message ?? "작업 중에 시스템 오류가 발생했습니다." }; } } protected ResponseInfo ResponseGetFileInfo(AipFileInfo fileInfo, string displayFileName) { bool isLabled = false; bool isProtected = false; DateTime creationTime = DateTime.Now; string contentId = ""; string owner = ""; string labelId = ""; string labelName = ""; string templateId = ""; string templateName = ""; long fileSize = 0; if (fileInfo != null) { fileSize = fileInfo.FileSize; if (fileInfo.Content != null) { creationTime = fileInfo.Content.CreationTime; } if (fileInfo.Label != null) { isLabled = true; labelId = fileInfo.Label.Id; labelName = fileInfo.Label.Name; } if (fileInfo.Protection != null) { owner = fileInfo.Protection.Owner; contentId = fileInfo.Protection.ContentId; if (fileInfo.Protection.ProtectionDescriptor != null) { isProtected = true; templateId = fileInfo.Protection.ProtectionDescriptor.TemplateId; templateName = fileInfo.Protection.ProtectionDescriptor.Name; } } } return new ResponseInfo { errorCode = 0, errorMessage = GlobalConstants.API_RESULT_SUCCESS, isLabled = isLabled, isProtected = isProtected, creationTime = creationTime, contentId = contentId, owner = owner, labelId = labelId, labelName = labelName, templateId = templateId, templateName = templateName, dispFileName = displayFileName, FileLabelGuid = labelId, FileProtectionGuid = templateId, FileOwner = owner, FileExt = Path.GetExtension(displayFileName), FileSize = fileSize, }; } protected ResponseBase ResponseBase(SetFileInfo fileInfo, string displayFileName, string realFileName, string actualFileName) { ResponseBase result = new ResponseBase { errorCode = fileInfo.errorNo, errorMessage = fileInfo.errorMsg, dispFileName = displayFileName, realFileName = realFileName, }; result.FileExt = AipFileUtils.getExtension(displayFileName); result.FileOwner = fileInfo.fileOwner; result.FileSize = fileInfo.fileSize; result.FileLabelGuid = fileInfo.labelGuid; result.FileProtectionGuid = fileInfo.templateGuid; result.NewFileName = displayFileName; result.NewFileOwner = fileInfo.newFileOwner; result.NewFileExt = AipFileUtils.getExtension(actualFileName); result.NewFileSize = fileInfo.newFileSize; result.NewFileLabelGuid = fileInfo.newFileLabelGuid; result.NewFileProtectionGuid = fileInfo.newFileTemplateGuid; return result; } protected ResponseFile ResponseSetFile(SetFileInfo fileInfo, string displayFileName, string realFileName, string actualFileName) { ResponseBase baseResponse = ResponseBase(fileInfo, displayFileName, realFileName, actualFileName); ResponseFile result = new ResponseFile { errorCode = baseResponse.errorCode, errorMessage = baseResponse.errorMessage, dispFileName = _aipFileService.GetDispFileName(baseResponse.dispFileName, actualFileName), FileId = baseResponse.FileId, FileName = baseResponse.FileName, FileLabelGuid = baseResponse.FileLabelGuid, FileProtectionGuid = baseResponse.FileProtectionGuid, FileOwner = baseResponse.FileOwner, FileExt = baseResponse.FileExt, FileSize = baseResponse.FileSize, NewFileName = baseResponse.NewFileName, NewFileLabelGuid = baseResponse.NewFileLabelGuid, NewFileProtectionGuid = baseResponse.NewFileProtectionGuid, NewFileOwner = baseResponse.NewFileOwner, NewFileExt = baseResponse.NewFileExt, NewFileSize = baseResponse.NewFileSize }; result.realFileName = realFileName; result.actualFileName = AipFileUtils.getFileName(actualFileName); return result; } protected ResponseStream ResponseSetStream(SetFileInfo fileInfo, string displayFileName, string actualFileName) { ResponseBase baseResponse = ResponseBase(fileInfo, displayFileName, "", actualFileName); ResponseStream result = new ResponseStream { errorCode = baseResponse.errorCode, errorMessage = baseResponse.errorMessage, dispFileName = _aipFileService.GetDispFileName(baseResponse.dispFileName, actualFileName), FileId = baseResponse.FileId, FileName = baseResponse.FileName, FileLabelGuid = baseResponse.FileLabelGuid, FileProtectionGuid = baseResponse.FileProtectionGuid, FileOwner = baseResponse.FileOwner, FileExt = baseResponse.FileExt, FileSize = baseResponse.FileSize, NewFileName = baseResponse.NewFileName, NewFileLabelGuid = baseResponse.NewFileLabelGuid, NewFileProtectionGuid = baseResponse.NewFileProtectionGuid, NewFileOwner = baseResponse.NewFileOwner, NewFileExt = baseResponse.NewFileExt, NewFileSize = baseResponse.NewFileSize }; result.outputFileName = AipFileUtils.getFileName(actualFileName); result.fileData = FileUtils.GetFileData(_aipFileService.GetActualFileName(actualFileName)); return result; } public CheckMultipartFile ValidateMultipartFile(IFormFile file, string apiGuid) { CheckMultipartFile result = new CheckMultipartFile { errorCode = 0, }; string dispFileName = file.FileName; if (dispFileName == null) { result.errorCode = 81; result.errorMessage = "작업 할 파일 이름을 알 수가 없습니다."; result.dispFileName = "UnknownFileName"; return result; } if (dispFileName.Contains("..")) { result.errorCode = 82; result.errorMessage = "파일 이름에 유효 하지 않은 경로가 포함 되어 있습니다."; return result; } if (file.Length <= 0) { result.errorCode = 83; result.errorMessage = "파일의 내용이 없습니다."; return result; } string saveFileName = apiGuid + AipFileUtils.getExtension(dispFileName); string fileStorageLocation = _aipFileService.GetRequestFileName(saveFileName); result.dispFileName = dispFileName; result.saveFileName = saveFileName; try { using (var stream = System.IO.File.Create(fileStorageLocation)) { file.CopyTo(stream); } } catch (IOException) { result.errorCode = 84; result.errorMessage = "파일 저장 중에 오류가 발생하였습니다."; return result; } return result; } } }