Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

마이 페이지 및 프로필 정보 수정 구현 #25

Merged
merged 11 commits into from
Nov 22, 2024
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
package com.kyonggi.teampu.domain.member.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -54,4 +47,10 @@ public class Member {
@Column(nullable = false)
@Builder.Default
private Boolean isAdmin = Boolean.FALSE;

public void updateProfile(String name, String phoneNumber, String email) {
this.name = name;
this.phoneNumber = phoneNumber;
this.email = email;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.kyonggi.teampu.domain.myPage.controller;

import com.kyonggi.teampu.domain.myPage.dto.MyPageRequest;
import com.kyonggi.teampu.global.response.ApiResponse;
import com.kyonggi.teampu.domain.myPage.dto.MyPageResponse;
import com.kyonggi.teampu.domain.myPage.service.MyPageService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;


@RestController
@RequiredArgsConstructor
@RequestMapping("/api/profile")
public class MyPageController {
private final MyPageService myPageService;

@GetMapping("/{login_id}")
public ApiResponse<MyPageResponse.MyPageDTO> findByLoginId(@PathVariable("login_id") String loginId) {
MyPageResponse.MyPageDTO memberDTO = myPageService.findByLoginId(loginId);
return ApiResponse.ok(memberDTO);
}

@PatchMapping("/{login_id}")
public ApiResponse<MyPageResponse.MyPageDTO> updateProfile(
@PathVariable("login_id") String loginId,
@RequestBody MyPageRequest.UpdateProfileDTO updateRequest) {
MyPageResponse.MyPageDTO updatedMember = myPageService.updateProfile(loginId, updateRequest);
return ApiResponse.ok(updatedMember);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.kyonggi.teampu.domain.myPage.dto;

import lombok.Getter;

public class MyPageRequest {

@Getter
public static class UpdateProfileDTO {
private String name;
private String phoneNumber;
private String email;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.kyonggi.teampu.domain.myPage.dto;

import lombok.*;

public class MyPageResponse {

@Getter
@ToString
@AllArgsConstructor
public static class MyPageDTO {
private String loginId;
private String name;
private String phoneNumber;
private String email;
}
Comment on lines +7 to +15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MyPageResponse에 필드를 바로 작성하지 않고 한 번 더 MyPageDTO로 감싸신 이유가 궁금합니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

재사용성이랑 보안? 관련되서 분리를 시켜서 진행하면 좋다고 해서 따라해봤습니다!

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.kyonggi.teampu.domain.myPage.repository;

import com.kyonggi.teampu.domain.member.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByLoginId(String loginId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.kyonggi.teampu.domain.myPage.service;

import com.kyonggi.teampu.domain.member.domain.Member;
import com.kyonggi.teampu.domain.myPage.dto.MyPageRequest;
import com.kyonggi.teampu.domain.myPage.dto.MyPageResponse.MyPageDTO;
import com.kyonggi.teampu.domain.myPage.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class MyPageService {
private final MemberRepository memberRepository;

// 프로필 조회
@Transactional(readOnly = true)
public MyPageDTO findByLoginId(String loginId) {
Member member = memberRepository.findByLoginId(loginId)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));

return new MyPageDTO(
member.getLoginId(),
member.getName(),
member.getPhoneNumber(),
member.getEmail()
);
}

@Transactional
public MyPageDTO updateProfile(String loginId, MyPageRequest.UpdateProfileDTO updateRequest) {
Member member = memberRepository.findByLoginId(loginId)
.orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다."));

member.updateProfile(updateRequest.getName(), updateRequest.getPhoneNumber(), updateRequest.getEmail());
memberRepository.save(member);
Comment on lines +35 to +36
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setter 없이 처리한 부분 죠습니다...!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

호호 감샤합니다~


return new MyPageDTO(
member.getLoginId(),
member.getName(),
member.getPhoneNumber(),
member.getEmail()
);
}
}
Loading