using Aip.Service.Aip.Exceptions; using Aip.Service.Aip.Models; using Aip.Service.Aip.Serivces; using Aip.Service.Models.App; using Aip.Service.Models.Response; using Aip.Service.Repositories; using Aip.Service.Services.Interfaces; using Aip.Service.Utils; namespace Aip.Service.Services; public class BaseService { protected readonly IApiConfigService _aipConfigService; public BaseService(IApiConfigService aipConfigService) { _aipConfigService = aipConfigService; } protected CheckAip CheckAipRequest(string apiGuid, string dispFileName, string realFileName, bool isStream) { string reqFileName = ""; if (isStream) { reqFileName = _aipConfigService.GetRequestFileName(apiGuid + FileUtils.GetExtension(dispFileName)); } else { reqFileName = _aipConfigService.GetRequestFileName(realFileName); if (!FileUtils.IsExists(reqFileName)) { return new CheckAip(101, "파일이 존재하지 않습니다.", dispFileName); } } string? newFileExt = _aipConfigService.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 = FileUtils.GetFileNameWithoutExtension(dispFileName) + newFileExt; } else { result.dispFileName = FileUtils.GetFileNameWithoutExtension(realFileName) + newFileExt; } result.actualFileName = _aipConfigService.GetActualFileName(FileUtils.GetFileNameWithoutExtension(realFileName) + newFileExt); //result.actualFileName = _aipConfigService.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.Empty; string? owner = string.Empty; string? labelId = string.Empty; string? labelName = string.Empty; string? templateId = string.Empty; string? templateName = string.Empty; 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 = FileUtils.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 = FileUtils.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 = _aipConfigService.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 = FileUtils.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 = _aipConfigService.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 = FileUtils.GetFileName(actualFileName); result.fileData = FileUtils.GetFileData(_aipConfigService.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 + FileUtils.GetExtension(dispFileName); string fileStorageLocation = _aipConfigService.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; } }