Skip to content

Commit

Permalink
Merge pull request #29 from Triumers/user
Browse files Browse the repository at this point in the history
[Feature] 퀴즈 답안 제출 시 유저 정보 업데이트 기능 구현
  • Loading branch information
Leegiyeon committed Apr 16, 2024
2 parents 8d26619 + 84055f3 commit 9e1520c
Show file tree
Hide file tree
Showing 28 changed files with 157 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import org.triumers.newsnippetback.domain.aggregate.vo.RequestModifyPasswordVO;
import org.triumers.newsnippetback.domain.aggregate.vo.RequestUserVO;
import org.triumers.newsnippetback.domain.aggregate.vo.ResponseMessageVO;
import org.triumers.newsnippetback.domain.dto.AuthDTO;
import org.triumers.newsnippetback.domain.dto.PasswordDTO;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.AuthDTO;
import org.triumers.newsnippetback.Application.dto.PasswordDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;

@RestController
@RequestMapping("/auth")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import org.springframework.web.bind.annotation.*;
import org.triumers.newsnippetback.Application.service.ManageService;
import org.triumers.newsnippetback.domain.aggregate.entity.Quiz;
import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
import org.triumers.newsnippetback.Application.service.QuizService;
import org.triumers.newsnippetback.domain.aggregate.vo.QuizRequest;
import org.triumers.newsnippetback.domain.aggregate.vo.QuizResponse;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.triumers.newsnippetback.Application.service.SolvedService;
import org.triumers.newsnippetback.domain.aggregate.entity.Solved;
import org.triumers.newsnippetback.domain.aggregate.vo.*;
import org.triumers.newsnippetback.domain.dto.SolvedDTO;
import org.triumers.newsnippetback.Application.dto.SolvedDTO;

import java.util.List;
import java.util.NoSuchElementException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.triumers.newsnippetback.domain.aggregate.enums.UserRole;
import org.triumers.newsnippetback.domain.aggregate.enums.UserStatus;
import org.triumers.newsnippetback.domain.aggregate.vo.ResponseUserInfoVO;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;

@RestController
@RequestMapping("/user")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import lombok.*;
import org.triumers.newsnippetback.domain.aggregate.enums.Provider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import lombok.Data;
import org.triumers.newsnippetback.domain.aggregate.entity.Category;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;


import lombok.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import lombok.Data;
import org.triumers.newsnippetback.domain.aggregate.entity.Category;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import lombok.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.triumers.newsnippetback.domain.dto;
package org.triumers.newsnippetback.Application.dto;

import lombok.*;
import org.triumers.newsnippetback.domain.aggregate.enums.Provider;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import org.triumers.newsnippetback.common.exception.UserNicknameDuplicateException;
import org.triumers.newsnippetback.common.exception.WrongInputTypeException;
import org.triumers.newsnippetback.common.exception.WrongPasswordException;
import org.triumers.newsnippetback.domain.dto.AuthDTO;
import org.triumers.newsnippetback.domain.dto.PasswordDTO;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.AuthDTO;
import org.triumers.newsnippetback.Application.dto.PasswordDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;

