From 5a2ef8f754d6121088f97462d1613c2c88cfd1e2 Mon Sep 17 00:00:00 2001 From: sdw086 Date: Thu, 5 Mar 2026 17:12:00 +0900 Subject: [PATCH] =?UTF-8?q?[=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C]=20tusHook=20=EC=9E=91=EC=97=85=20-=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/file/FileController.java | 5 ++-- .../common/modules/file/dto/TusHookDto.java | 13 ++++++++++ .../modules/file/dto/TusHookEventDto.java | 13 ++++++++++ .../modules/file/dto/TusHookUploadDto.java | 16 ++++++++++++ .../common/modules/file/form/TusHookForm.java | 24 ++++++++++++++++++ .../modules/file/service/FileService.java | 25 +++++++++++++++++++ 6 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java create mode 100644 src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java create mode 100644 src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java create mode 100644 src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java diff --git a/src/main/java/com/alist/api/common/modules/file/FileController.java b/src/main/java/com/alist/api/common/modules/file/FileController.java index c54b1ca..e8db104 100644 --- a/src/main/java/com/alist/api/common/modules/file/FileController.java +++ b/src/main/java/com/alist/api/common/modules/file/FileController.java @@ -1,6 +1,7 @@ package com.alist.api.common.modules.file; import com.alist.api.common.modules.file.dto.UploadTokenDto; +import com.alist.api.common.modules.file.form.TusHookForm; import com.alist.api.common.response.ApiResponse; import com.alist.api.common.response.ApiResponseCode; import com.alist.api.common.modules.file.dto.UploadStartDto; @@ -82,8 +83,8 @@ public class FileController { } @PostMapping("/tusHook") - public ResponseEntity> tusHook(@RequestBody Map payload) { - log.debug("[tusHook] payload={}", payload); + public ResponseEntity> tusHook(@RequestBody TusHookForm tusHookForm) { + fileService.insertFileAndSave(tusHookForm.tusHookDto()); return ApiResponse.entity("", ApiResponseCode.CODE_200); } } diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java new file mode 100644 index 0000000..cb169d3 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookDto.java @@ -0,0 +1,13 @@ +package com.alist.api.common.modules.file.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookDto { + private TusHookEventDto tusHookEventDto; + private TusHookUploadDto tusHookUploadDto; +} diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java new file mode 100644 index 0000000..9770184 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookEventDto.java @@ -0,0 +1,13 @@ +package com.alist.api.common.modules.file.dto; + + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookEventDto { + private String Type; +} diff --git a/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java b/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java new file mode 100644 index 0000000..f767e38 --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/dto/TusHookUploadDto.java @@ -0,0 +1,16 @@ +package com.alist.api.common.modules.file.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +import java.util.Map; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookUploadDto { + private String id; + private Long size; + private Map metaData; +} diff --git a/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java b/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java new file mode 100644 index 0000000..9ac557e --- /dev/null +++ b/src/main/java/com/alist/api/common/modules/file/form/TusHookForm.java @@ -0,0 +1,24 @@ +package com.alist.api.common.modules.file.form; + +import com.alist.api.common.modules.file.dto.TusHookDto; +import com.alist.api.common.modules.file.dto.TusHookEventDto; +import com.alist.api.common.modules.file.dto.TusHookUploadDto; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TusHookForm { + private TusHookEventDto event; + private TusHookUploadDto upload; + + public TusHookDto tusHookDto() { + TusHookDto tusHookDto = new TusHookDto(); + tusHookDto.setTusHookEventDto(this.event); + tusHookDto.setTusHookUploadDto(this.upload); + + return tusHookDto; + } +} diff --git a/src/main/java/com/alist/api/common/modules/file/service/FileService.java b/src/main/java/com/alist/api/common/modules/file/service/FileService.java index af16dd9..13b0718 100644 --- a/src/main/java/com/alist/api/common/modules/file/service/FileService.java +++ b/src/main/java/com/alist/api/common/modules/file/service/FileService.java @@ -1,14 +1,19 @@ package com.alist.api.common.modules.file.service; +import com.alist.api.common.modules.file.dto.TusHookDto; +import com.alist.api.common.modules.file.dto.TusHookUploadDto; import com.alist.api.common.modules.file.dto.UploadStartDto; import com.alist.api.common.modules.file.dto.UploadTokenDto; import com.alist.api.common.modules.file.mapper.FileMapper; import com.alist.api.config.jwt.JwtTokenProvider; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.Map; import java.util.UUID; +@Slf4j @Service public class FileService { @Value("${file.upload.tus-endpoint}") @@ -67,4 +72,24 @@ public class FileService { return uploadTokenDto; } + + public void insertFileAndSave(TusHookDto tusHookDto) { + if (tusHookDto == null || tusHookDto.getTusHookEventDto() == null || tusHookDto.getTusHookUploadDto() == null) { + log.debug("[tusHook] invalid payload"); + return; + } + + String eventType = tusHookDto.getTusHookEventDto().getType(); + TusHookUploadDto upload = tusHookDto.getTusHookUploadDto(); + Map meta = upload.getMetaData(); + + String uploadId = upload.getId(); + Long size = upload.getSize(); + String fileMasterKey = meta == null ? null : meta.get("fileMasterKey"); + String filename = meta == null ? null : meta.get("filename"); + String filetype = meta == null ? null : meta.get("filetype"); + + log.debug("[tusHook] eventType={}, uploadId={}, size={}, fileMasterKey={}, filename={}, filetype={}", + eventType, uploadId, size, fileMasterKey, filename, filetype); + } }