Skip to content

Commit

Permalink
feat: 프로필 사진 설정 restdocs 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
big-cir committed Dec 26, 2023
1 parent 95bc0ca commit 5aebdb3
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 47 deletions.
7 changes: 7 additions & 0 deletions perfume-api/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ include::{snippets}/update-user-profile/http-response.adoc[]
=== 실패 응답
include::{snippets}/update-user-profile-failed/http-response.adoc[]

== 프로필 사진 수정
=== 요청
include::{snippets}/update-user-profile-pic/http-request.adoc[]

=== 응답
include::{snippets}/update-user-profile-pic/http-response.adoc[]

== 로그인 중인 회원 탈퇴
=== 요청
include::{snippets}/leave-user/http-request.adoc[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import io.perfume.api.user.application.port.in.dto.UserProfileResult;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import java.io.IOException;
import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -19,9 +21,6 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.time.LocalDateTime;

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package io.perfume.api.user.application.port.in;

import java.time.LocalDateTime;

import io.perfume.api.user.application.port.in.dto.UpdateProfilePicResult;
import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;

public interface UpdateProfilePicUseCase {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

public record UpdateProfilePicResult(Long userId, Long fileId, String url) {

public static UpdateProfilePicResult from(Long userId, FileResult fileResult) {
return new UpdateProfilePicResult(userId, fileResult.id(), fileResult.url());
}
public static UpdateProfilePicResult from(Long userId, FileResult fileResult) {
return new UpdateProfilePicResult(userId, fileResult.id(), fileResult.url());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ public String findEncryptedUsername(String email) {
@Override
public void leave(Long userId) {
try {
User user = userQueryRepository.loadUser(userId)
.orElseThrow(() -> new UserNotFoundException(userId));
User user =
userQueryRepository.loadUser(userId).orElseThrow(() -> new UserNotFoundException(userId));
LocalDateTime now = LocalDateTime.now();
user.softDelete(now);
userRepository.save(user);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@
import io.perfume.api.user.application.port.out.UserQueryRepository;
import io.perfume.api.user.application.port.out.UserRepository;
import io.perfume.api.user.domain.User;
import java.time.LocalDateTime;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;

@Service
@Transactional
public class UpdateProfilePicService implements UpdateProfilePicUseCase {
Expand All @@ -22,8 +21,9 @@ public class UpdateProfilePicService implements UpdateProfilePicUseCase {
private final FileService fileUploadService;

public UpdateProfilePicService(
UserQueryRepository userQueryRepository,
UserRepository userRepository, FileService fileUploadService) {
UserQueryRepository userQueryRepository,
UserRepository userRepository,
FileService fileUploadService) {
this.userQueryRepository = userQueryRepository;
this.userRepository = userRepository;
this.fileUploadService = fileUploadService;
Expand All @@ -33,7 +33,10 @@ public UpdateProfilePicService(
@Transactional
public UpdateProfilePicResult update(Long userId, byte[] imageFileContent, LocalDateTime now) {
FileResult fileResult = fileUploadService.uploadFile(imageFileContent, userId, now);
User user = userQueryRepository.findUserById(userId).orElseThrow(() -> new UserNotFoundException(userId));
User user =
userQueryRepository
.findUserById(userId)
.orElseThrow(() -> new UserNotFoundException(userId));
user.updateThumbnailId(fileResult.id());
userRepository.save(user);
return UpdateProfilePicResult.from(userId, fileResult);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
package io.perfume.api.user.adapter.in.http;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.doNothing;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.multipart;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.partWithName;
import static org.springframework.restdocs.request.RequestDocumentation.requestParts;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.perfume.api.user.adapter.in.http.dto.UpdateEmailRequestDto;
import io.perfume.api.user.adapter.in.http.dto.UpdatePasswordRequestDto;
import io.perfume.api.user.adapter.in.http.dto.UpdateProfileRequestDto;
import io.perfume.api.user.application.port.in.*;
import io.perfume.api.user.application.port.in.dto.UserProfileResult;
import java.time.LocalDate;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand All @@ -27,21 +41,6 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext;

import java.time.LocalDate;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.doNothing;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.multipart;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.partWithName;
import static org.springframework.restdocs.request.RequestDocumentation.requestParts;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@ExtendWith({RestDocumentationExtension.class, SpringExtension.class})
@Transactional
@SpringBootTest
Expand Down Expand Up @@ -214,25 +213,26 @@ void updateProfile() throws Exception {
void updateProfilePic() throws Exception {
// given
final MockMultipartFile profilePic =
new MockMultipartFile("file", "test.png", "text/plain", "file".getBytes());
new MockMultipartFile("file", "test.txt", "text/plain", "file".getBytes());

// when & then
mockMvc
.perform(
multipart("/v1/user/profile-pic")
.file(profilePic)
.accept(MediaType.APPLICATION_JSON)
.characterEncoding("UTF-8")
.contentType(MediaType.MULTIPART_FORM_DATA)
.with(request -> {
request.setMethod("PATCH");
return request;
}))
.andExpect(status().isOk())
.andDo(
document(
"update-user-profile-pic",
requestParts(partWithName("file").description("업로드할 프로필 사진"))));
.perform(
multipart("/v1/user/profile-pic")
.file(profilePic)
.accept(MediaType.APPLICATION_JSON)
.characterEncoding("UTF-8")
.contentType(MediaType.MULTIPART_FORM_DATA)
.with(
request -> {
request.setMethod("PATCH");
return request;
}))
.andExpect(status().isOk())
.andDo(
document(
"update-user-profile-pic",
requestParts(partWithName("file").description("업로드할 프로필 사진"))));
}

@Test
Expand Down

0 comments on commit 5aebdb3

Please sign in to comment.