public interface AuthService {

Expand All @@ -19,4 +19,6 @@ public interface AuthService {
void modifyUserInfo(UserDTO userDTO) throws UserNicknameDuplicateException, WrongInputTypeException;

void modifyPassword(PasswordDTO passwordDTO) throws WrongPasswordException, WrongInputTypeException;

void updateSolvedQuiz(boolean isCorrect);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
import org.triumers.newsnippetback.domain.aggregate.entity.User;
import org.triumers.newsnippetback.domain.aggregate.enums.UserRole;
import org.triumers.newsnippetback.domain.aggregate.enums.UserStatus;
import org.triumers.newsnippetback.domain.dto.AuthDTO;
import org.triumers.newsnippetback.domain.dto.PasswordDTO;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.AuthDTO;
import org.triumers.newsnippetback.Application.dto.PasswordDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;
import org.triumers.newsnippetback.domain.repository.UserRepository;
import org.triumers.newsnippetback.domain.service.ValidationAuthService;

Expand Down Expand Up @@ -101,6 +101,18 @@ public void modifyPassword(PasswordDTO passwordDTO) throws WrongPasswordExceptio
throw new WrongPasswordException();
}

@Override
public void updateSolvedQuiz(boolean isCorrect) {
User user = userRepository.findByEmail(SecurityContextHolder.getContext().getAuthentication().getName());

user.setSolvedCnt(user.getSolvedCnt() + 1);
if (isCorrect) {
user.setCorrectCnt(user.getCorrectCnt() + 1);
}

userRepository.save(user);
}

private User userMapper(AuthDTO request) {
User user = new User();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.triumers.newsnippetback.domain.aggregate.entity.User;
import org.triumers.newsnippetback.domain.dto.CustomUserDetails;
import org.triumers.newsnippetback.Application.dto.CustomUserDetails;
import org.triumers.newsnippetback.domain.repository.UserRepository;

@Service
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.triumers.newsnippetback.Application.service;

import org.triumers.newsnippetback.domain.aggregate.entity.Quiz;
import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.triumers.newsnippetback.domain.aggregate.entity.Category;
import org.triumers.newsnippetback.domain.aggregate.entity.CrawlingQuiz;
import org.triumers.newsnippetback.domain.aggregate.entity.Quiz;
import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;
import org.triumers.newsnippetback.domain.repository.CategoryRepository;
import org.triumers.newsnippetback.domain.repository.CrawlingQuizRepository;
import org.triumers.newsnippetback.domain.repository.QuizRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.triumers.newsnippetback.Application.service;

import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.springframework.stereotype.Service;
import org.triumers.newsnippetback.domain.aggregate.entity.Category;
import org.triumers.newsnippetback.domain.aggregate.entity.Quiz;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;
import org.triumers.newsnippetback.domain.repository.CategoryRepository;
import org.triumers.newsnippetback.domain.repository.QuizRepository;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.triumers.newsnippetback.domain.aggregate.entity.Solved;
import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest;
import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest;
import org.triumers.newsnippetback.domain.dto.SolvedDTO;
import org.triumers.newsnippetback.Application.dto.SolvedDTO;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.triumers.newsnippetback.domain.aggregate.entity.Solved;
import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest;
import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest;
import org.triumers.newsnippetback.domain.dto.SolvedDTO;
import org.triumers.newsnippetback.Application.dto.SolvedDTO;
import org.triumers.newsnippetback.domain.repository.CategoryRepository;
import org.triumers.newsnippetback.domain.repository.QuizRepository;
import org.triumers.newsnippetback.domain.repository.SolvedRepository;
Expand All @@ -20,13 +20,15 @@
@Service
public class SolvedServiceImpl implements SolvedService{

private final AuthService authService;
private final SolvedRepository solvedRepository;
private final QuizRepository quizRepository;
private final CategoryRepository categoryRepository;
private final ModelMapper modelMapper;

@Autowired
public SolvedServiceImpl(SolvedRepository solvedRepository, QuizRepository quizRepository, CategoryRepository categoryRepository, ModelMapper modelMapper) {
public SolvedServiceImpl(AuthService authService, SolvedRepository solvedRepository, QuizRepository quizRepository, CategoryRepository categoryRepository, ModelMapper modelMapper) {
this.authService = authService;
this.solvedRepository = solvedRepository;
this.quizRepository = quizRepository;
this.categoryRepository = categoryRepository;
Expand Down Expand Up @@ -55,6 +57,9 @@ public SolvedDTO findSelectedOptionAndCompareAnswer(SolvedRequest solvedRequest)
Solved solved = modelMapper.map(solvedDTO, Solved.class);
solvedRepository.save(solved);

// 사용자 정보 업데이트
authService.updateSolvedQuiz(solvedDTO.isCorrect());

if (answer == null || solved == null) {
throw new NoSuchElementException("Quiz or Selected Option not found for quizId: " + quizId);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.triumers.newsnippetback.Application.service;

import org.triumers.newsnippetback.common.exception.UserNotFoundException;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;

public interface UserService {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.springframework.stereotype.Service;
import org.triumers.newsnippetback.common.exception.UserNotFoundException;
import org.triumers.newsnippetback.domain.aggregate.entity.User;
import org.triumers.newsnippetback.domain.dto.UserDTO;
import org.triumers.newsnippetback.Application.dto.UserDTO;
import org.triumers.newsnippetback.domain.repository.UserRepository;

@Service
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
package org.triumers.newsnippetback.common.jwt;

import io.jsonwebtoken.ExpiredJwtException;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.ErrorResponse;
import org.springframework.web.ErrorResponseException;
import org.springframework.web.filter.OncePerRequestFilter;
import org.triumers.newsnippetback.domain.aggregate.entity.User;
import org.triumers.newsnippetback.domain.aggregate.enums.UserRole;
import org.triumers.newsnippetback.domain.dto.CustomUserDetails;
import org.triumers.newsnippetback.Application.dto.CustomUserDetails;

import java.io.IOException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.triumers.newsnippetback.domain.aggregate.enums.UserRole;
import org.triumers.newsnippetback.domain.aggregate.vo.RequestLoginVO;
import org.triumers.newsnippetback.domain.dto.CustomUserDetails;
import org.triumers.newsnippetback.Application.dto.CustomUserDetails;

import java.io.IOException;
import java.util.Collection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.triumers.newsnippetback.domain.aggregate.entity.Quiz;
import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.triumers.newsnippetback.domain.aggregate.vo.QuizRequest;
import org.triumers.newsnippetback.domain.dto.QuizDTO;
import org.triumers.newsnippetback.Application.dto.QuizDTO;

import java.time.LocalDate;
import java.util.List;
Expand Down
Loading

0 comments on commit 9e1520c

Please sign in to comment.