Skip to content
Open
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
3 changes: 1 addition & 2 deletions bean/umc10th/.gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
HELP.md
.gradle
.gradle-user-home/
.gradle-user-home-2/
.gradle-user-home*/
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
Expand Down
1 change: 1 addition & 0 deletions bean/umc10th/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ repositories {

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
compileOnly 'org.projectlombok:lombok'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,38 @@

import com.example.umc10th.domain.member.dto.MemberReqDto;
import com.example.umc10th.domain.member.dto.MemberResDto;
import com.example.umc10th.domain.member.exception.code.MemberSuccessCode;
import com.example.umc10th.domain.member.service.MemberService;
import com.example.umc10th.global.apiPayload.ApiResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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;

@RestController
@RequestMapping("/api/members")
@RequestMapping("/api/v1/users")
@RequiredArgsConstructor
public class MemberController {

private final MemberService memberService;

@GetMapping("/{memberId}")
public ResponseEntity<MemberResDto.MemberInfo> getMember(@PathVariable Long memberId) {
return ResponseEntity.ok(memberService.getMember(memberId));
@PostMapping("/signup")
public ResponseEntity<ApiResponse<MemberResDto.SignUpResponse>> signUp(
@Valid @RequestBody MemberReqDto.SignUpRequest request
) {
MemberResDto.SignUpResponse result = memberService.signUp(request);
return ResponseEntity.ok(ApiResponse.of(MemberSuccessCode.SIGN_UP_SUCCESS, result));
}

@PostMapping
public ResponseEntity<MemberResDto.MemberInfo> createMember(@Valid @RequestBody MemberReqDto.Create request) {
return ResponseEntity.ok(memberService.createMember(request));
@PostMapping("/me")
public ResponseEntity<ApiResponse<MemberResDto.GetMyPageResponse>> getMyPage(
@Valid @RequestBody MemberReqDto.GetMyPageRequest request
) {
MemberResDto.GetMyPageResponse result = memberService.getMyPage(request.id());

return ResponseEntity.ok(ApiResponse.of(MemberSuccessCode.GET_MY_PAGE_SUCCESS, result));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.example.umc10th.domain.member.dto.MemberReqDto;
import com.example.umc10th.domain.member.dto.MemberResDto;
import com.example.umc10th.domain.member.entity.Member;
import com.example.umc10th.domain.store.entity.FoodCategory;
import java.util.List;

public final class MemberConverter {

Expand All @@ -19,6 +21,18 @@ public static Member toEntity(MemberReqDto.Create request) {
.build();
}

public static Member toEntity(MemberReqDto.SignUpRequest request, String encodedPassword) {
return Member.builder()
.name(request.name())
.gender(request.gender())
.birthDate(request.birthDate())
.address(request.address())
.nickname(request.nickname())
.email(request.email())
.password(encodedPassword)
.build();
}

public static MemberResDto.MemberInfo toMemberInfo(Member member) {
return new MemberResDto.MemberInfo(
member.getId(),
Expand All @@ -29,4 +43,27 @@ public static MemberResDto.MemberInfo toMemberInfo(Member member) {
member.getNickname()
);
}
}

public static MemberResDto.GetMyPageResponse toMyPageResponse(Member member, Integer point) {
return new MemberResDto.GetMyPageResponse(
member.getName(),
null,
member.getEmail(),
null,
point
);
}

public static MemberResDto.SignUpResponse toSignUpResponse(Member member, List<FoodCategory> categories) {
List<Long> preferCategoryIds = categories.stream()
.map(FoodCategory::getId)
.toList();

return new MemberResDto.SignUpResponse(
member.getId(),
member.getEmail(),
member.getNickname(),
preferCategoryIds
);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.example.umc10th.domain.member.dto;

import com.example.umc10th.domain.member.enums.Gender;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.Size;
import java.time.LocalDate;
import java.util.List;

public class MemberReqDto {

Expand All @@ -16,4 +20,21 @@ public record Create(
@NotBlank @Size(max = 20) String nickname
) {
}
}

public record GetMyPageRequest(
@NotNull @Positive Long id
) {
}

public record SignUpRequest(
@NotBlank @Size(max = 20) String name,
@NotNull Gender gender,
@NotNull LocalDate birthDate,
@NotBlank @Size(max = 255) String address,
@NotBlank @Size(max = 20) String nickname,
@NotBlank @Email @Size(max = 100) String email,
@NotBlank @Size(min = 8, max = 30) String password,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

보안 요구사항에 따라 영문/숫자/특수문자 조합 등의 @pattern 검증을 추가해도 좋을 것 같습니다

@NotEmpty List<@NotNull @Positive Long> preferCategoryIds
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.umc10th.domain.member.enums.Gender;
import java.time.LocalDate;
import java.util.List;

public class MemberResDto {

Expand All @@ -14,4 +15,21 @@ public record MemberInfo(
String nickname
) {
}
}

public record GetMyPageResponse(
String name,
String profileUrl,
String email,
String phoneNumber,
Integer point
) {
}

public record SignUpResponse(
Long memberId,
String email,
String nickname,
List<Long> preferCategoryIds
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ public class Member {
@Column(name = "nickname", nullable = false, length = 20)
private String nickname;

@Column(name = "email", unique = true, length = 100)
private String email;

@Column(name = "password", length = 255)
private String password;

@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;

Expand Down Expand Up @@ -85,4 +91,4 @@ protected void onCreate() {
protected void onUpdate() {
this.updatedAt = LocalDateTime.now();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
package com.example.umc10th.domain.member.exception;

import com.example.umc10th.domain.member.exception.code.MemberErrorCode;
import lombok.Getter;

@Getter
public class MemberException extends RuntimeException {

private final MemberErrorCode errorCode;
import com.example.umc10th.global.apiPayload.exception.GeneralException;

public class MemberException extends GeneralException {
public MemberException(MemberErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
super(errorCode);
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
package com.example.umc10th.domain.member.exception.code;

import com.example.umc10th.global.apiPayload.code.BaseErrorCode;
import com.example.umc10th.global.apiPayload.code.dto.ReasonDto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

@Getter
@RequiredArgsConstructor
public enum MemberErrorCode {
MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER404", "����ڸ� ã�� �� �����ϴ�.");
public enum MemberErrorCode implements BaseErrorCode {
MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MEMBER404", "User not found."),
EMAIL_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "MEMBER4001", "Email already exists."),
FOOD_CATEGORY_NOT_FOUND(HttpStatus.BAD_REQUEST, "MEMBER4002", "Food category not found.");

private final HttpStatus status;
private final HttpStatus httpStatus;
private final String code;
private final String message;
}

@Override
public ReasonDto getReason() {
return new ReasonDto(httpStatus, false, code, message);
}

@Override
public ReasonDto getReasonHttpStatus() {
return getReason();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.example.umc10th.domain.member.exception.code;

import com.example.umc10th.global.apiPayload.code.BaseSuccessCode;
import com.example.umc10th.global.apiPayload.code.dto.ReasonDto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

@Getter
@RequiredArgsConstructor
public enum MemberSuccessCode implements BaseSuccessCode {
SIGN_UP_SUCCESS(HttpStatus.OK, "MEMBER2000", "Sign-up completed successfully."),
GET_MY_PAGE_SUCCESS(HttpStatus.OK, "MEMBER2001", "Successfully retrieved user information.");

private final HttpStatus httpStatus;
private final String code;
private final String message;

@Override
public ReasonDto getReason() {
return new ReasonDto(httpStatus, true, code, message);
}

@Override
public ReasonDto getReasonHttpStatus() {
return getReason();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.example.umc10th.domain.member.repository;

import com.example.umc10th.domain.member.entity.Member;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemberRepository extends JpaRepository<Member, Long> {
}
Optional<Member> findByEmail(String email);

boolean existsByEmail(String email);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ public interface MemberService {
MemberResDto.MemberInfo getMember(Long memberId);

MemberResDto.MemberInfo createMember(MemberReqDto.Create request);
}

MemberResDto.GetMyPageResponse getMyPage(Long memberId);

MemberResDto.SignUpResponse signUp(MemberReqDto.SignUpRequest request);
}
Loading