Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
77327dc
feat(image): images 원본 파일명 컬럼 추가 및 업로드 상태 전이 리포지토리 메서드 추가
hwangdaesun Jul 27, 2026
1c695af
feat(board): 도메인 간 접근용 BoardQueryService 추가
hwangdaesun Jul 27, 2026
2f9c875
feat(config): GCS Storage 빈 및 서명 URL 설정 프로퍼티 추가
hwangdaesun Jul 27, 2026
b31184b
feat(image): 서명 URL 발급 및 업로드 완료 API 구현
hwangdaesun Jul 27, 2026
82578d7
docs(agents): BoardQueryService/GCS 설정/이미지 업로드 기능 문서 갱신
hwangdaesun Jul 27, 2026
91461fa
refactor(image): analysis/photos API로 대체되며 기존 image 도메인 제거
hwangdaesun Jul 28, 2026
0dc8391
feat(analysis): analysis/photos 스키마로 마이그레이션 재구성 및 jOOQ 코드 재생성
hwangdaesun Jul 28, 2026
fd71d2a
feat(storage): 도메인 공용 ObjectKeyGenerator 추가
hwangdaesun Jul 28, 2026
70d9278
feat(analysis): 분석 생성/업로드 URL 발급 및 업로드 완료 확인 API 구현
hwangdaesun Jul 28, 2026
f881ac6
fix(analysis): PhotoRepositoryTest의 uploadedAt 비교를 마이크로초로 truncate
hwangdaesun Jul 28, 2026
9d65bd1
refactor(analysis): API 버저닝을 경로 프리픽스에서 X-API-Version 헤더 방식으로 전환
hwangdaesun Jul 28, 2026
0cc5594
fix(analysis): startUpload이 진행 중이 아닌 분석을 거부하고 누락 사진을 PENDING으로 유지하도록 수정
hwangdaesun Jul 28, 2026
c9fbf94
fix(analysis): startUpload의 GCS 호출 중 DB 커넥션 점유 방지 및 GCS 타임아웃 설정
hwangdaesun Jul 28, 2026
808dd6b
fix(analysis): startUpload 응답을 delta 대신 최종 집계로 구성해 레이스 컨디션 제거
hwangdaesun Jul 28, 2026
35f81a5
fix(analysis): issueUploadUrls 반환 개수 검증 추가
hwangdaesun Jul 28, 2026
163c18f
fix(analysis): /start 응답 상태 코드를 202 Accepted로 변경
hwangdaesun Jul 28, 2026
a25b8a8
fix(analysis): 업로드 signed URL에 15MB 크기 제한 헤더 서명 추가
hwangdaesun Jul 28, 2026
5439d2f
docs(analysis): GcsPhotoStorage 크기 제한 헤더 서명 내용을 AGENTS.md에 반영
hwangdaesun Jul 28, 2026
6eec0fb
fix(analysis): existingObjectKeys가 버리던 Blob 크기/생성시각을 반영
hwangdaesun Jul 28, 2026
4694929
docs(analysis): BlobMeta 기반 existingObjects/updateStatusBatch 변경 내용을 …
hwangdaesun Jul 28, 2026
054b8bc
refactor(analysis): PhotoObjectKeys를 infrastructure로 이동하고 object로 전환
hwangdaesun Jul 28, 2026
a405085
docs(analysis): PhotoObjectKeys의 infrastructure 이동을 AGENTS.md에 반영
hwangdaesun Jul 28, 2026
d336731
fix(analysis): PhotoRepository의 DB 값 역매핑이 요청 검증 예외 대신 500을 던지도록 수정
hwangdaesun Jul 28, 2026
432cef9
docs(analysis): PhotoRepository의 DB 값 역매핑 방식을 AGENTS.md에 반영
hwangdaesun Jul 28, 2026
9f839a7
fix(analysis): CreateAnalysisRequest.photos에 명세 기준 개수(90~100) 제약 추가
hwangdaesun Jul 28, 2026
9d914c6
docs(analysis): CreateAnalysisRequest의 Size 제약을 AGENTS.md에 반영
hwangdaesun Jul 28, 2026
f336681
fix(analysis): 업로드 signed URL 만료 시간을 명세 기준 15분으로 수정하고 프로퍼티명을 용도별로 명확화
hwangdaesun Jul 28, 2026
b42176b
docs(config): GCS signed URL 만료 프로퍼티명 변경을 AGENTS.md에 반영
hwangdaesun Jul 28, 2026
d7eb9a2
fix(analysis): analysis.progress에 0~100 범위 CHECK 제약 추가
hwangdaesun Jul 29, 2026
680c78f
fix(analysis): analysis 인덱스를 (user_id, created_at) 복합으로 변경
hwangdaesun Jul 29, 2026
12b310d
fix(analysis): photos.taken_at을 NOT NULL로 변경하고 PhotoCreate.takenAt도 n…
hwangdaesun Jul 29, 2026
182f095
test(analysis): AnalysisServiceTest의 순서 검증을 인덱스별 비교로 개선
hwangdaesun Jul 29, 2026
0a9ee69
test(analysis): 중복된 contentType 검증 컨트롤러 테스트 제거
hwangdaesun Jul 29, 2026
9fd91a9
docs(analysis): 90~100장 수량 검증과 lifecycle business rules 분리 문서화
hwangdaesun Jul 29, 2026
8cd4c78
style(test): AnalysisServiceTest 불필요한 주석 제거
hwangdaesun Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ SERVER_PORT=8080
CORS_ALLOWED_ORIGINS=http://localhost:3000
SWAGGER_USER=ppotto
SWAGGER_PASSWORD=ppotto
GCS_BUCKET=
GCS_CREDENTIALS_PATH=./secrets/gcs-service-account.json
GCS_SIGNED_URL_EXPIRATION_MINUTES=60
Comment thread
hwangdaesun marked this conversation as resolved.
Outdated
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ out/
.env
.env.*
!.env.template
/secrets/
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ photo/
## Planned Conventions

