refactor(image): 重构水印处理逻辑以提高可维护性

- 移除 PhotoProcessContext 中的水印相关字段
- 新增 WatermarkConfig 类封装水印配置
- 修改 WatermarkStage 通过构造函数注入配置
- 调整 PrinterServiceImpl 中水印配置的传递方式
- 更新单元测试以适应新的配置注入方式
- 统一从配置对象读取水印参数而非上下文
- 优化日志记录与偏移量计算逻辑
This commit is contained in:
2025-11-26 14:56:37 +08:00
parent 90efc908c5
commit 333c4d3ca7
6 changed files with 113 additions and 47 deletions

View File

@@ -3,6 +3,7 @@ package com.ycwl.basic.image.pipeline.stages;
import com.ycwl.basic.image.pipeline.core.PhotoProcessContext;
import com.ycwl.basic.image.pipeline.core.StageResult;
import com.ycwl.basic.image.pipeline.enums.ImageType;
import com.ycwl.basic.image.watermark.enums.ImageWatermarkOperatorEnum;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@@ -14,14 +15,18 @@ class WatermarkStageTest {
@Test
void testGetName() {
WatermarkStage stage = new WatermarkStage();
WatermarkConfig config = WatermarkConfig.builder().build();
WatermarkStage stage = new WatermarkStage(config);
assertEquals("WatermarkStage", stage.getName());
}
@Test
void testShouldExecute_NormalPhoto() {
WatermarkStage stage = new WatermarkStage();
WatermarkConfig config = WatermarkConfig.builder()
.watermarkType(ImageWatermarkOperatorEnum.PRINTER_DEFAULT)
.build();
WatermarkStage stage = new WatermarkStage(config);
PhotoProcessContext context = PhotoProcessContext.builder()
.originalUrl("https://example.com/test.jpg")
@@ -34,7 +39,10 @@ class WatermarkStageTest {
@Test
void testShouldExecute_Puzzle_ShouldSkip() {
WatermarkStage stage = new WatermarkStage();
WatermarkConfig config = WatermarkConfig.builder()
.watermarkType(ImageWatermarkOperatorEnum.PRINTER_DEFAULT)
.build();
WatermarkStage stage = new WatermarkStage(config);
PhotoProcessContext context = PhotoProcessContext.builder()
.originalUrl("https://example.com/puzzle.png")
@@ -47,7 +55,10 @@ class WatermarkStageTest {
@Test
void testShouldExecute_MobileUpload_ShouldSkip() {
WatermarkStage stage = new WatermarkStage();
WatermarkConfig config = WatermarkConfig.builder()
.watermarkType(ImageWatermarkOperatorEnum.PRINTER_DEFAULT)
.build();
WatermarkStage stage = new WatermarkStage(config);
PhotoProcessContext context = PhotoProcessContext.builder()
.originalUrl("https://example.com/mobile.jpg")
@@ -60,7 +71,9 @@ class WatermarkStageTest {
@Test
void testExecute_NoWatermarkType_ShouldSkip() {
WatermarkStage stage = new WatermarkStage();
// 创建没有 watermarkType 的配置
WatermarkConfig config = WatermarkConfig.builder().build();
WatermarkStage stage = new WatermarkStage(config);
PhotoProcessContext context = PhotoProcessContext.builder()
.originalUrl("https://example.com/test.jpg")