Skip to content
11 changes: 6 additions & 5 deletions src/main/java/TIAB/timebox/config/SecurityConfig.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package TIAB.timebox.config;

import TIAB.timebox.service.security.KakaoOAuth2UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
import org.springframework.security.oauth2.core.user.OAuth2User;

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {

private final KakaoOAuth2UserService kakaoOauth2UserService;
private final OAuth2UserService<OAuth2UserRequest, OAuth2User> oAuth2UserService;

@Override
protected void configure(HttpSecurity http) throws Exception {
Expand All @@ -23,7 +24,7 @@ protected void configure(HttpSecurity http) throws Exception {
.disable()
.and()
.authorizeRequests()
.antMatchers("/auth/kakao/**", "/css/**", "/images/**", "/fonts/**", "/auth/login").permitAll()
.antMatchers("/auth/**", "/css/**", "/images/**", "/fonts/**").permitAll()
.anyRequest().authenticated()
.and()
.logout()
Expand All @@ -34,6 +35,6 @@ protected void configure(HttpSecurity http) throws Exception {
.oauth2Login()
.loginPage("/auth/login")
.userInfoEndpoint()
.userService(kakaoOauth2UserService);
.userService(oAuth2UserService);
}
}
13 changes: 7 additions & 6 deletions src/main/java/TIAB/timebox/controller/HomeController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package TIAB.timebox.controller;

import TIAB.timebox.dto.MemberDtoRes;
import TIAB.timebox.dto.MemberDTO;
import TIAB.timebox.service.member.MemberService;
import TIAB.timebox.service.security.CustomOAuth2User;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -18,10 +18,11 @@ public class HomeController {
private final MemberService memberService;

@GetMapping
public String home(@AuthenticationPrincipal OAuth2User oAuth2User, Model model) {
long id = oAuth2User.getAttribute("id");
MemberDtoRes member = memberService.getMember(id);
model.addAttribute("memberDto", member);
public String home(@AuthenticationPrincipal CustomOAuth2User oAuth2User, Model model) {
MemberDTO.Response member = memberService.findById(MemberDTO.Request.builder()
.id(oAuth2User.getId())
.build());
model.addAttribute("member", member);
return "home";
}
}
12 changes: 6 additions & 6 deletions src/main/java/TIAB/timebox/controller/MessageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
import TIAB.timebox.exception.CanNotAccessException;
import TIAB.timebox.exception.NotPassedDeadlineException;
import TIAB.timebox.service.message.MessageService;
import TIAB.timebox.service.security.CustomOAuth2User;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -33,9 +33,9 @@ public String makeMessage() {
}

@PostMapping
public String sendMessage(@AuthenticationPrincipal OAuth2User oAuth2User,
public String sendMessage(@AuthenticationPrincipal CustomOAuth2User oAuth2User,
MessageDtoReq messageDtoReq) throws IOException {
long memberId = oAuth2User.getAttribute("id");
long memberId = oAuth2User.getId();
if (messageDtoReq.getDeadline() == null) {
return "redirect:/message";
}
Expand All @@ -45,15 +45,15 @@ public String sendMessage(@AuthenticationPrincipal OAuth2User oAuth2User,

@GetMapping("/{id}")
public String showMessage(@PathVariable("id") String id,
@AuthenticationPrincipal OAuth2User oAuth2User, Model model) {
@AuthenticationPrincipal CustomOAuth2User oAuth2User, Model model) {
Date now = new Date();
long userId = oAuth2User.getAttribute("id");
long memberId = oAuth2User.getId();
MessageDtoRes messageDtoRes = messageService.getByMessageId(Long.parseLong(id));

if (now.getTime() < messageDtoRes.getDeadline().getTime()) {
throw new NotPassedDeadlineException();
}
if (messageDtoRes.getMember().getId() != userId) {
if (messageDtoRes.getMember().getId() != memberId) {
throw new CanNotAccessException();
}

Expand Down
37 changes: 37 additions & 0 deletions src/main/java/TIAB/timebox/dto/MemberDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package TIAB.timebox.dto;

import TIAB.timebox.entity.member.Member;
import TIAB.timebox.entity.message.Message;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

public class MemberDTO {
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Request {
private Long id;
}

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class Response {
private String profileImg;
@Builder.Default
private List<Message> messages = new ArrayList<>();
}

public static MemberDTO.Response entityToDto(Member entity) {
return Response.builder()
.profileImg(entity.getProfileImg())
.messages(entity.getMessages())
.build();
}
}
14 changes: 0 additions & 14 deletions src/main/java/TIAB/timebox/dto/MemberDtoReq.java

This file was deleted.

16 changes: 0 additions & 16 deletions src/main/java/TIAB/timebox/dto/MemberDtoRes.java

This file was deleted.

29 changes: 19 additions & 10 deletions src/main/java/TIAB/timebox/entity/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@

import TIAB.timebox.entity.BaseEntity;
import TIAB.timebox.entity.message.Message;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
Expand All @@ -20,20 +22,27 @@ public class Member extends BaseEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "kakao_id")
private Long kakaoId;
@Column(name = "social_id")
private String socialId;
@Column(name = "social_provider")
private String socialProvider;
@Column(name = "email")
private String email;
@Column(name = "img_src")
private String imgSrc;
@Column(name = "profile_img")
private String profileImg;

@Builder
public Member(Long kakaoId, String email, String imgSrc) {
this.kakaoId = kakaoId;
public Member(String socialId, String socialProvider, String email, String profileImg) {
this.socialProvider = socialProvider;
this.socialId = socialId;
this.email = email;
this.imgSrc = imgSrc;
this.profileImg = profileImg;
}

@OneToMany(mappedBy = "member")
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
private List<Message> messages = new ArrayList<>();

public void updateProfileImg(String profileImg) {
this.profileImg = profileImg;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

import java.util.Optional;

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

Optional<Member> findByKakaoId(Long kakao_id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package TIAB.timebox.service.member;

import TIAB.timebox.entity.member.Member;
import TIAB.timebox.service.security.OAuthUserInfo;

public interface MemberOAuthService {
Member getOrRegistWithOAuthInfo(OAuthUserInfo userInfo);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package TIAB.timebox.service.member;

import TIAB.timebox.entity.member.Member;
import TIAB.timebox.repository.MemberRepository;
import TIAB.timebox.service.security.OAuthUserInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Slf4j
@Service
@RequiredArgsConstructor
public class MemberOAuthServiceImpl implements MemberOAuthService {
private final MemberRepository memberRepository;

@Override
@Transactional
public Member getOrRegistWithOAuthInfo(OAuthUserInfo userInfo) {
String email = userInfo.getEmail();
String socialId = userInfo.getSocialId();
String socialProvider = userInfo.getSocialProvider();
String profileImageUrl = userInfo.getProfileImageUrl();

Member member = memberRepository.findByEmail(email)
.orElse(Member.builder()
.socialProvider(socialProvider)
.socialId(socialId)
.email(email)
.build());
member.updateProfileImg(profileImageUrl);
return memberRepository.save(member);
}
}
31 changes: 2 additions & 29 deletions src/main/java/TIAB/timebox/service/member/MemberService.java
Original file line number Diff line number Diff line change
@@ -1,34 +1,7 @@
package TIAB.timebox.service.member;

import TIAB.timebox.dto.MemberDtoReq;
import TIAB.timebox.dto.MemberDtoRes;
import TIAB.timebox.entity.member.Member;

import java.util.List;
import TIAB.timebox.dto.MemberDTO;

public interface MemberService {
MemberDtoRes save(MemberDtoReq dto);

MemberDtoRes getMember(long id);

MemberDtoRes findByKakaoId(long kakaoId);

List<MemberDtoRes> getAllMembers();

default Member dtoToEntity(MemberDtoReq dto) {
return Member.builder()
.email(dto.getEmail())
.kakaoId(dto.getKakaoId())
.imgSrc(dto.getImgSrc())
.build();
}

default MemberDtoRes entityToDto(Member entity) {
return MemberDtoRes.builder()
.email(entity.getEmail())
.kakaoId(entity.getKakaoId())
.id(entity.getId())
.member(entity)
.build();
}
MemberDTO.Response findById(MemberDTO.Request req);
}
37 changes: 8 additions & 29 deletions src/main/java/TIAB/timebox/service/member/MemberServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,42 +1,21 @@
package TIAB.timebox.service.member;

import TIAB.timebox.dto.MemberDtoReq;
import TIAB.timebox.dto.MemberDtoRes;
import TIAB.timebox.entity.member.Member;
import TIAB.timebox.dto.MemberDTO;
import TIAB.timebox.exception.UserNotFoundException;
import TIAB.timebox.repository.UserRepository;
import TIAB.timebox.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService {
private final UserRepository userRepository;

@Override
public MemberDtoRes save(MemberDtoReq dto) {
Member member = userRepository.findByKakaoId(dto.getKakaoId()).orElse(dtoToEntity(dto));
return entityToDto(userRepository.save(member));
}

//Exception 처리하기
@Override
public MemberDtoRes getMember(long id) {
Member member = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException());
return entityToDto(member);
}

@Override
public MemberDtoRes findByKakaoId(long kakaoId) {
Member member = userRepository.findByKakaoId(kakaoId).orElseThrow(() -> new UserNotFoundException());
return entityToDto(member);
}
private final MemberRepository memberRepository;

@Override
public List<MemberDtoRes> getAllMembers() {
return userRepository.findAll().stream().map(entity -> entityToDto(entity)).collect(Collectors.toList());
@Transactional(readOnly = true)
public MemberDTO.Response findById(MemberDTO.Request req) {
return MemberDTO.entityToDto(memberRepository.findById(req.getId())
.orElseThrow(() -> new UserNotFoundException()));
}
}
Loading