Skip to content

Commit

Permalink
Merge pull request #51 from seoshinehyo/feat/#50
Browse files Browse the repository at this point in the history
[Feat] 이미지 조회 구현
  • Loading branch information
seoshinehyo authored Dec 21, 2024
2 parents ae7af80 + 7350e49 commit 99b4bc9
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 25 deletions.
11 changes: 11 additions & 0 deletions src/main/java/com/dearnote/converter/ImageConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,15 @@ public static ImageResponseDTO.RegistImageResponseDTO toRegistImageDTO(Image ima
.letterId(letter.getId())
.build();
}

public static ImageResponseDTO.GetImageResponseDTO toGetImageDTO(Image image, Letter letter) { // 이미지 조회

return ImageResponseDTO.GetImageResponseDTO.builder()
.originFileName(image.getOriginFileName())
.storeFileUrl(image.getStoreFileUrl())
.storeFileName(image.getStoreFileName())
.size(image.getSize())
.letterId(letter.getId())
.build();
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/dearnote/repository/ImageRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package com.dearnote.repository;

import com.dearnote.domain.Image;
import com.dearnote.domain.Letter;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface ImageRepository extends JpaRepository<Image, Long> {

Image findByLetter(Letter letter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.dearnote.service.image;

import com.dearnote.domain.Image;
import com.dearnote.domain.Letter;

public interface ImageQueryService {

Image getImage(Letter letter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.dearnote.service.image;

import com.dearnote.domain.Image;
import com.dearnote.domain.Letter;
import com.dearnote.repository.ImageRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class ImageQueryServiceImpl implements ImageQueryService {

private final ImageRepository imageRepository;

@Override
public Image getImage(Letter letter) {
return imageRepository.findByLetter(letter);
}
}
25 changes: 23 additions & 2 deletions src/main/java/com/dearnote/web/controller/ImageRestController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,37 @@
import com.dearnote.domain.Letter;
import com.dearnote.service.aws.S3Service;
import com.dearnote.service.image.ImageCommandService;
import com.dearnote.service.image.ImageQueryService;
import com.dearnote.service.letter.LetterQueryService;
import com.dearnote.validation.annotation.ExistLetter;
import com.dearnote.web.dto.image.ImageResponseDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

@RestController
@RequestMapping("/dearnote/images")
@RequestMapping("/dearnote")
@RequiredArgsConstructor
public class ImageRestController {

private final S3Service s3Service;
private final ImageCommandService imageCommandService;
private final LetterQueryService letterQueryService;
private final ImageQueryService imageQueryService;

@PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@PostMapping(value = "/images", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@Operation(summary = "이미지 업로드 API", description = "이미지를 업로드하고, 업로드된 이미지의 S3 URL을 반환하는 api입니다.")
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "OK, 성공"),
Expand All @@ -54,6 +60,21 @@ public ApiResponse<ImageResponseDTO.RegistImageResponseDTO> uploadImage(
}
}

@GetMapping("/{letterId}/images")
@Operation(summary = "이미지 조회 API", description = "이미지를 조회하는 API입니다.")
@ApiResponses({
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200", description = "OK, 성공"),
})
@Parameters({
@Parameter(name = "letterId", description = "조회할 이미지의 아이디, path variable 입니다.")
})
public ApiResponse<ImageResponseDTO.GetImageResponseDTO> getImage(@ExistLetter @PathVariable Long letterId) {
Letter letter = letterQueryService.getLetter(letterId);
Image image = imageQueryService.getImage(letter);

return ApiResponse.onSuccess(ImageConverter.toGetImageDTO(image, letter));
}

private String uploadToS3(MultipartFile file) throws IOException {
return s3Service.uploadFile(file);
}
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/dearnote/web/dto/image/ImageResponseDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,17 @@ public static class RegistImageResponseDTO {
private Integer size;
private Long letterId;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class GetImageResponseDTO {

private String originFileName;
private String storeFileUrl;
private String storeFileName;
private Integer size;
private Long letterId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,5 @@ public static class SendLetterRequestDTO { // 편지 전송 요청 DTO
String content;

String imageDescription;

// 이미지 추가 예정
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public static class SendLetterResponseDTO { // 편지 전송 응답 DTO
private Wax wax;
private Long keywordId;
private String content;
// 이미지 추가 예정
private LocalDateTime createdAt;
}

Expand Down
20 changes: 0 additions & 20 deletions src/main/resources/static/image.html

This file was deleted.

0 comments on commit 99b4bc9

Please sign in to comment.