10a43f876c
- ObjectStorage 适配层(供应商唯一缝)+ S3ObjectStorage(AWS SDK v2, path-style,内网/公网双端点分离签发);endpoint 未配置时服务可启动、 media 端点 500(沿 JWT 公钥先例) - POST /api/v1/media/uploads:白名单校验(purpose/mime/byteSize 全配置项) → uploading 行(objectKey 服务端生成不含用户输入)→ 预签名 PUT 凭据 (requiredHeaders 定型仅 Content-Type,TTL 10m) - complete:HEAD 校验存在性/大小/类型 → uploading→ready(guarded UPDATE 并发幂等);对象缺失保持 uploading 可重试,内容不符置 failed 终态; 防枚举 40405;新错误码 40405/42205 - 读取侧预签名 GET(TTL 1h),桶保持私有 - compose 纳入 minio 第六容器(镜像与 Testcontainer 同 tag,桶初始化走 应用启动 ensureBucket,三环境零分叉);init-secrets.sh 幂等追加 MinIO 根凭证到 .env(凭证零入库,ADR-021) - MediaUploadIntegrationTest 12 例:MinIO Testcontainer 全链路直传取回 + 六类失败路径 + 库层约束一致性;uploading 超时清理只记方案(报告 13 §6) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
134 lines
5.1 KiB
XML
134 lines
5.1 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||
<modelVersion>4.0.0</modelVersion>
|
||
|
||
<parent>
|
||
<groupId>com.patbond.patbond</groupId>
|
||
<artifactId>patbond-api</artifactId>
|
||
<version>1.0.0-SNAPSHOT</version>
|
||
<relativePath>../pom.xml</relativePath>
|
||
</parent>
|
||
|
||
<artifactId>patbond-user</artifactId>
|
||
<packaging>jar</packaging>
|
||
|
||
<name>patbond-user</name>
|
||
<description>User service for Patbond</description>
|
||
|
||
<dependencies>
|
||
<dependency>
|
||
<groupId>com.patbond.patbond</groupId>
|
||
<artifactId>patbond-common</artifactId>
|
||
<version>${project.version}</version>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-web</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-validation</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.security</groupId>
|
||
<artifactId>spring-security-crypto</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.flywaydb</groupId>
|
||
<artifactId>flyway-core</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.flywaydb</groupId>
|
||
<artifactId>flyway-database-postgresql</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.postgresql</groupId>
|
||
<artifactId>postgresql</artifactId>
|
||
<scope>runtime</scope>
|
||
</dependency>
|
||
<!-- Access token verification (RS256, public key only): jjwt is not in
|
||
the Boot BOM, version pinned here and in patbond-auth in step. -->
|
||
<dependency>
|
||
<groupId>io.jsonwebtoken</groupId>
|
||
<artifactId>jjwt-api</artifactId>
|
||
<version>0.12.6</version>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>io.jsonwebtoken</groupId>
|
||
<artifactId>jjwt-impl</artifactId>
|
||
<version>0.12.6</version>
|
||
<scope>runtime</scope>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>io.jsonwebtoken</groupId>
|
||
<artifactId>jjwt-jackson</artifactId>
|
||
<version>0.12.6</version>
|
||
<scope>runtime</scope>
|
||
</dependency>
|
||
<!-- ADR-016:对象存储适配层的 S3 兼容实现(自托管 MinIO / 迁云同一套代码)。
|
||
版本经根 pom 的 awssdk bom 管理。 -->
|
||
<dependency>
|
||
<groupId>software.amazon.awssdk</groupId>
|
||
<artifactId>s3</artifactId>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-starter-test</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-testcontainers</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.testcontainers</groupId>
|
||
<artifactId>postgresql</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
<!-- 媒体链路集成测试:MinIO Testcontainer,与 docker-compose 钉同一镜像
|
||
tag(ADR-016 三环境零分叉),CI 无外部依赖。 -->
|
||
<dependency>
|
||
<groupId>org.testcontainers</groupId>
|
||
<artifactId>minio</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
<dependency>
|
||
<groupId>org.testcontainers</groupId>
|
||
<artifactId>junit-jupiter</artifactId>
|
||
<scope>test</scope>
|
||
</dependency>
|
||
</dependencies>
|
||
|
||
<build>
|
||
<plugins>
|
||
<plugin>
|
||
<groupId>org.springframework.boot</groupId>
|
||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||
<!-- No spring-boot-starter-parent in this build, so the
|
||
executable-jar repackaging must be bound explicitly. -->
|
||
<executions>
|
||
<execution>
|
||
<goals>
|
||
<goal>repackage</goal>
|
||
</goals>
|
||
<configuration>
|
||
<!-- Keep the plain jar as the main artifact so other
|
||
modules can depend on this one (patbond-auth's
|
||
E2E test does); the runnable fat jar gets the
|
||
-exec classifier and is what the Dockerfile ships. -->
|
||
<classifier>exec</classifier>
|
||
</configuration>
|
||
</execution>
|
||
</executions>
|
||
</plugin>
|
||
</plugins>
|
||
</build>
|
||
</project>
|