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
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ dependencies {
// Security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

// Jwt
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
implementation 'org.springframework.boot:spring-boot-configuration-processor'
}

tasks.named('test') {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
80 changes: 48 additions & 32 deletions src/main/java/umc/domain/member/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,64 +1,80 @@
package umc.domain.member.controller;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
import umc.domain.member.dto.MemberReqDTO;
import umc.domain.member.dto.MemberResDTO;
import umc.domain.member.exception.code.MemberSuccessCode;
import umc.domain.member.service.MemberService;
import umc.domain.mission.dto.MissionResDTO;
import umc.global.apiPayload.ApiResponse;
import umc.global.apiPayload.code.BaseSuccessCode;
import umc.global.security.entity.AuthMember;

import java.util.List;

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

private final MemberService memberService;

// 멤버 생성
@PostMapping("/v1/member/me")
public ApiResponse<Void> createMember(
@RequestBody MemberReqDTO.CreateMember dto // ✅ @PathVariable → @RequestBody
// 멤버 조회 - 마이페이지
@PostMapping("/me")
public ApiResponse<MemberResDTO.GetMemberDTO> getMember(
@RequestBody MemberReqDTO.GetMemberDTO dto
) {
BaseSuccessCode code = MemberSuccessCode.CREATED;
return ApiResponse.onSuccess(code, memberService.createMember(dto));
return ApiResponse.onSuccess(MemberSuccessCode.MEMBER_OK,
memberService.getMember(dto.id()));
}

// 멤버 조회
@GetMapping("/v1/member/me") // ✅ @PostMapping → @GetMapping
public ApiResponse<List<MemberResDTO.GetMember>> getMembers(
@RequestParam Integer pageSize, // ✅ @PathVariable → @RequestParam
@RequestParam Integer pageNumber,
@RequestParam(required = false) String sort
){
BaseSuccessCode code = MemberSuccessCode.OK; // ✅ MissionSuccessCode → MemberSuccessCode
return ApiResponse.onSuccess(code, memberService.getMembers(pageSize, pageNumber, sort));
// 마이페이지
@GetMapping("/me/v2")
public ApiResponse<MemberResDTO.GetMemberDTO> getMember(
@AuthenticationPrincipal AuthMember member
) {
BaseSuccessCode code = MemberSuccessCode.MEMBER_OK;
return ApiResponse.onSuccess(code, memberService.getMember(member));
}

// 회원가입
@PostMapping("/signup")
public ApiResponse<MemberResDTO.GetSignUpDTO> signUp(
@RequestBody @Valid MemberReqDTO.SignUpDTO requestDto
) {
return ApiResponse.onSuccess(MemberSuccessCode.MEMBER_CREATED, memberService.signUp(requestDto));
}

// 로그인
@PostMapping("/login")
public ApiResponse<MemberResDTO.LoginResponse> login(
@RequestBody MemberReqDTO.LoginRequest request
) {
return ApiResponse.onSuccess(MemberSuccessCode.LOGIN_SUCCESS, memberService.login(request));
}

// 멤버 미션 생성
@PostMapping("/v1/member/missions")
public ApiResponse<Void> createMemberMissions(
@RequestParam Long memberId, // ✅ 추가
@RequestParam Long missionId,
@RequestBody MemberReqDTO.CreateMemberMission dto // ✅ @PathVariable → @RequestBody
// 내 미션 생성
@PostMapping("/me/missions")
public ApiResponse<Void> createMyMission(
@RequestParam Long memberId,
@RequestParam Long missionId
) {
BaseSuccessCode code = MemberSuccessCode.MISSIONCREATED;
return ApiResponse.onSuccess(code, memberService.createMemberMission(memberId, missionId, dto));
return ApiResponse.onSuccess(MemberSuccessCode.MISSION_CREATED,
memberService.createMyMission(memberId, missionId)); // ← 메서드명 수정
}

// 멤버 미션 조회
@GetMapping("/v1/member/missions") // ✅ @PostMapping → @GetMapping
public ApiResponse<List<MemberResDTO.GetMemberMission>> getMemberMissions(
@RequestParam Long memberId, // ✅ 추가
@RequestParam Long missionId,
@RequestParam Integer pageSize, // ✅ @PathVariable → @RequestParam
// 내 미션 조회
@GetMapping("/me/missions")
public ApiResponse<List<MemberResDTO.GetMemberMissionDTO>> getMyMissions(
@RequestParam Long memberId,
@RequestParam Integer pageSize, // ← missionId 제거
@RequestParam Integer pageNumber,
@RequestParam(required = false) String sort
){
BaseSuccessCode code = MemberSuccessCode.MISSIONOK; // ✅ MissionSuccessCode → MemberSuccessCode
return ApiResponse.onSuccess(code, memberService.getMemberMissions(memberId, missionId, pageSize, pageNumber, sort));
return ApiResponse.onSuccess(MemberSuccessCode.MEMBER_MISSION_OK,
memberService.getMyMissions(memberId, pageSize, pageNumber, sort)); // ← 메서드명 수정
}
}
83 changes: 44 additions & 39 deletions src/main/java/umc/domain/member/converter/MemberConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,32 @@
import umc.domain.member.dto.MemberReqDTO;
import umc.domain.member.entity.Member;
import umc.domain.member.entity.MemberMission;
import umc.domain.member.enums.Social_Type;
import umc.domain.member.enums.Status;
import umc.domain.mission.dto.MissionResDTO;
import umc.domain.mission.entity.Mission;

public class MemberConverter {
// 멤버 생성 — 암호화된 비밀번호를 인자로 받음
public static Member toMember(
MemberReqDTO.CreateMember dto,
String encodedPassword
) {

// 멤버 조회 - 마이페이지
public static MemberResDTO.GetMemberDTO toGetMember(Member member) {
return MemberResDTO.GetMemberDTO.builder()
.member_id(member.getId())
.email(member.getEmail())
.name(member.getName())
.gender(member.getGender())
.birth(member.getBirth())
.phone(member.getPhone())
.point(member.getPoint())
.status(member.getStatus())
.build();
}

// 회원가입 생성 — 암호화된 비밀번호를 인자로 받음
public static Member toPutMember(
MemberReqDTO.SignUpDTO dto, String encodedPassword
) {
return Member.builder()
.log_id(dto.log_id())
.email(dto.email())
.password(encodedPassword) // ★ 암호화된 비밀번호 사용
.name(dto.name())
Expand All @@ -24,61 +39,51 @@ public static Member toMember(
.add1(dto.add1())
.add2(dto.add2())
.phone(dto.phone())
.point(dto.point())
.status(dto.status())
.org_cd(dto.org_cd())
.point(0)
.status(Status.ACTIVE)
.social_provider(Social_Type.NONE)
.build();
}

// 멤버 조회
public static MemberResDTO.GetMember toGetMember(
Member member
) {
return MemberResDTO.GetMember.builder()
.member_id(member.getId())
.log_id(member.getLog_id())
.email(member.getEmail())
.password(member.getPassword())
.name(member.getName())
.gender(member.getGender())
.birth(member.getBirth())
.post(member.getPost())
.add1(member.getAdd1())
.add2(member.getAdd2())
.phone(member.getPhone())
.point(member.getPoint())
.status(member.getStatus())
.org_cd(member.getOrg_cd())
.build();
// 회원가입 조회
public static MemberResDTO.GetSignUpDTO toGetSignUp(Member member) {

return new MemberResDTO.GetSignUpDTO(
member.getId(),
member.getCreatedAt()
);
}

// 로그인 인증
public static MemberResDTO.LoginResponse toLoginResponse(String accessToken) {
return new MemberResDTO.LoginResponse(accessToken);
}

// 멤버 미션 생성
public static MemberMission toMemberMission(
Mission mission,
Member member,
MemberReqDTO.CreateMemberMission dto
public static MemberMission toPutMemberMission(
Mission mission, Member member
) {
return MemberMission.builder()
.mission(mission)
.member(member)
.succ_yn(dto.succ_yn())
.user_start_dt(dto.user_start_dt())
.succ_yn("N") // 기본값 미완료
.user_start_dt(java.time.LocalDate.now())
.build();
}

// 멤버 미션 조회
public static MemberResDTO.GetMemberMission toGetMemberMission(
public static MemberResDTO.GetMemberMissionDTO toGetMemberMission(
MemberMission memberMission
){
return MemberResDTO.GetMemberMission.builder()
) {
return MemberResDTO.GetMemberMissionDTO.builder()
.member_id(memberMission.getMember().getId())
.mission_id(memberMission.getMission().getId())
.succ_yn(memberMission.getSucc_yn())
.user_start_dt(memberMission.getUser_start_dt())
.build();

}

// 홈 조회 추가


}
58 changes: 46 additions & 12 deletions src/main/java/umc/domain/member/dto/MemberReqDTO.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,64 @@
package umc.domain.member.dto;

import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import umc.domain.member.enums.Gender;
import umc.domain.member.enums.Org_cd;
import umc.domain.member.enums.Social_Type;
import umc.domain.member.enums.Status;

import java.time.LocalDate;
import java.util.List;

public class MemberReqDTO {
public record CreateMember(
String log_id,

// Member 조회
public record GetMemberDTO(
Long id
){}

// 회원가입
public record SignUpDTO(
@NotBlank @Email
String email,
@NotBlank
String password,
@NotBlank
String name,
@NotNull
Gender gender,
@NotBlank
String birth,
@NotBlank
String post,
String add1,
String add2,
@NotBlank
String add1, // 시, 구
@NotBlank
String add2, // 상세주소 동, 호
@NotBlank
String phone,
Integer point,
Status status,
Org_cd org_cd
){}

public record CreateMemberMission(
String succ_yn,
LocalDate user_start_dt
List<Long> foodId,
@NotNull
@NotEmpty
@Valid
List<TermDTO> terms
){}

// 약관
public record TermDTO(
@NotNull
Long termId,
@NotNull
Boolean isAgreed
) {}

// 로그인
public record LoginRequest(
String email,
String password
) {}

}
35 changes: 23 additions & 12 deletions src/main/java/umc/domain/member/dto/MemberResDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,48 @@

import lombok.Builder;
import umc.domain.member.enums.Gender;
import umc.domain.member.enums.Org_cd;
import umc.domain.member.enums.Social_Type;
import umc.domain.member.enums.Status;

import java.time.LocalDate;
import java.time.LocalDateTime;

public class MemberResDTO {

// Member 조회
@Builder
public record GetMember(
public record GetMemberDTO(
Long member_id,
String log_id,
String email,
String password,
String name,
Gender gender,
String birth,
String post,
String add1,
String add2,
String phone,
Integer point,
Status status,
Org_cd org_cd

Status status
){}

// 회원가입
@Builder
public record GetMemberMission(
public record GetSignUpDTO(
Long member_id,
LocalDateTime createdAt
) {
}

// 로그인
public record LoginResponse(
String accessToken
) {}

// 내 미션 조회
@Builder
public record GetMemberMissionDTO(
Long member_id,
Long mission_id,
String succ_yn,
LocalDate user_start_dt
){}
}


}
Loading