Skip to content

Commit a64c2eb

Browse files
authored
feat: 앨범 내 사진 추가 API 추가 (#42)
1 parent 06a9edd commit a64c2eb

31 files changed

+352
-149
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ out/
4141
**/application.properties
4242

4343
/lib/
44+
/url/

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ dependencies {
3737
implementation 'org.locationtech.jts:jts-core:1.19.0'
3838

3939
// Swagger-ui
40-
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
40+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.3'
4141

4242
// EXIF metadata extraction
4343
implementation 'com.drewnoakes:metadata-extractor:2.19.0'

src/main/java/kr/kro/photoliner/domain/album/controller/AlbumController.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import jakarta.validation.Valid;
44
import kr.kro.photoliner.domain.album.dto.request.AlbumCreateRequest;
55
import kr.kro.photoliner.domain.album.dto.request.AlbumDeleteRequest;
6+
import kr.kro.photoliner.domain.album.dto.request.AlbumItemCreateRequest;
7+
import kr.kro.photoliner.domain.album.dto.request.AlbumItemDeleteRequest;
8+
import kr.kro.photoliner.domain.album.dto.request.AlbumTitleUpdateRequest;
69
import kr.kro.photoliner.domain.album.dto.response.AlbumCreateResponse;
10+
import kr.kro.photoliner.domain.album.dto.response.AlbumPhotoItemsResponse;
711
import kr.kro.photoliner.domain.album.dto.response.AlbumsResponse;
812
import kr.kro.photoliner.domain.album.service.AlbumService;
913
import lombok.RequiredArgsConstructor;
@@ -14,6 +18,8 @@
1418
import org.springframework.http.ResponseEntity;
1519
import org.springframework.web.bind.annotation.DeleteMapping;
1620
import org.springframework.web.bind.annotation.GetMapping;
21+
import org.springframework.web.bind.annotation.PatchMapping;
22+
import org.springframework.web.bind.annotation.PathVariable;
1723
import org.springframework.web.bind.annotation.PostMapping;
1824
import org.springframework.web.bind.annotation.RequestBody;
1925
import org.springframework.web.bind.annotation.RequestMapping;
@@ -43,11 +49,46 @@ public ResponseEntity<AlbumsResponse> getAlbums(
4349
return ResponseEntity.ok(albumService.getAlbums(userId, pageable));
4450
}
4551

52+
@PatchMapping("/{albumId}/title")
53+
public ResponseEntity<Void> updateAlbumTitle(
54+
@PathVariable Long albumId,
55+
@RequestBody @Valid AlbumTitleUpdateRequest request
56+
) {
57+
albumService.updateAlbumTitle(albumId, request);
58+
return ResponseEntity.noContent().build();
59+
}
60+
4661
@DeleteMapping
4762
public ResponseEntity<Void> deletePhoto(
4863
@Valid @RequestBody AlbumDeleteRequest request
4964
) {
5065
albumService.deleteAlbums(request);
5166
return ResponseEntity.noContent().build();
5267
}
68+
69+
@GetMapping("/{albumId}/photos")
70+
public ResponseEntity<AlbumPhotoItemsResponse> getAlbumItems(
71+
@PathVariable Long albumId,
72+
@PageableDefault(sort = "capturedDt", direction = Sort.Direction.DESC) Pageable pageable
73+
) {
74+
return ResponseEntity.ok(albumService.getAlbumPhotoItems(albumId, pageable));
75+
}
76+
77+
@PostMapping("/{albumId}/photos")
78+
public ResponseEntity<Void> createAlbumItems(
79+
@PathVariable Long albumId,
80+
@RequestBody @Valid AlbumItemCreateRequest request
81+
) {
82+
albumService.createAlbumItems(albumId, request);
83+
return ResponseEntity.noContent().build();
84+
}
85+
86+
@DeleteMapping("/{albumId}/photos")
87+
public ResponseEntity<Void> deleteAlbumItems(
88+
@PathVariable Long albumId,
89+
@RequestBody @Valid AlbumItemDeleteRequest request
90+
) {
91+
albumService.deleteAlbumItems(albumId, request);
92+
return ResponseEntity.noContent().build();
93+
}
5394
}

src/main/java/kr/kro/photoliner/domain/album/dto/request/AlbumCreateRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ public record AlbumCreateRequest(
77
@NotNull
88
Long userId,
99
@NotEmpty
10-
String name
10+
String title
1111
) {
1212
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package kr.kro.photoliner.domain.album.dto.request;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
import java.util.List;
5+
6+
public record AlbumItemCreateRequest(
7+
@NotNull
8+
List<Long> ids
9+
) {
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package kr.kro.photoliner.domain.album.dto.request;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
import java.util.List;
5+
6+
public record AlbumItemDeleteRequest(
7+
@NotNull
8+
List<Long> ids
9+
) {
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package kr.kro.photoliner.domain.album.dto.request;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
public record AlbumTitleUpdateRequest(
6+
@NotNull
7+
String title
8+
) {
9+
}

src/main/java/kr/kro/photoliner/domain/album/dto/response/AlbumCreateResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public static AlbumCreateResponse from(Album album) {
1010
return new AlbumCreateResponse(
1111
new InnerAlbum(
1212
album.getId(),
13-
album.getName()
13+
album.getTitle()
1414
)
1515
);
1616
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package kr.kro.photoliner.domain.album.dto.response;
2+
3+
import java.time.LocalDateTime;
4+
import java.util.List;
5+
import kr.kro.photoliner.domain.album.model.view.AlbumPhotoView;
6+
import org.springframework.data.domain.Page;
7+
8+
public record AlbumPhotoItemsResponse(
9+
List<InnerAlbumPhotoItem> items
10+
) {
11+
12+
public static AlbumPhotoItemsResponse from(Page<AlbumPhotoView> albumPhotoViews) {
13+
return new AlbumPhotoItemsResponse(
14+
albumPhotoViews.stream()
15+
.map(InnerAlbumPhotoItem::from)
16+
.toList()
17+
);
18+
}
19+
20+
public record InnerAlbumPhotoItem(
21+
Long id,
22+
Long photoId,
23+
String fileName,
24+
String filePath,
25+
String thumbnailPath,
26+
LocalDateTime capturedDt
27+
) {
28+
29+
public static InnerAlbumPhotoItem from(AlbumPhotoView albumPhotoView) {
30+
return new InnerAlbumPhotoItem(
31+
albumPhotoView.getId(),
32+
albumPhotoView.getPhotoId(),
33+
albumPhotoView.getFileName(),
34+
albumPhotoView.getFilePath(),
35+
albumPhotoView.getThumbnailPath(),
36+
albumPhotoView.getCapturedDt()
37+
);
38+
}
39+
}
40+
}

src/main/java/kr/kro/photoliner/domain/album/dto/response/AlbumsResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public record InnerAlbum(
2626
public static InnerAlbum from(Album album) {
2727
return new InnerAlbum(
2828
album.getId(),
29-
album.getName()
29+
album.getTitle()
3030
);
3131
}
3232
}

0 commit comments

Comments
 (0)