Skip to content

Commit 03261d2

Browse files
authored
Fix: 리라이팅 결과 저장 시 이미지 첨부
Fix: 리라이팅 결과 저장 시 이미지 첨부
2 parents a894c48 + 98352c8 commit 03261d2

9 files changed

Lines changed: 43 additions & 37 deletions

File tree

src/main/java/com/tave/PromptMate/controller/CommunityController.java

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.tave.PromptMate.controller;
22

33
import com.tave.PromptMate.auth.dto.request.CustomUserDetails;
4-
import com.tave.PromptMate.common.S3Uploader;
5-
import com.tave.PromptMate.domain.Community;
64
import com.tave.PromptMate.domain.Platform;
75
import com.tave.PromptMate.domain.PromptCategory;
86
import com.tave.PromptMate.dto.community.*;
@@ -12,13 +10,10 @@
1210
import io.swagger.v3.oas.annotations.tags.Tag;
1311
import jakarta.validation.Valid;
1412
import lombok.RequiredArgsConstructor;
15-
import org.springframework.http.MediaType;
1613
import org.springframework.http.ResponseEntity;
1714
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1815
import org.springframework.web.bind.annotation.*;
19-
import org.springframework.web.multipart.MultipartFile;
2016

21-
import java.io.IOException;
2217
import java.net.URI;
2318
import java.util.List;
2419

