Skip to content

Commit

Permalink
feat: 프로필 수정 api
Browse files Browse the repository at this point in the history
  • Loading branch information
daeunkwak committed Aug 9, 2023
1 parent f253958 commit 060b5be
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import com.cmc.domains.challenge.repository.ChallengeRepository;
import com.cmc.domains.image.certify.repository.CertifyImageRepository;
import com.cmc.domains.image.certifyExample.repository.CertifyExampleImageRepository;
import com.cmc.domains.member.repository.MemberRepository;
import com.cmc.global.s3.S3Uploader;
import com.cmc.image.certify.CertifyImage;
import com.cmc.image.certifyExample.CertifyExampleImage;
import com.cmc.member.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -30,6 +32,7 @@ public class ImageService {
private final CertifyRepository certifyRepository;
private final CertifyExampleImageRepository certifyExampleImageRepository;
private final CertifyImageRepository certifyImageRepository;
private final MemberRepository memberRepository;


// 챌린지 인증 성공 예시 사진 업로드
Expand Down Expand Up @@ -75,6 +78,14 @@ public List<CertifyImage> uploadCertifyImages(List<MultipartFile> certifyImages,
return certifyImageList;
}

// 멤버 프로필 이미지 업데이트
public void updateProfileImage(MultipartFile profileImage, Long memberId) throws IOException {

Member member = findMemberOrThrow(memberId);
String imageUrl = s3Uploader.s3UploadOfProfileImage(member, profileImage);
member.updateProfileImage(imageUrl);
}


private Challenge findChallengeOrThrow(Long challengeId){
return challengeRepository.findById(challengeId).orElseThrow(() -> {
Expand All @@ -93,4 +104,10 @@ public List<CertifyExampleImage> getCertifyImage(Challenge challenge) {

return certifyExampleImageRepository.findCertifyImage(challenge.getChallengeId());
}

private Member findMemberOrThrow(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(() -> {
throw new BadRequestException("요청한 멤버는 존재하지 않습니다.");
});
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.cmc.domains.member.controller;

import com.cmc.common.response.CommonResponse;
import com.cmc.domains.image.service.ImageService;
import com.cmc.domains.member.dto.request.MemberProfileUpdateRequestDto;
import com.cmc.domains.member.dto.request.MemberUpdateReqDto;
import com.cmc.domains.member.dto.response.*;
import com.cmc.domains.member.dto.response.mypage.MyActivityInfoResponseDto;
Expand All @@ -15,9 +17,12 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Random;


Expand All @@ -29,11 +34,12 @@
public class MemberController {

private final MemberService memberService;
private final ImageService imageService;

@Tag(name = "members", description = "멤버 API")
@Operation(summary = "멤버 업데이트")
@PatchMapping(value = "")
public ResponseEntity<MemberUpdateResDto> updateTeam(@Parameter(hidden = true) @RequestMemberId Long memberId, @Valid @RequestBody MemberUpdateReqDto request) {
public ResponseEntity<MemberUpdateResDto> updateMember(@Parameter(hidden = true) @RequestMemberId Long memberId, @Valid @RequestBody MemberUpdateReqDto request) {

Member member = memberService.updateMember(memberId, request.getMemberGender(), request.getMemberBirth(), request.getInterestChallenge());
return ResponseEntity.ok(MemberUpdateResDto.from(member));
Expand All @@ -47,6 +53,26 @@ public ResponseEntity<MemberResponseDto> getMe(@Parameter(hidden = true) @Reques
return ResponseEntity.ok(MemberResponseDto.from(memberService.find(memberId)));
}

@Tag(name = "myPage", description = "마이페이지 API")
@Operation(summary = "프로필 수정 api")
@PatchMapping(value = "/profile")
public ResponseEntity<CommonResponse> updateProfileImage(@Parameter(hidden = true) @RequestMemberId Long memberId,
@Valid @RequestBody MemberProfileUpdateRequestDto request) {

memberService.updateProfile(request.getMemberName(), request.getMemberIntro(), memberId);
return ResponseEntity.ok(CommonResponse.from("프로필 수정이 완료되었습니다."));
}

@Tag(name = "myPage", description = "마이페이지 API")
@Operation(summary = "프로필 이미지 수정 api")
@PatchMapping(value = "/profile/image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<CommonResponse> updateProfileImage(@Parameter(hidden = true) @RequestMemberId Long memberId,
@RequestPart(value = "profileImage") MultipartFile profileImage) throws IOException {

imageService.updateProfileImage(profileImage, memberId);
return ResponseEntity.ok(CommonResponse.from("프로필 이미지 수정이 완료되었습니다."));
}

@Tag(name = "members", description = "멤버 API")
@GetMapping(value = "/nicknames")
@Operation(summary = "닉네임 랜덤 생성 api")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.cmc.domains.member.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Validated
public class MemberProfileUpdateRequestDto {

@NotNull
@Schema(description = "멤버 이름", example = "건조한모래의사막", required=true)
private String memberName;

@NotNull
@Schema(description = "멤버 소개", example = "안녕하세요", required=true)
private String memberIntro;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

@Service
@Transactional
Expand All @@ -39,6 +40,14 @@ public Member find(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(() -> new BadRequestException("해당하는 멤버를 찾을 수 없습니다."));
}

// 프로필 업데이트
public void updateProfile(String memberName, String memberIntro, Long memberId) {

Member member = findMemberOrThrow(memberId);
member.updateName(memberName);
member.updateIntro(memberIntro);
}

private Member findMemberOrThrow(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(() -> {
throw new BadRequestException("요청한 멤버는 존재하지 않습니다.");
Expand Down
14 changes: 14 additions & 0 deletions cider-api/src/main/java/com/cmc/global/s3/S3Uploader.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.cmc.challenge.Challenge;
import com.cmc.image.Image;
import com.cmc.image.certify.CertifyImage;
import com.cmc.member.Member;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -89,6 +90,19 @@ private String s3UploadOfCertifyImage(Certify certify, MultipartFile multipartFi
return s3Upload(folderPath, fileName, multipartFile);
}

// 프로필 이미지 업로드
public String s3UploadOfProfileImage(Member member, MultipartFile profileImage) throws IOException{

//폴더 경로
String folderPath = "profile";

//파일 이름
String frontName = String.valueOf(member.getMemberId());
String fileName = createFileName(frontName, profileImage.getOriginalFilename());

return s3Upload(folderPath, fileName, profileImage);
}


/**
* S3 업로드
Expand Down
17 changes: 17 additions & 0 deletions cider-domain/src/main/java/com/cmc/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public class Member extends BaseTimeEntity {
@Column(name = "member_name", columnDefinition = "VARCHAR(50)")
private String memberName;

private String memberIntro;

private String memberBirth; // TODO : memberBirth 타입 점검

private String memberGender;
Expand Down Expand Up @@ -103,4 +105,19 @@ public void update(String memberGender, String memberBirth, String interestChall
this.memberBirth = memberBirth;
this.interestChallenge = interestChallenge;
}

public void updateProfileImage(String imageUrl){

this.profilePath = imageUrl;
}

public void updateName(String memberName){

this.memberName = memberName;
}

public void updateIntro(String memberIntro){

this.memberIntro = memberIntro;
}
}

0 comments on commit 060b5be

Please sign in to comment.