-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Be/feat/#22 Spring Security 기본 환경 설정
- Loading branch information
Showing
16 changed files
with
761 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
backEnd/src/main/java/com/quiz/ourclass/domain/member/controller/MemberController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package com.quiz.ourclass.domain.member.controller; | ||
|
||
import com.amazonaws.Response; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberAdditionalInfoRequest; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberSignUpRequest; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberSigninRequest; | ||
import com.quiz.ourclass.domain.member.service.MemberService; | ||
import com.quiz.ourclass.global.dto.ApiResponse; | ||
import com.quiz.ourclass.global.util.UserDetailsImpl; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.MediaType; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
import org.springframework.web.bind.annotation.PatchMapping; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@RequestMapping("/members") | ||
@RequiredArgsConstructor | ||
public class MemberController { | ||
|
||
private final MemberService memberService; | ||
|
||
/* 1. 회원가입 */ | ||
@PostMapping("/") | ||
public ResponseEntity<ApiResponse<?>> signUp (MemberSignUpRequest request) throws Exception { | ||
return ResponseEntity.ok(ApiResponse.success(memberService.signUpProcess(request))); | ||
} | ||
|
||
/* 2. 추가정보 받기 */ | ||
@PatchMapping(value = "/", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}) | ||
public ResponseEntity<ApiResponse<?>> setUpInfo (@AuthenticationPrincipal UserDetailsImpl userDetails,MemberAdditionalInfoRequest request){ | ||
|
||
memberService.addingInfoProcess(userDetails, request); | ||
|
||
return ResponseEntity.ok(ApiResponse.success("추가정보 기입에 성공했습니다.")); | ||
} | ||
|
||
/* 3. 로그인 */ | ||
@PostMapping("/sign-in") | ||
public ResponseEntity<ApiResponse<?>> signIn (MemberSigninRequest request) { | ||
|
||
return ResponseEntity.ok(ApiResponse.success(memberService.signInProcess(request))); | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
backEnd/src/main/java/com/quiz/ourclass/domain/member/dto/TokenDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package com.quiz.ourclass.domain.member.dto; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Getter | ||
@Setter | ||
public class TokenDTO { | ||
|
||
private String accessToken; | ||
private String refreshToken; | ||
|
||
@Builder | ||
private TokenDTO (String accessToken, String refreshToken){ | ||
this.accessToken = accessToken; | ||
this.refreshToken = refreshToken; | ||
} | ||
|
||
public static TokenDTO of (String accessToken, String refreshToken){ | ||
return TokenDTO.builder() | ||
.accessToken(accessToken) | ||
.refreshToken(refreshToken) | ||
.build(); | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
...rc/main/java/com/quiz/ourclass/domain/member/dto/request/MemberAdditionalInfoRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.quiz.ourclass.domain.member.dto.request; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
import org.springframework.web.multipart.MultipartFile; | ||
|
||
@Getter | ||
@Setter | ||
@Builder | ||
public class MemberAdditionalInfoRequest { | ||
private MultipartFile file; | ||
private String role; | ||
|
||
|
||
private MemberAdditionalInfoRequest (MultipartFile file, String role){ | ||
this.file = file; | ||
this.role = role; | ||
} | ||
|
||
public static MemberAdditionalInfoRequest of(MultipartFile file, String role){ | ||
return builder().file(file).role(role).build(); | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
backEnd/src/main/java/com/quiz/ourclass/domain/member/dto/request/MemberSignUpRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package com.quiz.ourclass.domain.member.dto.request; | ||
|
||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
|
||
@Setter | ||
@Getter | ||
public class MemberSignUpRequest { | ||
|
||
String email; | ||
String name; | ||
String socialType; | ||
|
||
|
||
} |
21 changes: 21 additions & 0 deletions
21
backEnd/src/main/java/com/quiz/ourclass/domain/member/dto/request/MemberSigninRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package com.quiz.ourclass.domain.member.dto.request; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@Builder | ||
public class MemberSigninRequest { | ||
|
||
private String email; | ||
|
||
|
||
private MemberSigninRequest (String email) { | ||
this.email = email; | ||
} | ||
|
||
|
||
public static MemberSigninRequest of (String email) { | ||
return builder().email(email).build(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
13 changes: 13 additions & 0 deletions
13
backEnd/src/main/java/com/quiz/ourclass/domain/member/repository/MemberRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.quiz.ourclass.domain.member.repository; | ||
|
||
import com.quiz.ourclass.domain.member.entity.Member; | ||
import java.util.Optional; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
|
||
public interface MemberRepository extends JpaRepository<Member, Long> { | ||
|
||
Optional<Member> findById(Long id); | ||
Optional<Member> findByEmail(String email); | ||
|
||
boolean existsByEmail(String email); | ||
} |
88 changes: 88 additions & 0 deletions
88
backEnd/src/main/java/com/quiz/ourclass/domain/member/service/MemberService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package com.quiz.ourclass.domain.member.service; | ||
|
||
import com.amazonaws.services.s3.AmazonS3; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberAdditionalInfoRequest; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberSignUpRequest; | ||
import com.quiz.ourclass.domain.member.dto.TokenDTO; | ||
import com.quiz.ourclass.domain.member.dto.request.MemberSigninRequest; | ||
import com.quiz.ourclass.domain.member.entity.Member; | ||
import com.quiz.ourclass.domain.member.entity.Role; | ||
import com.quiz.ourclass.domain.member.entity.SocialType; | ||
import com.quiz.ourclass.domain.member.repository.MemberRepository; | ||
import com.quiz.ourclass.global.exception.ErrorCode; | ||
import com.quiz.ourclass.global.exception.GlobalException; | ||
import com.quiz.ourclass.global.util.AwsS3ObjectStorage; | ||
import com.quiz.ourclass.global.util.UserDetailsImpl; | ||
import com.quiz.ourclass.global.util.jwt.JwtUtil; | ||
import java.io.IOException; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
import org.springframework.security.core.userdetails.UserDetails; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
@Slf4j | ||
@RequiredArgsConstructor | ||
public class MemberService { | ||
|
||
private final MemberRepository memberRepository; | ||
private final JwtUtil jwtUtil; | ||
private final AwsS3ObjectStorage awsS3ObjectStorage; | ||
|
||
public TokenDTO signUpProcess (MemberSignUpRequest request) throws Exception{ | ||
|
||
if(memberRepository.existsByEmail(request.getEmail())){ | ||
throw new GlobalException(ErrorCode.EXISTING_MEMBER); | ||
} | ||
|
||
else{ | ||
|
||
Member member = memberRepository.save(Member.Guest(request.getEmail(), request.getName(), checkSocialType( | ||
request.getSocialType()))); | ||
|
||
String accessToken = jwtUtil.createToken(member, true); | ||
String refreshToken = jwtUtil.createToken(member, false); | ||
|
||
return TokenDTO.of(accessToken, refreshToken); | ||
} | ||
|
||
} | ||
|
||
public void addingInfoProcess (UserDetailsImpl userDetails, MemberAdditionalInfoRequest request) | ||
{ | ||
Member member = userDetails.getMember(); | ||
|
||
try { | ||
member.setProfileImage(awsS3ObjectStorage.uploadFile(request.getFile())); | ||
} catch (IOException e) { | ||
throw new GlobalException(ErrorCode.AWS_SERVER_ERROR); | ||
} | ||
member.setRole(request.getRole().equals("teacher")? Role.TEACHER : Role.STUDENT); | ||
memberRepository.save(member); | ||
} | ||
|
||
public TokenDTO signInProcess(MemberSigninRequest request) { | ||
if(!memberRepository.existsByEmail(request.getEmail())){ | ||
throw new GlobalException(ErrorCode.NOT_FOUND_MEMBER); | ||
} else { | ||
Member member = memberRepository.findByEmail(request.getEmail()).orElseThrow(); | ||
String accessToken = jwtUtil.createToken(member, true); | ||
String refreshToken = jwtUtil.createToken(member, false); | ||
|
||
return TokenDTO.of(accessToken, refreshToken); | ||
} | ||
} | ||
|
||
|
||
|
||
private SocialType checkSocialType (String socialType){ | ||
return switch (socialType) { | ||
case "kakao", "KAKAO" -> SocialType.KAKAO; | ||
case "google", "GOOGLE" -> SocialType.GOOGLE; | ||
case "naver", "NAVER" -> SocialType.NAVER; | ||
default -> null; | ||
}; | ||
|
||
} | ||
} |
Oops, something went wrong.