@@ -29,31 +24,16 @@
2924
public class CommunityController {
3025

3126
private final CommunityService communityService;
32-
private final S3Uploader s3Uploader;
3327
private final CommunityRecentService communityRecentService;
3428

3529
// 커뮤니티 글 작성
36-
@PostMapping(value="/posts", consumes= MediaType.MULTIPART_FORM_DATA_VALUE)
37-
@Operation(summary = "게시글 작성", description = "게시글 작성 입니다.")
30+
@PostMapping("/posts")
31+
@Operation(summary = "게시글 작성", description = "게시글 작성 입니다. 이미지는 라이브러리 저장 시 첨부됩니다.")
3832
public ResponseEntity<CommunityPostResponse> createPost(
3933
@AuthenticationPrincipal CustomUserDetails principal,
40-
@RequestParam("rewriteResultId") Long rewriteResultId,
41-
@RequestParam("title") String title,
42-
@RequestParam("description") String description,
43-
@RequestParam("visibility") Community.Visibility visibility,
44-
@RequestPart(value="image" ,required = false) MultipartFile image
45-
) throws IOException {
46-
Long userId=principal.getUserId();
47-
48-
// 이미지 업로드
49-
String imageUrl = null;
50-
if (image != null && !image.isEmpty()) {
51-
imageUrl = s3Uploader.uploadImage(image, "community");
52-
}
53-
54-
CreateCommunityPostRequest request = new CreateCommunityPostRequest(
55-
rewriteResultId, title, description, visibility,imageUrl
56-
);
34+
@Valid @RequestBody CreateCommunityPostRequest request
35+
) {
36+
Long userId = principal.getUserId();
5737

5838
CommunityPostResponse response = communityService.createPost(request, userId);
5939

src/main/java/com/tave/PromptMate/controller/LibraryController.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package com.tave.PromptMate.controller;
22

33
import com.tave.PromptMate.auth.dto.request.CustomUserDetails;
4+
import com.tave.PromptMate.common.S3Uploader;
5+
import com.tave.PromptMate.domain.Platform;
6+
import com.tave.PromptMate.domain.PromptCategory;
47
import com.tave.PromptMate.dto.community.CommunityPostResponse;
58
import com.tave.PromptMate.dto.library.CreateLibraryRequest;
69
import com.tave.PromptMate.dto.library.LibraryResponse;
710
import com.tave.PromptMate.service.LibraryService;
811
import io.swagger.v3.oas.annotations.Operation;
912
import io.swagger.v3.oas.annotations.tags.Tag;
10-
import jakarta.validation.Valid;
1113
import lombok.RequiredArgsConstructor;
1214
import org.springframework.data.domain.Page;
15+
import org.springframework.http.MediaType;
1316
import org.springframework.http.ResponseEntity;
1417
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1518
import org.springframework.web.bind.annotation.*;
19+
import org.springframework.web.multipart.MultipartFile;
1620

21+
import java.io.IOException;
1722
import java.net.URI;
1823
import java.util.List;
1924

@@ -24,15 +29,32 @@
2429
public class LibraryController {
2530

2631
private final LibraryService libraryService;
32+
private final S3Uploader s3Uploader;
2733

2834
// 라이브러리에 리라이팅 결과 저장하기
29-
@PostMapping
30-
@Operation(summary = "리라이팅 결과 저장", description = "리라이팅된 결과를 라이브러리에 저장합니다.")
35+
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
36+
@Operation(summary = "리라이팅 결과 저장", description = "리라이팅된 결과를 라이브러리에 저장합니다. 이미지 첨부 가능.")
3137
public ResponseEntity<LibraryResponse> save(
3238
@AuthenticationPrincipal CustomUserDetails principal,
33-
@Valid @RequestBody CreateLibraryRequest req){
34-
Long userId= principal.getUserId();
35-
LibraryResponse res=libraryService.save(userId,req);
39+
@RequestParam("rewriteResultId") Long rewriteResultId,
40+
@RequestParam(value = "savedTitle", required = false) String savedTitle,
41+
@RequestParam("platform") Platform platform,
42+
@RequestParam("category") PromptCategory category,
43+
@RequestPart(value = "image", required = false) MultipartFile image
44+
) throws IOException {
45+
Long userId = principal.getUserId();
46+
47+
// 이미지 업로드
48+
String imageUrl = null;
49+
if (image != null && !image.isEmpty()) {
50+
imageUrl = s3Uploader.uploadImage(image, "library");
51+
}
52+
53+
CreateLibraryRequest req = new CreateLibraryRequest(
54+
rewriteResultId, savedTitle, platform, category, imageUrl
55+
);
56+
57+
LibraryResponse res = libraryService.save(userId, req);
3658

3759
return ResponseEntity.created(URI.create("/api/libraries/" + res.id()))
3860
.body(res);

src/main/java/com/tave/PromptMate/domain/Library.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public class Library {
4242
@Column(nullable = false)
4343
private PromptCategory category;
4444

45+
@Column(length = 500)
46+
private String imageUrl;
47+
4548
@Column(name = "created_at", nullable = false, updatable = false)
4649
private LocalDateTime createdAt;
4750

src/main/java/com/tave/PromptMate/dto/community/CreateCommunityPostRequest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,5 @@ public record CreateCommunityPostRequest(
1616
String description,
1717

1818
@NotNull
19-
Visibility visibility,
20-
21-
String imageUrl
19+
Visibility visibility
2220
) {}

src/main/java/com/tave/PromptMate/dto/library/CreateLibraryRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ public record CreateLibraryRequest(
88
@NotNull Long rewriteResultId,
99
String savedTitle,
1010
Platform platform,
11-
PromptCategory category
11+
PromptCategory category,
12+
String imageUrl
1213
) {}

src/main/java/com/tave/PromptMate/dto/library/LibraryMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public static LibraryResponse toResponse(Library e) {
1313
e.getRewriteResult().getContent(),
1414
e.getPlatform(),
1515
e.getCategory(),
16+
e.getImageUrl(),
1617
e.getCreatedAt()
1718
);
1819
}

src/main/java/com/tave/PromptMate/dto/library/LibraryResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ public record LibraryResponse(
1313
String content,
1414
Platform platform,
1515
PromptCategory category,
16+
String imageUrl,
1617
LocalDateTime createdAt
1718
) {}

src/main/java/com/tave/PromptMate/service/CommunityService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ public CommunityPostResponse createPost(CreateCommunityPostRequest req, Long use
4343
req.visibility(),
4444
lib.getPlatform(),
4545
lib.getCategory(),
46-
req.imageUrl()
47-
46+
lib.getImageUrl()
4847
);
4948

5049
Community savedCommunity = communityRepository.save(community);

src/main/java/com/tave/PromptMate/service/LibraryService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public LibraryResponse save(Long userId,CreateLibraryRequest req) {
5555
.savedTitle(req.savedTitle())
5656
.platform(req.platform())
5757
.category(req.category())
58+
.imageUrl(req.imageUrl())
5859
.build();
5960

6061
return LibraryMapper.toResponse(libraryRepository.save(library));

0 commit comments

Comments
 (0)