Skip to content

Commit

Permalink
Merge pull request #26 from GApple-T/jwt-filter
Browse files Browse the repository at this point in the history
πŸ”€::JWT ν•„ν„° κ°œμ„  및 μƒλ‹΄ν™•μΈμ„œ 둜직 개발
  • Loading branch information
enbraining authored Dec 16, 2023
2 parents 96a5fbc + a7126e1 commit 3a2d5e9
Show file tree
Hide file tree
Showing 22 changed files with 199 additions and 176 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,14 @@ public class AuthController {
private final EmailServiceImpl emailService;

@PostMapping("/join")
public ResponseEntity<?> join(@Valid @RequestBody MemberJoinRequest request){
public ResponseEntity<AuthJoinResponse> join(@Valid @RequestBody AuthJoinRequest request){
return authService.join(request);
}

@PostMapping("/login")
public ResponseEntity<TokenResponse> login(@Valid @RequestBody MemberLoginRequest request){
public ResponseEntity<AuthLoginResponse> login(@Valid @RequestBody AuthLoginRequest request){
return authService.login(request);
}

@PostMapping("/refresh")
public ResponseEntity<TokenResponse> refresh(@Valid @RequestBody TokenRequest request){
return authService.refresh(request);
}

@PostMapping("/mailauth")
public ResponseEntity<String> emailCertify(@Valid @RequestBody EmailCertifyRequest request){
return ResponseEntity.ok(emailService.sendMail(request.getEmail()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Getter
@AllArgsConstructor
public class MemberJoinRequest {
public class AuthJoinRequest {
@Pattern(regexp = "^[a-zA-Z0-9._%+-][email protected]$")
@NotBlank
private String email;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.gapple.weeingback.domain.auth.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class AuthJoinResponse {
private String success;
private String error;
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@Getter
@AllArgsConstructor
public class MemberLoginRequest {
public class AuthLoginRequest {
@Email
@NotBlank
private String email;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.gapple.weeingback.domain.auth.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
public class AuthLoginResponse {
private String token;

private String success;

private String error;
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.springframework.http.ResponseEntity;

public interface AuthService {
ResponseEntity join(MemberJoinRequest request);
ResponseEntity login(MemberLoginRequest request);
ResponseEntity<TokenResponse> refresh(TokenRequest request);
ResponseEntity<AuthJoinResponse> join(AuthJoinRequest request);
ResponseEntity login(AuthLoginRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import com.gapple.weeingback.domain.auth.dto.*;
import com.gapple.weeingback.domain.auth.service.AuthService;
import com.gapple.weeingback.domain.member.entity.AccessRole;
import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.repository.MemberRepository;
import com.gapple.weeingback.global.jwt.JwtProvider;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -22,29 +24,33 @@ public class AuthServiceImpl implements AuthService {
private final JwtProvider jwtProvider;

@Transactional(rollbackFor = RuntimeException.class)
public ResponseEntity<?> join(MemberJoinRequest req){
public ResponseEntity<AuthJoinResponse> join(AuthJoinRequest req){
if(!memberRepository.existsMemberByEmail(req.getEmail())) {
Member member = Member.builder()
.email(req.getEmail())
.password(passwordEncoder.encode(req.getPassword()))
.role(AccessRole.STUDENT)
.build();

memberRepository.save(member);
return new ResponseEntity<>(HttpStatus.OK);
return ResponseEntity.ok(new AuthJoinResponse("ok", null));
} else throw new RuntimeException();
}

@Transactional(rollbackFor = RuntimeException.class)
public ResponseEntity<TokenResponse> login(MemberLoginRequest request){
public ResponseEntity<AuthLoginResponse> login(AuthLoginRequest request){
Member member = memberRepository.findMemberByEmail(request.getEmail());

if(passwordEncoder.matches(request.getPassword(), member.getPassword())){
return ResponseEntity.ok(jwtProvider.generateTokens(request.getEmail()));
} else throw new RuntimeException();
}
String id = member.getId().toString();
String role = member.getRole().toString();

log.info(id + " " + role);

@Override
public ResponseEntity<TokenResponse> refresh(TokenRequest tokenRequest) {
return null;
Authentication authentication =
new UsernamePasswordAuthenticationToken(id, role);
String token = jwtProvider.generateToken(authentication);
return ResponseEntity.ok(new AuthLoginResponse(token, "ok", null));
} else throw new IllegalArgumentException();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.gapple.weeingback.domain.consulting.controller;

import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse;
import com.gapple.weeingback.domain.consulting.service.implementation.ConsultingServiceImpl;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
Expand All @@ -18,8 +19,7 @@ public class ConsultingController {
private final ConsultingServiceImpl service;

@PostMapping("/submit")
public ResponseEntity<Void> submitOkay(@Valid @RequestBody ConsultingSubmitRequest request){
service.submitConsulting(request);
return new ResponseEntity<>(HttpStatus.ACCEPTED);
public ResponseEntity<ConsultingSubmitResponse> submitOkay(@Valid @RequestBody ConsultingSubmitRequest request){
return service.submitConsulting(request);
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
package com.gapple.weeingback.domain.consulting.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.*;

@Table
@Entity
@Builder
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class Consulting {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private Long issuedAt; // 상담 μ‹ μ²­ 일자
private Long issuedAt;

@Column(nullable = false)
private Long startAt; // μ–Έμ œ κ°€μ•Όν•˜λŠ”μ§€
private int classTime;

@Column(nullable = false)
private boolean isAccess; // μ„ μƒλ‹˜μ΄ μŠΉμΈν–ˆλŠ”μ§€
private boolean isAccess;

public Consulting(Long issuedAt, Long startAt){
public Consulting(Long issuedAt, int classTime){
this.issuedAt = issuedAt;
this.startAt = startAt;
this.classTime = classTime;
}

public Consulting(){}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.gapple.weeingback.domain.consulting.entity.dto.request;

import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class ConsultingSubmitRequest {
@NotBlank
private Long startAt;
private int classTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.gapple.weeingback.domain.consulting.entity.dto.request;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class ConsultingSubmitResponse {
private String success;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.gapple.weeingback.domain.consulting.service;

import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitRequest;
import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse;
import org.springframework.http.ResponseEntity;

public interface ConsultingService {
void submitConsulting(ConsultingSubmitRequest request);
ResponseEntity<ConsultingSubmitResponse> submitConsulting(ConsultingSubmitRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,36 @@

import com.gapple.weeingback.domain.consulting.entity.Consulting;
import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitRequest;
import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse;
import com.gapple.weeingback.domain.consulting.service.ConsultingService;
import com.gapple.weeingback.domain.member.entity.Member;
import com.gapple.weeingback.domain.member.repository.MemberRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.UUID;

@Service
@RequiredArgsConstructor
public class ConsultingServiceImpl implements ConsultingService {
private final MemberRepository memberRepository;

@Transactional
public void submitConsulting(ConsultingSubmitRequest request){
String email = SecurityContextHolder.getContext().getAuthentication().getName();
Member member = memberRepository.findMemberByEmail(email);
Consulting consulting = member.getConsulting();
consulting.setIssuedAt(Instant.now().toEpochMilli());
consulting.setStartAt(request.getStartAt());
public ResponseEntity<ConsultingSubmitResponse> submitConsulting(ConsultingSubmitRequest request){
String id = SecurityContextHolder.getContext().getAuthentication().getName();
Member member = memberRepository.findMemberById(UUID.fromString(id));

if(member.getConsulting() != null){
member.setConsulting(new Consulting(Instant.now().toEpochMilli(), request.getClassTime()));
}

memberRepository.save(member);

return ResponseEntity.accepted().body(new ConsultingSubmitResponse("okay"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.gapple.weeingback.domain.member.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum AccessRole {
STUDENT("ROLE_STUDENT"),
TEACHER("ROLE_TEACHER"),
ADMIN("ROLE_ADMIN");

String name;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@
import com.gapple.weeingback.domain.consulting.entity.Consulting;

import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import java.util.UUID;

@Table
@Entity
@Builder
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id
@GeneratedValue(generator = "uuid2", strategy = GenerationType.IDENTITY)
@GenericGenerator(name="uuid2", strategy = "uuid2")
private UUID id;

@Column(columnDefinition = "VARCHAR(15)")
private String name;
Expand All @@ -24,17 +29,9 @@ public class Member {
@Column(columnDefinition = "VARCHAR(80)", nullable = false)
private String password;

private AccessRole role;

@OneToOne
@JoinColumn(name = "consultation_id")
private Consulting consulting;

public Member(){}

public Member(Long id, String name, String email, String password, Consulting consulting) {
this.id = id;
this.name = name;
this.email = email;
this.password = password;
this.consulting = consulting;
}
}
Loading

0 comments on commit 3a2d5e9

Please sign in to comment.