- Primary keys for new tables: `uuid primary key default uuidv7()` (Postgres 18 built-in, time-ordered).
- API versioning: adopt Spring Framework 7 native API versioning when the first public API ships.
- API versioning: 첫 공개 API(`analysis/presentation/AnalysisController.kt`)는 `/api/v1/...` URL 경로 프리픽스로 버저닝했다 — Spring Framework 7 네이티브 API 버저닝(`ApiVersionConfigurer`)은 아직 도입하지 않음. 다음 공개 API를 추가할 때 네이티브 버저닝으로 전환할지, 경로 프리픽스 방식을 계속 쓸지 결정 필요.

## DB Workflow

Expand Down
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ dependencies {
implementation(platform(libs.spring.cloud.dependencies))

implementation(libs.flyway.database.postgresql)
implementation(libs.google.cloud.storage)
implementation(libs.jackson.module.kotlin)
implementation(libs.jooq.kotlin)
implementation(libs.kotlin.reflect)
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spring-dependency-management = "1.1.7"
spring-cloud = "2025.1.2"
jooq = "3.21.6"
flyway = "12.4.0"
google-cloud-storage = "2.70.0"
postgresql = "42.7.11"
kotest = "6.2.3"
spring-dotenv = "5.1.0"
Expand All @@ -31,6 +32,7 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect" }
jackson-module-kotlin = { module = "tools.jackson.module:jackson-module-kotlin" }
jooq-kotlin = { module = "org.jooq:jooq-kotlin", version.ref = "jooq" }
flyway-database-postgresql = { module = "org.flywaydb:flyway-database-postgresql", version.ref = "flyway" }
google-cloud-storage = { module = "com.google.cloud:google-cloud-storage", version.ref = "google-cloud-storage" }
postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
spring-dotenv = { module = "me.paulschwarz:springboot4-dotenv", version.ref = "spring-dotenv" }
testcontainers-junit-jupiter = { module = "org.testcontainers:testcontainers-junit-jupiter" }
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 13 additions & 6 deletions src/generated/jooq/com/github/nexters/ppotto/jooq/Public.kt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

219 changes: 219 additions & 0 deletions src/generated/jooq/com/github/nexters/ppotto/jooq/tables/Analysis.kt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading