Skip to content

Commit

Permalink
Merge pull request #134 from Guzzing/fix/profile
Browse files Browse the repository at this point in the history
[Fix/profile] 프로필 이미지 리팩토링
  • Loading branch information
onetuks authored Jan 10, 2024
2 parents 10e6f06 + 9661f20 commit f376197
Show file tree
Hide file tree
Showing 39 changed files with 448 additions and 249 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ public class AuthController {
private final ClientService clientService;
private final AuthService authService;


public AuthController(AuthTokenProvider authTokenProvider, ClientService clientService, AuthService authService) {
this.authTokenProvider = authTokenProvider;
this.clientService = clientService;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.guzzing.studayserver.domain.auth.listener;

import jakarta.servlet.http.HttpServletRequest;
import org.guzzing.studayserver.domain.auth.jwt.AuthToken;
import org.guzzing.studayserver.domain.auth.jwt.AuthTokenProvider;
import org.guzzing.studayserver.domain.auth.jwt.JwtHeaderUtil;
import org.guzzing.studayserver.domain.auth.service.AuthService;
import org.guzzing.studayserver.domain.member.event.WithdrawEvent;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;

@Component
public class WithdrawAuthTokenListener {

private final AuthService authService;
private final AuthTokenProvider authTokenProvider;

public WithdrawAuthTokenListener(AuthService authService, AuthTokenProvider authTokenProvider) {
this.authService = authService;
this.authTokenProvider = authTokenProvider;
}

@Async
@TransactionalEventListener
public void withdrawAuthToken(WithdrawEvent event) {
HttpServletRequest request = event.getRequest();
String accessToken = JwtHeaderUtil.getAccessToken(request);
AuthToken authToken = authTokenProvider.convertAuthToken(accessToken);

authService.logout(authToken);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ public class AuthService {
private final RefreshTokenRepository refreshTokenRepository;
private final LogoutTokenRepository logoutTokenRepository;

public AuthService(AuthTokenProvider authTokenProvider,
public AuthService(
AuthTokenProvider authTokenProvider,
RefreshTokenRepository refreshTokenCacheRepository,
LogoutTokenRepository logoutTokenCacheRepository) {
LogoutTokenRepository logoutTokenCacheRepository
) {
this.authTokenProvider = authTokenProvider;
this.refreshTokenRepository = refreshTokenCacheRepository;
this.logoutTokenRepository = logoutTokenCacheRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.guzzing.studayserver.domain.child.listener;

import org.guzzing.studayserver.domain.member.event.WithdrawEvent;
import org.guzzing.studayserver.global.profile.ProfileImageService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;

@Component
public class WithdrawProfileImageListener {

private final ProfileImageService profileImageService;

public WithdrawProfileImageListener(ProfileImageService profileImageService) {
this.profileImageService = profileImageService;
}

@Async
@TransactionalEventListener
public void withdrawProfileImage(WithdrawEvent event) {
event.getChildProfileImageUris()
.forEach(profileImageService::deleteProfileImage);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ public class Child {
@JoinColumn(name = "member_id", nullable = false)
private Member member;

public Child(String nickName, String grade, String profileImageUri) {
public Child(String nickName, String grade, String defaultProfileImageUri) {
this.nickName = new ChildNickname(nickName);
this.grade = Grade.fromDescription(grade);
this.profileImageUri = new ProfileImageUri(profileImageUri);
this.profileImageUri = new ProfileImageUri(defaultProfileImageUri);
}

public void assignToNewMemberOnly(Member member) {
Expand All @@ -61,7 +61,7 @@ public Long getId() {
}

public String getProfileImageURLPath() {
return profileImageUri.getImageURLPath();
return profileImageUri.getImageUrl();
}

public String getProfileImageURIPath() {
Expand All @@ -85,8 +85,8 @@ public void update(String nickname, String grade) {
this.grade = Grade.fromDescription(grade);
}

public void updateProfileImageUri(final String imageUri) {
this.profileImageUri = new ProfileImageUri(imageUri);
public void updateProfileImageUri(final String customProfileImageUri) {
this.profileImageUri = new ProfileImageUri(customProfileImageUri);
}

public void increaseGrade() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public ProfileImageUri(final String imageUri) {
this.imageUri = imageUri;
}

public String getImageURLPath() {
public String getImageUrl() {
return MessageFormat.format("{0}{1}", URL_PATH, imageUri);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ public interface ChildRepository extends JpaRepository<Child, Long> {

Optional<Child> findByIdAndMemberId(Long childId, Long memberId);

void deleteByMemberId(final long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import jakarta.persistence.EntityNotFoundException;
import java.util.List;
import org.guzzing.studayserver.domain.child.model.Child;
import org.guzzing.studayserver.domain.child.provider.ProfileImageProvider;
import org.guzzing.studayserver.domain.child.repository.ChildRepository;
import org.guzzing.studayserver.domain.child.service.param.ChildCreateParam;
import org.guzzing.studayserver.domain.child.service.param.ChildDeleteParam;
Expand All @@ -13,6 +12,8 @@
import org.guzzing.studayserver.domain.child.service.result.ChildrenFindResult.ChildFindResult;
import org.guzzing.studayserver.domain.member.model.Member;
import org.guzzing.studayserver.domain.member.repository.MemberRepository;
import org.guzzing.studayserver.global.profile.ProfileImageService;
import org.guzzing.studayserver.global.profile.ProfileImageUriProvider;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
Expand All @@ -23,13 +24,15 @@ public class ChildService {

private final MemberRepository memberRepository;
private final ChildRepository childRepository;
private final ProfileImageProvider profileImageProvider;
private final ProfileImageUriProvider profileImageUriProvider;
private final ProfileImageService profileImageService;

public ChildService(MemberRepository memberRepository, ChildRepository childRepository,
ProfileImageProvider profileImageProvider) {
ProfileImageUriProvider profileImageUriProvider, ProfileImageService profileImageService) {
this.memberRepository = memberRepository;
this.childRepository = childRepository;
this.profileImageProvider = profileImageProvider;
this.profileImageUriProvider = profileImageUriProvider;
this.profileImageService = profileImageService;
}

@Transactional
Expand Down Expand Up @@ -66,11 +69,6 @@ public void delete(ChildDeleteParam param) {
child.getMember().removeChild(child.getId());
}

@Transactional
public void removeChild(long memberId) {
childRepository.deleteByMemberId(memberId);
}

@Transactional
public Long modify(ChildModifyParam param) {
Child child = getChildByIdAndMemberId(param.childId(), param.memberId());
Expand All @@ -85,10 +83,13 @@ public ChildProfileImagePatchResult modifyProfileImage(final Long childId, final
final Child child = childRepository.findById(childId)
.orElseThrow(() -> new EntityNotFoundException("존재하지 않는 아이입니다."));

final String profileImageUri = profileImageProvider.uploadProfileImage(file);
final Long memberId = child.getMember().getId();
final String profileImageUri = profileImageUriProvider.provideCustomProfileImageURI(memberId, file);

child.updateProfileImageUri(profileImageUri);

profileImageService.uploadProfileImage(file, profileImageUri);

return new ChildProfileImagePatchResult(childId, child.getProfileImageURLPath());
}

Expand All @@ -108,7 +109,7 @@ private String getDefaultProfileImageToChild(final Member member) {
.map(Child::getProfileImageURIPath)
.toList();

return profileImageProvider.provideDefaultProfileImageURI(uris);
return profileImageUriProvider.provideDefaultProfileImageURI(uris);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ public interface LikeRepository {

void deleteById(final long likeId);

void deleteByMember(final Member member);

boolean existsById(final long id);

List<Like> findByMember(final Member member);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@ public void deleteLike(final long likeId) {
likeRepository.deleteById(likeId);
}

public void deleteLikesOfMember(final Member member) {
likeRepository.deleteByMember(member);
}

public void deleteLikesOfAcademyAndMember(final Member member, final Academy academy) {
likeRepository.deleteByMemberAndAcademy(member, academy);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package org.guzzing.studayserver.domain.member.controller;

import static org.springframework.http.HttpStatus.NO_CONTENT;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import org.guzzing.studayserver.domain.auth.member_id.MemberId;
import org.guzzing.studayserver.domain.member.controller.request.MemberRegisterRequest;
import org.guzzing.studayserver.domain.member.controller.response.MemberInformationResponse;
import org.guzzing.studayserver.domain.member.service.MemberFacade;
import org.guzzing.studayserver.domain.member.service.MemberService;
import org.guzzing.studayserver.domain.member.service.result.MemberInformationResult;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -29,45 +32,28 @@ public MemberRestController(MemberService memberService, MemberFacade memberFaca
this.memberFacade = memberFacade;
}

@PatchMapping(
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
@PatchMapping(consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
public ResponseEntity<Long> register(@MemberId Long memberId, @RequestBody @Valid MemberRegisterRequest request) {
Long registeredMemberId = memberService.register(request.toParam(), memberId);

return ResponseEntity
.status(HttpStatus.OK)
.status(OK)
.body(registeredMemberId);
}

/**
* 회원탈퇴
* <p>
* 1. 회원 정보 제거 2. 아이 정보 제거 3. 학원 타임 템플릿 제거 3-1. 학원 스케줄 제거 4. 대시보드 제거 4-1. 대시보드 스케줄 5. 좋아요 제거 6. 리뷰 제거
*
* @param memberId
* @return void
*/
@DeleteMapping
public ResponseEntity<Void> remove(
@MemberId final Long memberId
) {
memberFacade.removeMember(memberId);

public ResponseEntity<Long> withdraw(HttpServletRequest request, @MemberId Long memberId) {
return ResponseEntity
.noContent()
.build();
.status(NO_CONTENT)
.body(memberFacade.removeMember(request, memberId));
}

@GetMapping(
produces = MediaType.APPLICATION_JSON_VALUE
)
@GetMapping(produces = APPLICATION_JSON_VALUE)
public ResponseEntity<MemberInformationResponse> getInformation(@MemberId Long memberId) {
MemberInformationResult result = memberService.getById(memberId);

return ResponseEntity
.status(HttpStatus.OK)
.status(OK)
.body(MemberInformationResponse.from(result));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.guzzing.studayserver.domain.member.event;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;
import lombok.Getter;

@Getter
public class WithdrawEvent {

private final HttpServletRequest request;
private final List<String> childProfileImageUris;

public WithdrawEvent(HttpServletRequest request, List<String> childProfileImageUris) {
this.request = request;
this.childProfileImageUris = childProfileImageUris;
}

}
Loading

0 comments on commit f376197

Please sign in to comment.