Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http,
auth.requestMatchers("/", "/auth/signup", "/auth/login", "/auth/reissue").permitAll()
.requestMatchers(HttpMethod.POST, "/auth/emails/**").permitAll()
.requestMatchers(HttpMethod.POST, "/auth/member-no/**", "/auth/password/**").permitAll()
.requestMatchers("/api/v1/guest/register", "/api/v1/trains/**", "/api/v2/trains/**").permitAll()
.requestMatchers("/api/v1/trains/**", "/api/v2/trains/**").permitAll()
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
.requestMatchers("/actuator/**", "/health").permitAll()
.requestMatchers("/test/payments/**").permitAll()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
package com.sudo.raillo.member.application;

import java.util.List;

import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sudo.raillo.auth.application.AuthService;
import com.sudo.raillo.booking.infrastructure.BookingRepository;
import com.sudo.raillo.global.exception.error.BusinessException;
import com.sudo.raillo.member.application.dto.request.GuestRegisterRequest;
import com.sudo.raillo.member.application.dto.response.GuestRegisterResponse;
import com.sudo.raillo.member.application.dto.response.MemberInfoResponse;
import com.sudo.raillo.member.domain.Member;
import com.sudo.raillo.member.domain.MemberDetail;
import com.sudo.raillo.member.domain.Role;
import com.sudo.raillo.member.exception.MemberError;
import com.sudo.raillo.member.infrastructure.MemberRepository;

