Skip to content

Commit

Permalink
Merge pull request #46 from Sopo2023/feat/#44
Browse files Browse the repository at this point in the history
feat: modify profile
  • Loading branch information
GayeongKimm authored Jul 31, 2024
2 parents 5b3baba + 5edf0a9 commit 12f7304
Show file tree
Hide file tree
Showing 15 changed files with 130 additions and 47 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
run: chmod +x ./gradlew

- name: Build with Gradle
run: ./gradlew build -x test
run: ./gradlew build

- name: List build/libs contents
run: ls -la build/libs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import kr.hs.dgsw.SOPO_server_v2.domain.auth.dto.res.TokenRes;
import kr.hs.dgsw.SOPO_server_v2.domain.member.entity.MemberEntity;
import kr.hs.dgsw.SOPO_server_v2.domain.member.enums.MemberCategory;
import kr.hs.dgsw.SOPO_server_v2.domain.member.enums.MemberState;
import kr.hs.dgsw.SOPO_server_v2.domain.member.repository.MemberRepository;
import kr.hs.dgsw.SOPO_server_v2.global.error.custom.auth.WrongPasswordException;
import kr.hs.dgsw.SOPO_server_v2.global.error.custom.email.CodeIsWrongException;
import kr.hs.dgsw.SOPO_server_v2.global.error.custom.email.EmailAlreadyExistsException;
import kr.hs.dgsw.SOPO_server_v2.global.error.custom.member.IdAlreadyExistException;
import kr.hs.dgsw.SOPO_server_v2.global.error.custom.member.MemberNotFoundException;
import kr.hs.dgsw.SOPO_server_v2.global.infra.jwt.JwtProvider;
import kr.hs.dgsw.SOPO_server_v2.global.response.Response;
Expand All @@ -29,10 +29,12 @@ public class AuthService {

@Transactional(rollbackFor = Exception.class)
public Response signUp(SignUpReq signUpReq) {

if (memberRepository.existsByMemberEmail(signUpReq.memberEmail()))
throw EmailAlreadyExistsException.EXCEPTION;

if (memberRepository.existsByMemberId(signUpReq.memberId()))
throw IdAlreadyExistException.EXCEPTION;

if (!authEmailService.verifiedCode(signUpReq.memberEmail(), signUpReq.authCode()))
throw CodeIsWrongException.EXCEPTION;

Expand All @@ -44,9 +46,7 @@ public Response signUp(SignUpReq signUpReq) {
.memberPassword(new BCryptPasswordEncoder().encode(signUpReq.memberPassword()))
.memberSchool(signUpReq.memberSchool())
.memberCategory(MemberCategory.USER)
.memberState(MemberState.ACTIVE)
.memberFcmToken(signUpReq.memberFcmToken())
.isOffAlarm(Boolean.TRUE)
.memberProfile(null)
.build());
return Response.of(HttpStatus.OK, "회원가입 성공");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,10 @@ public class MemberEntity extends BaseTimeEntity {
@OneToOne(fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "member_file")
private FileEntity memberProfile;

public void update(String memberName, String memberEmail, String memberPassword){
this.memberName = memberName;
this.memberEmail = memberEmail;
this.memberPassword = memberPassword;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,24 @@
package kr.hs.dgsw.SOPO_server_v2.domain.member.presentation.controller;

import io.swagger.v3.oas.annotations.tags.Tag;
import kr.hs.dgsw.SOPO_server_v2.domain.member.presentation.dto.req.MemberModifyReq;
import kr.hs.dgsw.SOPO_server_v2.domain.member.service.MemberService;
import kr.hs.dgsw.SOPO_server_v2.global.response.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "Member", description = "Member Api")
@RestController
@RequestMapping(value = "/member")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@PatchMapping
public Response modifyMember(
@RequestBody MemberModifyReq memberModifyReq){
return memberService.memberModify(memberModifyReq);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kr.hs.dgsw.SOPO_server_v2.domain.member.presentation.dto.req;

import jakarta.validation.constraints.Email;

public record MemberModifyReq(
String memberName,
@Email
String memberEmail,
String memberPassword
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
MemberEntity findByMemberId(String memberId);
boolean existsByMemberEmail(String email);
boolean existsByMemberId(String memberId);

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,26 @@
package kr.hs.dgsw.SOPO_server_v2.domain.member.service;

import kr.hs.dgsw.SOPO_server_v2.domain.member.entity.MemberEntity;
import kr.hs.dgsw.SOPO_server_v2.domain.member.presentation.dto.req.MemberModifyReq;
import kr.hs.dgsw.SOPO_server_v2.domain.member.repository.MemberRepository;
import kr.hs.dgsw.SOPO_server_v2.global.infra.security.GetCurrentMember;
import kr.hs.dgsw.SOPO_server_v2.global.response.Response;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final GetCurrentMember getCurrentMember;
@Transactional(rollbackFor = Exception.class)
public Response memberModify(MemberModifyReq memberModifyReq) {
MemberEntity member = memberRepository.findByMemberId(getCurrentMember.current().getMemberId());
member.update(memberModifyReq.memberName(), member.getMemberEmail(), new BCryptPasswordEncoder().encode(memberModifyReq.memberPassword()));
return Response.of(HttpStatus.OK, "성공");
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.requestMatchers("/email/**").permitAll()
.requestMatchers("/re_provide/**").permitAll()
.requestMatchers("/file/**").hasAuthority("ROLE_ACTIVE")
.requestMatchers("/member/**").hasAuthority("ROLE_ACTIVE")
.requestMatchers("/contest/**").authenticated()
.requestMatchers("/like/**").hasAuthority("ROLE_ACTIVE")
.anyRequest().authenticated()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kr.hs.dgsw.SOPO_server_v2.global.error.custom.board;

import kr.hs.dgsw.SOPO_server_v2.global.error.exception.BusinessException;
import kr.hs.dgsw.SOPO_server_v2.global.error.exception.StatusEnum;

public class BoardNotFound extends BusinessException {
public static final BusinessException EXCEPTION = new BoardNotFound();

public BoardNotFound(){
super(StatusEnum.BOARD_NOT_FOUND);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kr.hs.dgsw.SOPO_server_v2.global.error.custom.contest;

import kr.hs.dgsw.SOPO_server_v2.global.error.exception.BusinessException;
import kr.hs.dgsw.SOPO_server_v2.global.error.exception.StatusEnum;

public class ContestNotFound extends BusinessException {
public static final BusinessException EXCEPTION = new ContestNotFound();

public ContestNotFound(){
super(StatusEnum.CONTEST_NOT_FOUND);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kr.hs.dgsw.SOPO_server_v2.global.error.custom.member;

import kr.hs.dgsw.SOPO_server_v2.global.error.exception.BusinessException;
import kr.hs.dgsw.SOPO_server_v2.global.error.exception.StatusEnum;

public class IdAlreadyExistException extends BusinessException {
public static final BusinessException EXCEPTION = new IdAlreadyExistException();

public IdAlreadyExistException() {
super(StatusEnum.ID_ALREADY_EXIST);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
import kr.hs.dgsw.SOPO_server_v2.global.error.exception.BusinessException;
import kr.hs.dgsw.SOPO_server_v2.global.error.exception.StatusEnum;

public class MemberExistException extends BusinessException {
public static final BusinessException EXCEPTION = new MemberExistException();
public class MemberNotCoincideException extends BusinessException {
public static final BusinessException EXCEPTION = new MemberNotCoincideException();

public MemberExistException() {
super(StatusEnum.MEMBER_EXISTS);
}
public MemberNotCoincideException() {super(StatusEnum.MEMBER_NOT_COINCIDE);}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ public class MemberNotFoundException extends BusinessException {
public static final BusinessException EXCEPTION = new MemberNotFoundException();

public MemberNotFoundException() {
super(StatusEnum.USER_NOT_FOUND);
super(StatusEnum.MEMBER_NOT_FOUND);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -11,52 +11,52 @@
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum StatusEnum {
//smtp
NOT_DUPLICATED_AUTH_CODE(400, "Not Duplicated AuthCode"),
EXPIRED_TOKEN(401, "Expired token"),
INVALID_TOKEN(401, "Invalid token"),
REFRESH_TOKEN_NOT_FOUND(401, "RefreshToken not found"),
MALFORMED_JWT(400, "Jwt is malformed"),
UNSUPPORTED_JWT(400, "Jwt is unsupported"),
ILLEGAL_ARGUMENT(400, "IllegalArgumentException occurred"),
WRONG_TOKEN_TYPE(400, "Wrong token type"),
NOT_DUPLICATED_AUTH_CODE(400, "인증코드가 일치하지 않습니다."),
EXPIRED_TOKEN(401, "만료된 토큰입니다."),
INVALID_TOKEN(401, "유효하지 않은 토큰입니다."),
REFRESH_TOKEN_NOT_FOUND(401, "리프레시 토큰을 찾을 수 없습니다."),
MALFORMED_JWT(400, "변형된 토큰입니다."),
ILLEGAL_ARGUMENT(400, "요청이 잘못되었습니다."),
UNSUPPORTED_JWT(400, "지원되지 않습니다."),
WRONG_TOKEN_TYPE(400, "토큰타입이 옳지 않습니다."),

// general
OK(200, "OK"),
CREATED(201, "Created"),
BAD_REQUEST(400, "Bad request"),
INTERNAL_SERVER_ERROR(500, "Internal server error"),

//user
MEMBER_NOT_EXISTS(403, "Member Not exists"),
MEMBER_EXISTS(403, "Member exists"),
USER_NOT_COINCIDE(401, "User not coincide"),
USER_NOT_FOUND(404, "User not found"),
NOT_AUTHENTICATED(401, "NotAuthenticated"),
PERMISSION_DENIED(403, "Permission denied"),
WITHDRAWAL_MEMBER(400, "Withdrawal member"),
//member
MEMBER_NOT_EXISTS(403, "멤버가 존재하지 않습니다."),
MEMBER_NOT_COINCIDE(401, "멤버가 일치하지 않습니다."),
MEMBER_NOT_FOUND(404, "멤버를 찾을수 없습니다."),
NOT_AUTHENTICATED(401, "인증되지 않았습니다."),
PERMISSION_DENIED(403, "권한이 없습니다."),
WITHDRAWAL_MEMBER(400, "탈퇴된 멤버입니다."),
INVALID_ROLE(403, "유효하지 않은 권한"),
WRONG_PASSWORD(403, "비밀번호가 옳지 않습니다"),
ID_ALREADY_EXIST(404, "아이디가 이미 존재합니다."),

//file
FILE_NOT_FOUND(404, "File not found"),
FILE_EXISTS(403, "File exists"),
FILE_NOT_FOUND(404, "파일을 찾을 수 없습니다."),
FILE_EXISTS(403, "파일이 이미 존재합니다."),

//email
UNABLE_TO_SEND_EMAIL(403, "Unable to send email"),
UNABLE_TO_SEND_EMAIL(403, "이메일을 보낼 수 없습니다."),
EMAIL_ALREADY_EXIST(404, "이메일이 이미 존재합니다"),
CODE_IS_WRONG(404, "인증코드가 옳지 않습니다."),

//fcm
MESSAGE_SEND_FAILED(403, "Message send failed"),
TOKEN_NOT_PROVIDED(400, "Token not provided"),
MESSAGE_SEND_FAILED(403, "메세지 전송에 실패했습니다."),
TOKEN_NOT_PROVIDED(400, "권한이 없습니다."),

CLOUD_EXCEPTION(500, "Cloud exception"),
CLOUD_EXCEPTION(500, "클라우드 에러"),

// board
BOARD_NOT_FOUND(404, "Board not found"),
BOARD_NOT_FOUND(404, "게시물을 찾을 수 없습니다."),

// contest
CONTEST_NOT_FOUND(404, "Contest not found");
CONTEST_NOT_FOUND(404, "대회를 찾을 수 없습니다");

private final int statusCode;
private final String message;
Expand Down

0 comments on commit 12f7304

Please sign in to comment.