Expand All @@ -29,31 +23,8 @@ public class MemberService {

private final MemberRepository memberRepository;
private final BookingRepository bookingRepository;
private final PasswordEncoder passwordEncoder;
private final AuthService authService;

/**
* 비회원 등록
* */
public GuestRegisterResponse guestRegister(GuestRegisterRequest request) {
// 중복 체크
List<Member> foundMembers = memberRepository.findByNameAndPhoneNumber(request.name(), request.phoneNumber());

foundMembers.stream()
.filter(member -> passwordEncoder.matches(request.password(), member.getPassword()))
.findFirst()
.ifPresent(member -> {
throw new BusinessException(MemberError.DUPLICATE_GUEST_INFO);
});

String encodedPassword = passwordEncoder.encode(request.password());

Member member = Member.createGuest(request.name(), encodedPassword, request.phoneNumber());
memberRepository.save(member);

return new GuestRegisterResponse(request.name(), Role.GUEST);
}

/**
* 회원 삭제
* */
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import com.sudo.raillo.global.exception.error.ErrorResponse;
import com.sudo.raillo.global.success.SuccessResponse;
import com.sudo.raillo.member.application.dto.request.GuestRegisterRequest;
import com.sudo.raillo.member.application.dto.response.GuestRegisterResponse;
import com.sudo.raillo.member.application.dto.response.MemberInfoResponse;

import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -19,13 +17,6 @@
@Tag(name = "Members", description = "👤 회원 API - 회원 정보 조회, 수정, 탈퇴, 관리 API")
public interface MemberControllerDoc {

@Operation(method = "POST", summary = "비회원 등록", description = "비회원 정보를 등록합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "비회원 정보 등록이 성공적으로 완료되었습니다."),
@ApiResponse(responseCode = "409", description = "이미 동일한 비회원 정보가 존재합니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
SuccessResponse<GuestRegisterResponse> guestRegister(GuestRegisterRequest request);

@Operation(method = "DELETE", summary = "회원 삭제", description = "로그인 되어 있는 회원을 삭제하여 탈퇴처리 합니다.",
security = {@SecurityRequirement(name = "bearerAuth")})
@ApiResponses(value = {
Expand Down
14 changes: 0 additions & 14 deletions src/main/java/com/sudo/raillo/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,20 +73,6 @@ public static Member create(
return member;
}

// 비회원 등록 정적 팩토리 메서드
public static Member createGuest(
String name,
String password,
String phoneNumber
) {
Member member = new Member();
member.name = name;
member.password = password;
member.phoneNumber = phoneNumber;
member.role = Role.GUEST;
return member;
}

public void updatePhoneNumber(String newPhoneNumber) {
validateNewPhoneNumber(newPhoneNumber);
this.phoneNumber = newPhoneNumber;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/sudo/raillo/member/domain/Role.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.sudo.raillo.member.domain;

public enum Role {
GUEST, MEMBER, ADMIN
MEMBER, ADMIN
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ public enum MemberError implements ErrorCode {
USER_NOT_FOUND("사용자를 찾을 수 없습니다.", HttpStatus.NOT_FOUND, "M_001"),
DUPLICATE_EMAIL("이미 사용 중인 이메일입니다.", HttpStatus.CONFLICT, "M_002"),
INVALID_PASSWORD("비밀번호가 올바르지 않습니다.", HttpStatus.UNAUTHORIZED, "M_003"),
DUPLICATE_GUEST_INFO("이미 동일한 비회원 정보가 존재합니다.", HttpStatus.CONFLICT, "M_004"),
MEMBER_DELETE_FAIL("회원 삭제에 실패하였습니다.", HttpStatus.INTERNAL_SERVER_ERROR, "M_005"),
SAME_PHONE_NUMBER("현재 사용하는 휴대폰 번호와 동일합니다.", HttpStatus.CONFLICT, "M_006"),
DUPLICATE_PHONE_NUMBER("이미 사용 중인 휴대폰 번호입니다.", HttpStatus.CONFLICT, "M_007"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,17 @@
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sudo.raillo.auth.security.jwt.TokenExtractor;
import com.sudo.raillo.global.success.SuccessResponse;
import com.sudo.raillo.member.application.MemberService;
import com.sudo.raillo.member.application.dto.request.GuestRegisterRequest;
import com.sudo.raillo.member.application.dto.response.GuestRegisterResponse;
import com.sudo.raillo.member.application.dto.response.MemberInfoResponse;
import com.sudo.raillo.member.docs.MemberControllerDoc;
import com.sudo.raillo.member.success.MemberSuccess;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@RestController
Expand All @@ -30,13 +25,6 @@ public class MemberController implements MemberControllerDoc {
private final MemberService memberService;
private final TokenExtractor tokenExtractor;

@PostMapping("/guest/register")
public SuccessResponse<GuestRegisterResponse> guestRegister(@RequestBody @Valid GuestRegisterRequest request) {
GuestRegisterResponse response = memberService.guestRegister(request);

return SuccessResponse.of(MemberSuccess.GUEST_REGISTER_SUCCESS, response);
}

@DeleteMapping("/members")
public SuccessResponse<?> memberDelete(
HttpServletRequest request,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
@RequiredArgsConstructor
public enum MemberSuccess implements SuccessCode {

// 비회원
GUEST_REGISTER_SUCCESS(HttpStatus.CREATED, "비회원 정보 등록이 성공적으로 완료되었습니다."),

// 회원
MEMBER_DELETE_SUCCESS(HttpStatus.OK, "회원 탈퇴가 성공적으로 완료되었습니다."),
MEMBER_INFO_SUCCESS(HttpStatus.OK, "회원 정보 조회에 성공했습니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
import com.sudo.raillo.auth.application.AuthService;
import com.sudo.raillo.auth.application.dto.response.TokenResponse;
import com.sudo.raillo.global.exception.error.BusinessException;
import com.sudo.raillo.member.application.dto.request.GuestRegisterRequest;
import com.sudo.raillo.member.application.dto.response.GuestRegisterResponse;
import com.sudo.raillo.member.application.dto.response.MemberInfoResponse;
import com.sudo.raillo.member.domain.Member;
import com.sudo.raillo.member.domain.Role;
import com.sudo.raillo.member.exception.MemberError;
import com.sudo.raillo.member.infrastructure.MemberRepository;
import com.sudo.raillo.support.annotation.ServiceTest;
import com.sudo.raillo.support.fixture.MemberFixture;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -36,48 +32,6 @@ class MemberServiceTest {
@Autowired
private PasswordEncoder passwordEncoder;

@Test
@DisplayName("비회원 등록에 성공한다.")
void guestRegister_success() {
//given
GuestRegisterRequest request = new GuestRegisterRequest("김이름", "01012341234", "testPwd");

//when
GuestRegisterResponse response = memberService.guestRegister(request);

//then
List<Member> members = memberRepository.findByNameAndPhoneNumber(request.name(), request.phoneNumber());

assertThat(members).isNotEmpty();

Member savedGuestMember = members.stream()
.filter(member -> passwordEncoder.matches(request.password(), member.getPassword()))
.findFirst()
.orElseThrow(() -> new AssertionError("등록된 회원을 찾을 수 없습니다."));

assertThat(response.name()).isEqualTo(request.name());
assertThat(response.role()).isEqualTo(Role.GUEST);

assertThat(savedGuestMember.getName()).isEqualTo(request.name());
assertThat(savedGuestMember.getPhoneNumber()).isEqualTo(request.phoneNumber());
assertThat(passwordEncoder.matches(request.password(), savedGuestMember.getPassword())).isTrue();
assertThat(savedGuestMember.getRole()).isEqualTo(Role.GUEST);
}

@Test
@DisplayName("중복된 비회원 정보로 비회원 등록에 실패한다.")
void guestRegister_fail() {
//given
GuestRegisterRequest request = new GuestRegisterRequest("김이름", "01012341234", "testPwd");
memberService.guestRegister(request);

//when & then
assertThatExceptionOfType(BusinessException.class)
.isThrownBy(() -> memberService.guestRegister(request))
.satisfies(exception ->
assertThat(exception.getErrorCode()).isEqualTo(MemberError.DUPLICATE_GUEST_INFO));
}

@Test
@DisplayName("회원 삭제에 성공한다.")
void deleteMember_success() {
Expand Down
21 changes: 1 addition & 20 deletions src/test/java/com/sudo/raillo/member/domain/MemberTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,25 +39,6 @@ void create() {
assertThat(member.getMemberDetail().getGender()).isEqualTo(gender);
}

@Test
@DisplayName("비회원 생성 시 역할이 GUEST이고 회원 상세 정보가 없다")
void createGuest() {
// given
String name = "비회원";
String password = "guestPassword";
String phoneNumber = "010-9999-9999";

// when
Member guest = Member.createGuest(name, password, phoneNumber);

// then
assertThat(guest.getName()).isEqualTo(name);
assertThat(guest.getPassword()).isEqualTo(password);
assertThat(guest.getPhoneNumber()).isEqualTo(phoneNumber);
assertThat(guest.getRole()).isEqualTo(Role.GUEST);
assertThat(guest.getMemberDetail()).isNull();
}

@Test
@DisplayName("전화번호를 새로운 번호로 변경할 수 있다")
void updatePhoneNumber() {
Expand Down Expand Up @@ -144,4 +125,4 @@ void updateEmailFail() {
.isInstanceOf(DomainException.class)
.hasMessage(MemberError.SAME_EMAIL.getMessage());
}
}
}
Loading