From 4747c1659e74eae5f8c9d818e9f94697ae4f08ac Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:12:51 +0900 Subject: [PATCH 01/60] feat: auth controller --- .../auth/controller/AuthController.java | 55 +++++++++++++++++++ .../gdscys/cokepoke/auth/domain/JwtCode.java | 2 + .../cokepoke/auth/domain/TokenInfo.java | 2 + .../cokepoke/auth/dto/LoginRequest.java | 2 + .../cokepoke/auth/jwt/JwtAuthFilter.java | 2 + .../cokepoke/auth/jwt/JwtTokenProvider.java | 2 + .../configuration/QueryDslConfig.java | 2 + .../configuration/SecurityConfig.java | 2 + .../cokepoke/configuration/SwaggerConfig.java | 2 + .../cokepoke/exception/ErrorResponse.java | 2 + .../exception/GlobalExceptionHandler.java | 2 + .../member/controller/MemberController.java | 2 + .../gdscys/cokepoke/member/domain/Member.java | 2 + .../cokepoke/member/domain/RefreshToken.java | 2 + .../cokepoke/member/dto/MemberResponse.java | 2 + .../cokepoke/member/dto/SignupRequest.java | 2 + .../member/dto/UpdateMemberRequest.java | 2 + .../member/repository/MemberRepository.java | 2 + .../repository/RefreshTokenRepository.java | 2 + .../service/CustomUserDetailsService.java | 2 + .../member/service/IMemberService.java | 2 + .../member/service/MemberService.java | 2 + .../declaration/PasswordMatches.java | 2 + .../validation/declaration/ValidEmail.java | 2 + .../implementation/EmailValidator.java | 2 + .../PasswordMatchesValidator.java | 2 + 26 files changed, 105 insertions(+) create mode 100644 src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java create mode 100644 src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java create mode 100644 src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java create mode 100644 src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java create mode 100644 src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java create mode 100644 src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/domain/Member.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java create mode 100644 src/main/java/com/gdscys/cokepoke/member/service/MemberService.java create mode 100644 src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java create mode 100644 src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java create mode 100644 src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java create mode 100644 src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java diff --git a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java new file mode 100644 index 0000000..fdc5341 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java @@ -0,0 +1,55 @@ +package com.gdscys.cokepoke.auth.controller; + +import com.gdscys.cokepoke.auth.domain.TokenInfo; +import com.gdscys.cokepoke.auth.dto.LoginRequest; +import com.gdscys.cokepoke.member.service.CustomUserDetailsService; +import com.gdscys.cokepoke.member.domain.Member; +import com.gdscys.cokepoke.member.dto.SignupRequest; +import com.gdscys.cokepoke.member.dto.MemberResponse; +import javax.validation.Valid; + +import com.gdscys.cokepoke.member.service.MemberService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseCookie; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import static org.springframework.http.HttpHeaders.SET_COOKIE; + +@Controller +@RequestMapping("/auth") +@RequiredArgsConstructor +public class AuthController { + private final CustomUserDetailsService customUserDetailsService; + private final MemberService memberService; + + @PostMapping("/signup") + public ResponseEntity signup(@RequestBody @Valid SignupRequest request) { + Member member = memberService.saveMember(request.getEmail(), request.getUsername(), request.getPassword()); + return ResponseEntity.status(HttpStatus.CREATED) + .body(MemberResponse.of(member)); + } + + @PostMapping(value = "/login", + consumes = "application/json", + produces = "application/json" + ) + public ResponseEntity login(@RequestBody LoginRequest loginRequest) { + TokenInfo tokenInfo = memberService.login(loginRequest.getEmail(), loginRequest.getPassword()); + return ResponseEntity.ok() + .header(SET_COOKIE, generateCookie("accessToken", tokenInfo.getAccessToken()).toString()) + .header(SET_COOKIE, generateCookie("refreshToken", tokenInfo.getRefreshToken()).toString()) + .body(tokenInfo); + } + + private ResponseCookie generateCookie(String from, String token) { + return ResponseCookie.from(from, token) + .httpOnly(true) // false로 하면 클라이언트도 쿠키로 접근할 수 있기 때문에 보안상 조치 + .path("/") + .build(); + } +} diff --git a/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java b/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java new file mode 100644 index 0000000..02437c1 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.auth.domain;public class JwtCode { +} diff --git a/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java b/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java new file mode 100644 index 0000000..9a5ee10 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.auth.domain;public class TokenInfo { +} diff --git a/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java new file mode 100644 index 0000000..96eebbc --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.auth.dto;public class LoginRequest { +} diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java new file mode 100644 index 0000000..52cb169 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.auth.jwt;public class JwtAuthFilter { +} diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java new file mode 100644 index 0000000..398bf66 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.auth.jwt;public class JwtTokenProvider { +} diff --git a/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java new file mode 100644 index 0000000..5031f90 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.configuration;public class QueryDslConfig { +} diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java new file mode 100644 index 0000000..8d3e7af --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.configuration;public class SecurityConfig { +} diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java new file mode 100644 index 0000000..17d6af7 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.configuration;public class SwaggerConfig { +} diff --git a/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java b/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java new file mode 100644 index 0000000..6dd90b4 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.exception;public class ErrorResponse { +} diff --git a/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..0003910 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.exception;public class GlobalExceptionHandler { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java new file mode 100644 index 0000000..8e4261d --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.controller;public class MemberController { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java new file mode 100644 index 0000000..fc1536c --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.domain;public class Member { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java b/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java new file mode 100644 index 0000000..679a8ae --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.domain;public class RefreshToken { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java b/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java new file mode 100644 index 0000000..13fc630 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.dto;public class MemberRespons { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java b/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java new file mode 100644 index 0000000..7867aa9 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.dto;public class SignupRequest { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java b/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java new file mode 100644 index 0000000..ce41def --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.dto;public class UpdateMemberRequest { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java new file mode 100644 index 0000000..af59c4d --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.repository;public interface MemberRepository { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java b/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java new file mode 100644 index 0000000..ef4a865 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.repository;public class RefreshTokenRepository { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java new file mode 100644 index 0000000..912ba1e --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.service;public class CustomUserDetailsService { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java new file mode 100644 index 0000000..d54bbcd --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.service;public class IMemberService { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java new file mode 100644 index 0000000..b05bb13 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.member.service;public class MemberService { +} diff --git a/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java b/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java new file mode 100644 index 0000000..2bd99a8 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.validation.declaration;public class PasswordMatches { +} diff --git a/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java b/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java new file mode 100644 index 0000000..1231bf1 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.validation.declaration;public class ValidEmail { +} diff --git a/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java b/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java new file mode 100644 index 0000000..7ac8552 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.validation.implementation;public class EmailValidator { +} diff --git a/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java b/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java new file mode 100644 index 0000000..02f3961 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.validation.implementation;public class PasswordMatchesValidator { +} From 7e65b88e2bd92838eb27445ce33492f4ded515ab Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:13:03 +0900 Subject: [PATCH 02/60] feat: jwt code --- src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java b/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java index 02437c1..36cd105 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java +++ b/src/main/java/com/gdscys/cokepoke/auth/domain/JwtCode.java @@ -1,2 +1,5 @@ -package com.gdscys.cokepoke.auth.domain;public class JwtCode { -} +package com.gdscys.cokepoke.auth.domain; + +public enum JwtCode { + ACCESS,EXPIRED,DENIED +} \ No newline at end of file From dfbcbc2908b6ae6eb31a614112aceb4be4868b5a Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:13:15 +0900 Subject: [PATCH 03/60] feat: token info --- .../gdscys/cokepoke/auth/domain/TokenInfo.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java b/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java index 9a5ee10..6183c72 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java +++ b/src/main/java/com/gdscys/cokepoke/auth/domain/TokenInfo.java @@ -1,2 +1,16 @@ -package com.gdscys.cokepoke.auth.domain;public class TokenInfo { +package com.gdscys.cokepoke.auth.domain; + +import lombok.Getter; + +@Getter +public class TokenInfo { + private String accessToken; + private String refreshToken; + + protected TokenInfo() {} + + public TokenInfo(String accessToken, String refreshToken) { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } } From 2e4aae7eba58cd4715f310c4a6b4040abdac2bf2 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:13:23 +0900 Subject: [PATCH 04/60] feat: login request --- .../gdscys/cokepoke/auth/dto/LoginRequest.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java index 96eebbc..aa0053a 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java +++ b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java @@ -1,2 +1,16 @@ -package com.gdscys.cokepoke.auth.dto;public class LoginRequest { -} +package com.gdscys.cokepoke.auth.dto; + +import lombok.Getter; + +@Getter +public class LoginRequest { + private String email; + private String password; + + protected LoginRequest() {} + + public LoginRequest(String email, String password) { + this.email = email; + this.password = password; + } +} \ No newline at end of file From 63295b78d6359cf0230af66bdb899917c6d5bf0b Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:13:38 +0900 Subject: [PATCH 05/60] feat: jwt auth filter --- .../cokepoke/auth/jwt/JwtAuthFilter.java | 103 +++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java index 52cb169..d21571b 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java @@ -1,2 +1,103 @@ -package com.gdscys.cokepoke.auth.jwt;public class JwtAuthFilter { +package com.gdscys.cokepoke.auth.jwt; + +import com.gdscys.cokepoke.auth.domain.JwtCode; +import com.gdscys.cokepoke.auth.domain.TokenInfo; +import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; +import com.gdscys.cokepoke.member.domain.RefreshToken; +import io.jsonwebtoken.Claims; +import javax.servlet.*; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Optional; + +@Slf4j +@RequiredArgsConstructor +public class JwtAuthFilter extends OncePerRequestFilter { + + private final JwtTokenProvider jwtTokenProvider; + private final RefreshTokenRepository refreshTokenRepository; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + Optional accessToken = extractTokenFromCookie(request, "accessToken"); + Optional refreshToken = extractTokenFromCookie(request, "refreshToken"); + + // 유효한 토큰인지 확인합니다. + if (accessToken.isPresent() && jwtTokenProvider.validateToken(accessToken.get()) == JwtCode.ACCESS) { + // 토큰이 유효하면 토큰으로부터 유저 정보를 받아옵니다. + Authentication authentication = jwtTokenProvider.getAuthentication(accessToken.get()); + // SecurityContext 에 Authentication 객체를 저장합니다. + SecurityContextHolder.getContext().setAuthentication(authentication); + } else if (accessToken.isPresent() && jwtTokenProvider.validateToken(accessToken.get()) == JwtCode.EXPIRED) { + log.info("Access token expired"); + + // refresh token 검증 + if (refreshToken.isPresent() && jwtTokenProvider.validateToken(refreshToken.get()) == JwtCode.ACCESS) { + + Optional savedToken = refreshTokenRepository.findByRefreshToken(refreshToken.get()); + + Claims claims = jwtTokenProvider.parseClaims(accessToken.get()); + + if (savedToken.isPresent() && claims.get("email").equals(savedToken.get().getMember().getEmail())) { + // accessToken 으로 부터 Authentication 객체 추출 + Authentication authentication = jwtTokenProvider.getAuthentication(accessToken.get()); + + // email 을 추출하여 accessToken, refreshToken 생성 + TokenInfo tokenInfo = jwtTokenProvider.generateToken(authentication, savedToken.get().getMember().getEmail()); + + // 인증 객체 설정 + SecurityContextHolder.getContext().setAuthentication(authentication); + + // refreshToken 업데이트 + savedToken.get().setRefreshToken(tokenInfo.getRefreshToken()); + refreshTokenRepository.save(savedToken.get()); + + response.addCookie(jwtTokenProvider.generateCookie("refreshToken", tokenInfo.getRefreshToken())); + response.addCookie(jwtTokenProvider.generateCookie("accessToken", tokenInfo.getAccessToken())); + + log.info("Reissue access token"); + } + } + } + + filterChain.doFilter(request, response); + } + + private Optional extractTokenFromCookie(HttpServletRequest request, String cookieName) { + + if (request.getCookies() == null || request.getCookies().length == 0) return Optional.empty(); + + return Arrays.stream(request.getCookies()) + .sequential() + .filter(cookie -> cookie.getName().equals(cookieName)) + .map(Cookie::getValue) + .findFirst(); + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + // request 에서 요청 path 추출 + String path = request.getServletPath(); + + // filter 에서 제외한 url 목록 + String[] excludedPaths = { "/auth/login", "/auth/signUp"}; + + for (String excludedPath : excludedPaths) { + if (path.startsWith(excludedPath)) { + return true; + } + } + + return false; + } + } From 8d3bed610497d4e83759cd03f3c8eadb89339197 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:13:54 +0900 Subject: [PATCH 06/60] feat: jwt token provider --- .../cokepoke/auth/jwt/JwtTokenProvider.java | 120 +++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java index 398bf66..6e586ff 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java @@ -1,2 +1,120 @@ -package com.gdscys.cokepoke.auth.jwt;public class JwtTokenProvider { +package com.gdscys.cokepoke.auth.jwt; + +import com.gdscys.cokepoke.auth.domain.JwtCode; +import com.gdscys.cokepoke.auth.domain.TokenInfo; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import javax.servlet.http.Cookie; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Component; + +import javax.crypto.spec.SecretKeySpec; +import java.security.Key; +import java.sql.Date; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Base64; +import java.util.Collection; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class JwtTokenProvider { + + private final Key key; + + public JwtTokenProvider(@Value("${jwt.secret}") String secretKey) { + byte[] keyBytes = Base64.getDecoder().decode(secretKey.getBytes()); + this.key = new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName()); + } + + public TokenInfo generateToken(Authentication authentication, String email) { + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + LocalDateTime now = LocalDateTime.now(); + + String accessToken = Jwts.builder() + .setSubject(authentication.getName()) + .claim("auth", authorities) + .claim("email", email) + .setExpiration(java.sql.Date.from(now + .plusMinutes(30) + .atZone(ZoneId.systemDefault()).toInstant())) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + + String refreshToken = Jwts.builder() + .setExpiration(Date.from(now + .plusDays(14) + .atZone(ZoneId.systemDefault()).toInstant())) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + + return new TokenInfo(accessToken, refreshToken); + } + + // JWT 토큰을 복호화하여 토큰에 들어있는 정보를 꺼내는 메서드 + public Authentication getAuthentication(String accessToken) { + // 토큰 복호화 + Claims claims = parseClaims(accessToken); + + if (claims.get("auth") == null) { + throw new AccessDeniedException("권한 정보가 없는 토큰입니다."); + } + + // 클레임에서 권한 정보 가져오기 + Collection authorities = + Arrays.stream(claims.get("auth").toString().split(",")) + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + + // UserDetails 객체를 만들어서 Authentication 리턴 + UserDetails principal = new User(claims.getSubject(), "", authorities); + return new UsernamePasswordAuthenticationToken(principal, "", authorities); + } + + + public JwtCode validateToken(String token) { + try { + Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + return JwtCode.ACCESS; + } catch (ExpiredJwtException e) { + // 기한 만료 + return JwtCode.EXPIRED; + } catch (Exception e) { + // parsing 에러 + return JwtCode.DENIED; + } + } + + public Claims parseClaims(String token) { + try { + return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); + } catch (ExpiredJwtException e) { + return e.getClaims(); + } + } + + public Cookie generateCookie(String from, String token) { + Cookie cookie = new Cookie(from, token); + + cookie.setPath("/"); + cookie.setHttpOnly(true); // XSS 공격을 막기 위한 설정 + cookie.setSecure(true); + + return cookie; + } } From 8578d10a9091adcd40c1547d35146db6f41c917b Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:14:15 +0900 Subject: [PATCH 07/60] feat: query dsl config --- .../configuration/QueryDslConfig.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java index 5031f90..4a43933 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/QueryDslConfig.java @@ -1,2 +1,21 @@ -package com.gdscys.cokepoke.configuration;public class QueryDslConfig { +package com.gdscys.cokepoke.configuration; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +@EnableJpaAuditing +@Configuration +public class QueryDslConfig { + @PersistenceContext + private EntityManager entityManager; + + @Bean + public JPAQueryFactory jpaQueryFactory() { + return new JPAQueryFactory(entityManager); + } } From 9340f2617f01c08bec2667b88c5f38c3132076a8 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:14:24 +0900 Subject: [PATCH 08/60] feat: security config --- .../configuration/SecurityConfig.java | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java index 8d3e7af..8ae7988 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java @@ -1,2 +1,55 @@ -package com.gdscys.cokepoke.configuration;public class SecurityConfig { +package com.gdscys.cokepoke.configuration; + +import com.gdscys.cokepoke.auth.jwt.JwtAuthFilter; +import com.gdscys.cokepoke.auth.jwt.JwtTokenProvider; +import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.autoconfigure.security.servlet.PathRequest; +import org.springframework.context.annotation.Bean; +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.WebSecurityCustomizer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.factory.PasswordEncoderFactories; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +@Configuration +@EnableWebSecurity +@RequiredArgsConstructor +public class SecurityConfig { + + private final JwtTokenProvider jwtTokenProvider; + private final RefreshTokenRepository refreshTokenRepository; + + @Bean + public PasswordEncoder passwordEncoder() { + return PasswordEncoderFactories.createDelegatingPasswordEncoder(); + } + @Bean + public WebSecurityCustomizer webSecurityCustomizer() { + // 정적 자원에 대해서 Security를 적용하지 않음으로 설정 + return web -> web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations()); + } + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.httpBasic().disable() + .csrf().disable() + .formLogin().disable() + .headers().frameOptions().sameOrigin() + .and() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .authorizeRequests() + .antMatchers("/", "/auth/login", "/auth/signup", "/h2-console/**") + .permitAll() + .anyRequest().authenticated() + .and() + .addFilterBefore(new JwtAuthFilter(jwtTokenProvider, refreshTokenRepository), UsernamePasswordAuthenticationFilter.class); + return http.build(); + } + } + From 50032c1b48e87515c66ab727351efa7b94bd4012 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:14:32 +0900 Subject: [PATCH 09/60] feat: swagger config --- .../cokepoke/configuration/SwaggerConfig.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java index 17d6af7..6a979b4 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/SwaggerConfig.java @@ -1,2 +1,24 @@ -package com.gdscys.cokepoke.configuration;public class SwaggerConfig { +package com.gdscys.cokepoke.configuration; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + @Bean + public OpenAPI openAPI() { + return new OpenAPI() + .components(new Components()) + .info(apiInfo()); + } + + private Info apiInfo() { + return new Info() + .title("Springdoc 테스트") + .description("Springdoc을 사용한 Swagger UI 테스트") + .version("1.0.0"); + } } From 91786bd9b5b0f0d65737bda2dab70bd674d2d8a6 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:14:41 +0900 Subject: [PATCH 10/60] feat: error response --- .../cokepoke/exception/ErrorResponse.java | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java b/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java index 6dd90b4..d2c7145 100644 --- a/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java +++ b/src/main/java/com/gdscys/cokepoke/exception/ErrorResponse.java @@ -1,2 +1,41 @@ -package com.gdscys.cokepoke.exception;public class ErrorResponse { +package com.gdscys.cokepoke.exception; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Getter +public class ErrorResponse { + private final Exception exception; + private final String message; + private final HttpStatus status; + private List errors; + + private ErrorResponse(Exception exception, String message, HttpStatus status) { + this.exception = exception; + this.message = message; + this.status = status; + } + + public static ErrorResponse of(Exception exception, String message, HttpStatus status) { + return new ErrorResponse(exception, message, status); + } + + @Getter + @RequiredArgsConstructor + private static class ValidationError { + private final String field; + private final String message; + } + + public void addValidationError(String field, String message){ + if(Objects.isNull(errors)){ + errors = new ArrayList<>(); + } + errors.add(new ValidationError(field, message)); + } } From 0ac1b03c0832f2dd7827df8b0bd6bb859b3cbce4 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:14:49 +0900 Subject: [PATCH 11/60] feat: global exception handler --- .../exception/GlobalExceptionHandler.java | 102 +++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java index 0003910..262444a 100644 --- a/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java @@ -1,2 +1,102 @@ -package com.gdscys.cokepoke.exception;public class GlobalExceptionHandler { +package com.gdscys.cokepoke.exception; + + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.WebRequest; + +import java.io.IOException; +import java.nio.file.AccessDeniedException; +import java.util.NoSuchElementException; + +@ControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(IOException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseEntity handleIOException( + IOException exception + ) { + ErrorResponse response = ErrorResponse.of( + exception, + exception.getMessage(), + HttpStatus.INTERNAL_SERVER_ERROR + ); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + + @ExceptionHandler(AccessDeniedException.class) + @ResponseStatus(HttpStatus.FORBIDDEN) + public ResponseEntity handleAccessDeniedException( + AccessDeniedException exception, + WebRequest request + ) { + ErrorResponse response = ErrorResponse.of( + exception, + exception.getMessage(), + HttpStatus.FORBIDDEN + ); + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(response); + } + + @ExceptionHandler(NoSuchElementException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ResponseEntity handleNoSuchElementFoundException( + NoSuchElementException exception, WebRequest request + ) { + ErrorResponse response = ErrorResponse.of( + exception, + exception.getMessage(), + HttpStatus.NOT_FOUND + ); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) + public ResponseEntity handleMethodArgumentNotValid( + MethodArgumentNotValidException ex, + WebRequest request + ) { + ErrorResponse errorResponse = ErrorResponse.of( + ex, + "Validation error. Check 'errors' field for details.", + HttpStatus.UNPROCESSABLE_ENTITY + ); + + for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) { + errorResponse.addValidationError(fieldError.getField(), + fieldError.getDefaultMessage()); + } + return ResponseEntity.unprocessableEntity().body(errorResponse); + } + + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ResponseEntity handleIllegalArgumentException( + IllegalArgumentException exception, + WebRequest request){ + ErrorResponse response = ErrorResponse.of(exception, + exception.getMessage(), + HttpStatus.BAD_REQUEST + ); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + } + + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ResponseEntity handleAllUncaughtException( + Exception exception, + WebRequest request){ + ErrorResponse response = ErrorResponse.of(exception, + exception.getMessage(), + HttpStatus.INTERNAL_SERVER_ERROR + ); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } From 4e15829d98e9906932bfccab19f17da81d1636b8 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:01 +0900 Subject: [PATCH 12/60] feat: member controller --- .../member/controller/MemberController.java | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java index 8e4261d..5e7790a 100644 --- a/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java +++ b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java @@ -1,2 +1,40 @@ -package com.gdscys.cokepoke.member.controller;public class MemberController { +package com.gdscys.cokepoke.member.controller; + +import com.gdscys.cokepoke.member.domain.Member; +import com.gdscys.cokepoke.member.dto.MemberResponse; +import com.gdscys.cokepoke.member.service.MemberService; +import javax.validation.constraints.Min; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; +import java.util.stream.Collectors; + +@Controller +@RequestMapping("/member") +@RequiredArgsConstructor +public class MemberController { + + private final MemberService memberService; + + @GetMapping("/my") + public ResponseEntity viewMy(@AuthenticationPrincipal Member member) { + return ResponseEntity.ok(MemberResponse.of(member)); + } + + @GetMapping("/all") + public ResponseEntity> viewAll(@AuthenticationPrincipal Member member, + @RequestParam @Min(0) int page) { + List responses = memberService.findAll(page) + .stream() + .map(MemberResponse::of) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + } From c6d566638572b66021a8a5a127c0146e87e393e7 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:09 +0900 Subject: [PATCH 13/60] feat: member domain --- .../gdscys/cokepoke/member/domain/Member.java | 105 +++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index fc1536c..0203b98 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -1,2 +1,105 @@ -package com.gdscys.cokepoke.member.domain;public class Member { +package com.gdscys.cokepoke.member.domain; + +import com.gdscys.cokepoke.validation.declaration.ValidEmail; +import javax.persistence.*; +import lombok.Getter; +import net.minidev.json.annotate.JsonIgnore; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.UpdateTimestamp; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +@Entity(name = "Member") +@Getter +@EntityListeners(AuditingEntityListener.class) +public class Member implements UserDetails { + + @Id @Column(name = "id", updatable = false, nullable = false, unique = true) + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + private UUID id; + + @Column(name = "email", unique = true, nullable = false, columnDefinition = "varchar(40)") + @ValidEmail + private String email; + + @Column(name = "username", nullable = false, columnDefinition = "varchar(20)") + private String username; + + @JsonIgnore + @Column(name = "password_hash", nullable = false) + private String passwordHash; + + @CreationTimestamp + private LocalDateTime createdAt; + + @UpdateTimestamp + private LocalDateTime updatedAt; + + @OneToOne(mappedBy = "member", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private RefreshToken refreshToken; + + @ElementCollection(fetch = FetchType.EAGER) + private Set roles = new HashSet<>(); + + + protected Member() {} + + public Member(String email, String username, String passwordHash, Set roles) { + this.email = email; + this.username = username; + this.passwordHash = passwordHash; + this.roles = roles; + } + + public void updatePassword(String passwordHash) { + this.passwordHash = passwordHash; + } + + @Override + public Collection getAuthorities() { + return this.roles.stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toSet()); + } + + @Override + public String getPassword() { + return this.passwordHash; + } + + @Override + public String getUsername() { + return this.username; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } } From b4d99026fb70e03bfd9f75ce45f85b325ba88978 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:22 +0900 Subject: [PATCH 14/60] feat: refresh token --- .../cokepoke/member/domain/RefreshToken.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java b/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java index 679a8ae..6a89bf2 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/RefreshToken.java @@ -1,2 +1,32 @@ -package com.gdscys.cokepoke.member.domain;public class RefreshToken { +package com.gdscys.cokepoke.member.domain; + +import javax.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; + +import java.util.UUID; + +@Entity +@Getter +@Setter +public class RefreshToken { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "uuid2") + private UUID id; + + private String refreshToken; + + @OneToOne(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", unique = true) + private Member member; + + public RefreshToken(String refreshToken, Member member) { + this.refreshToken = refreshToken; + this.member = member; + } + + protected RefreshToken() {} } From a57a047a7166fa385d8d43391f3640a135f44621 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:32 +0900 Subject: [PATCH 15/60] feat: member response --- .../cokepoke/member/dto/MemberResponse.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java b/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java index 13fc630..4ddae22 100644 --- a/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java +++ b/src/main/java/com/gdscys/cokepoke/member/dto/MemberResponse.java @@ -1,2 +1,26 @@ -package com.gdscys.cokepoke.member.dto;public class MemberRespons { +package com.gdscys.cokepoke.member.dto; + +import com.gdscys.cokepoke.member.domain.Member; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class MemberResponse { + private String email; + private String username; + + protected MemberResponse() {} + + public MemberResponse(String email, String username) { + this.email = email; + this.username = username; + } + + public static MemberResponse of(Member member) { + return MemberResponse.builder() + .email(member.getEmail()) + .username(member.getUsername()) + .build(); + } } From aa97e43e0e9578a3de693ce91dc4c46fad71c0da Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:42 +0900 Subject: [PATCH 16/60] feat: signup request --- .../cokepoke/member/dto/SignupRequest.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java b/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java index 7867aa9..5093db7 100644 --- a/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java +++ b/src/main/java/com/gdscys/cokepoke/member/dto/SignupRequest.java @@ -1,2 +1,38 @@ -package com.gdscys.cokepoke.member.dto;public class SignupRequest { +package com.gdscys.cokepoke.member.dto; + +import com.gdscys.cokepoke.validation.declaration.PasswordMatches; +import com.gdscys.cokepoke.validation.declaration.ValidEmail; +import javax.validation.constraints.NotBlank; +import lombok.Builder; +import lombok.Getter; +import org.hibernate.validator.constraints.Length; + +@Getter +@PasswordMatches +public class SignupRequest { + + @NotBlank + @ValidEmail + private String email; + + @NotBlank + private String username; + + @NotBlank + @Length(min = 8, max = 20) + private String password; + + @NotBlank + @Length(min = 8, max = 20) + private String confirmPassword; + + protected SignupRequest() {} + + @Builder + public SignupRequest(String email, String username, String password, String confirmPassword) { + this.email = email; + this.username = username; + this.password = password; + this.confirmPassword = confirmPassword; + } } From 3fa0df6b084764741886cb0c15319955e0939597 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:15:54 +0900 Subject: [PATCH 17/60] feat: update member request --- .../member/dto/UpdateMemberRequest.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java b/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java index ce41def..b281cd1 100644 --- a/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java +++ b/src/main/java/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.java @@ -1,2 +1,22 @@ -package com.gdscys.cokepoke.member.dto;public class UpdateMemberRequest { +package com.gdscys.cokepoke.member.dto; + +import com.gdscys.cokepoke.validation.declaration.PasswordMatches; +import lombok.Builder; +import lombok.Getter; + +@Getter +@PasswordMatches +public class UpdateMemberRequest { + private String originalPassword; + private String newPassword; + private String confirmNewPassword; + + protected UpdateMemberRequest() {} + + @Builder + public UpdateMemberRequest(String originalPassword, String newPassword, String confirmNewPassword) { + this.originalPassword = originalPassword; + this.newPassword = newPassword; + this.confirmNewPassword = confirmNewPassword; + } } From 8d2d636e94a6e18edca41455ac9eb6672c7717f6 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:16:01 +0900 Subject: [PATCH 18/60] feat: member repository --- .../member/repository/MemberRepository.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java index af59c4d..75ee26d 100644 --- a/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java +++ b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java @@ -1,2 +1,19 @@ -package com.gdscys.cokepoke.member.repository;public interface MemberRepository { +package com.gdscys.cokepoke.member.repository; + +import com.gdscys.cokepoke.member.domain.Member; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface MemberRepository extends JpaRepository { + Optional findByEmail(String email); + Optional findByUsername(String username); + Boolean existsByEmail(String email); + Page findAll(Pageable pageable); } From d7e2aec563bbd8cb656af226fba8c65e9ad22450 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:16:11 +0900 Subject: [PATCH 19/60] feat: refresh token repository --- .../member/repository/RefreshTokenRepository.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java b/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java index ef4a865..453a724 100644 --- a/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java +++ b/src/main/java/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.java @@ -1,2 +1,14 @@ -package com.gdscys.cokepoke.member.repository;public class RefreshTokenRepository { +package com.gdscys.cokepoke.member.repository; + +import com.gdscys.cokepoke.member.domain.RefreshToken; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface RefreshTokenRepository extends JpaRepository { + Optional findByMember_Email(String email); + Optional findByRefreshToken(String refreshToken); } From 840f8ff621b885f9664866114acac60aa7a9bf46 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:16:25 +0900 Subject: [PATCH 20/60] feat: custom user details service --- .../service/CustomUserDetailsService.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java index 912ba1e..e1f1eac 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java @@ -1,2 +1,30 @@ -package com.gdscys.cokepoke.member.service;public class CustomUserDetailsService { +package com.gdscys.cokepoke.member.service; + +import com.gdscys.cokepoke.member.repository.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.Arrays; + +@Service +@RequiredArgsConstructor +public class CustomUserDetailsService implements UserDetailsService { + + private final MemberRepository memberRepository; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + return memberRepository.findByUsername(username) + .map(member -> User.builder() + .username(member.getUsername()) + .password(member.getPasswordHash()) + .roles(Arrays.toString(member.getRoles().toArray())) + .build()) + .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); + } + } From b76e369b1e4ec10105afc479bc36d8cef61e57c5 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:19:46 +0900 Subject: [PATCH 21/60] feat: member service interface --- .../cokepoke/member/service/IMemberService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java index d54bbcd..bc00f7f 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java @@ -1,2 +1,13 @@ -package com.gdscys.cokepoke.member.service;public class IMemberService { +package com.gdscys.cokepoke.member.service; + +import com.gdscys.cokepoke.member.domain.Member; +import com.gdscys.cokepoke.member.dto.UpdateMemberRequest; + +import java.util.List; + +public interface IMemberService { + Member saveMember(String email, String username, String password); + void updateMember(Member member, UpdateMemberRequest request); + void deleteMember(Member member); + List findAll(int page); } From 2b3173acb38acbebe83a17a0af2a32a80d96eaa2 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:20:05 +0900 Subject: [PATCH 22/60] feat: member service --- .../member/service/MemberService.java | 90 ++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java index b05bb13..2784124 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -1,2 +1,90 @@ -package com.gdscys.cokepoke.member.service;public class MemberService { +package com.gdscys.cokepoke.member.service; + +import com.gdscys.cokepoke.auth.jwt.JwtTokenProvider; +import com.gdscys.cokepoke.auth.domain.TokenInfo; +import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; +import com.gdscys.cokepoke.member.domain.Member; + +import com.gdscys.cokepoke.member.domain.RefreshToken; +import com.gdscys.cokepoke.member.dto.UpdateMemberRequest; +import com.gdscys.cokepoke.member.repository.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + + +@Service +@RequiredArgsConstructor +public class MemberService implements IMemberService { + private final MemberRepository memberRepository; + private final PasswordEncoder passwordEncoder; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + private final RefreshTokenRepository refreshTokenRepository; + + private final static int PAGE_SIZE = 15; + + @Override + public Member saveMember(String email, String username, String password) { + Member member = new Member(email, username, passwordEncoder.encode(password), Set.of("USER")); + return memberRepository.save(member); + } + + @Transactional + public TokenInfo login(String email, String password) { + + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, password); + + Authentication authentication = authenticationManagerBuilder + .getObject().authenticate(authenticationToken); + Optional member = memberRepository.findByEmail(email); + + if (member.isEmpty()) { + throw new UsernameNotFoundException("User not found with email: " + email); + } + + //토큰 생성 + TokenInfo tokenInfo = jwtTokenProvider.generateToken(authentication, email); + + // refresh token 없으면 생성, 있으면 업데이트 + refreshTokenRepository.findByMember_Email(member.get().getEmail()) + .ifPresentOrElse(refreshToken -> { + refreshToken.setRefreshToken(tokenInfo.getRefreshToken()); + refreshTokenRepository.save(refreshToken); + }, () -> { + refreshTokenRepository.save(new RefreshToken(tokenInfo.getRefreshToken(), member.get())); + }); + return tokenInfo; + } + + @Override + public void updateMember(Member member, UpdateMemberRequest request) { + member.updatePassword(passwordEncoder.encode(request.getNewPassword())); + } + + @Override + public void deleteMember(Member member) { + memberRepository.delete(member); + } + + @Override + public List findAll(int page) { + PageRequest pr = PageRequest.of(page, PAGE_SIZE); + return memberRepository.findAll(pr).stream() + .sorted(Comparator.comparing(Member::getUsername)) + .collect(Collectors.toList()); + } } From 21cdbd72d724688effc5d657194097eadd5a6bae Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:20:20 +0900 Subject: [PATCH 23/60] feat: password matches validator --- .../declaration/PasswordMatches.java | 22 ++++++++++++- .../PasswordMatchesValidator.java | 31 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java b/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java index 2bd99a8..4ba4388 100644 --- a/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java +++ b/src/main/java/com/gdscys/cokepoke/validation/declaration/PasswordMatches.java @@ -1,2 +1,22 @@ -package com.gdscys.cokepoke.validation.declaration;public class PasswordMatches { +package com.gdscys.cokepoke.validation.declaration; + +import com.gdscys.cokepoke.validation.implementation.PasswordMatchesValidator; +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({TYPE,ANNOTATION_TYPE}) +@Retention(RUNTIME) +@Constraint(validatedBy = PasswordMatchesValidator.class) +@Documented +public @interface PasswordMatches { + String message() default "Your passwords do not match."; + Class[] groups() default {}; + Class[] payload() default {}; } diff --git a/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java b/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java index 02f3961..1526e4f 100644 --- a/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java +++ b/src/main/java/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.java @@ -1,2 +1,31 @@ -package com.gdscys.cokepoke.validation.implementation;public class PasswordMatchesValidator { +package com.gdscys.cokepoke.validation.implementation; + +import com.gdscys.cokepoke.member.dto.SignupRequest; +import com.gdscys.cokepoke.member.dto.UpdateMemberRequest; +import com.gdscys.cokepoke.validation.declaration.PasswordMatches; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +public class PasswordMatchesValidator implements ConstraintValidator { + + @Override + public boolean isValid(Object obj, ConstraintValidatorContext context){ + if (obj.getClass().equals(SignupRequest.class)) { + return validateSignupRequest(obj); + } + if (obj.getClass().equals(UpdateMemberRequest.class)) { + return validateUpdateUserRequest(obj); + } + return false; + } + + public boolean validateSignupRequest(Object obj) { + SignupRequest request = (SignupRequest) obj; + return request.getPassword().equals(request.getConfirmPassword()); + } + public boolean validateUpdateUserRequest(Object obj) { + UpdateMemberRequest request = (UpdateMemberRequest) obj; + return ((!request.getOriginalPassword().equals(request.getNewPassword())) + && request.getNewPassword().equals(request.getConfirmNewPassword())); + } } From e206db6c676650635c93aeb84dc47521825c9a59 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 00:20:33 +0900 Subject: [PATCH 24/60] feat: validate email --- .../validation/declaration/ValidEmail.java | 19 +++++++++++- .../implementation/EmailValidator.java | 29 ++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java b/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java index 1231bf1..f5d7081 100644 --- a/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java +++ b/src/main/java/com/gdscys/cokepoke/validation/declaration/ValidEmail.java @@ -1,2 +1,19 @@ -package com.gdscys.cokepoke.validation.declaration;public class ValidEmail { +package com.gdscys.cokepoke.validation.declaration; + +import com.gdscys.cokepoke.validation.implementation.EmailValidator; +import javax.validation.Constraint; +import javax.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) +@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) +@Constraint(validatedBy = {EmailValidator.class}) +public @interface ValidEmail { + + String message() default "Invalid email"; + Class[] groups() default {}; + Class[] payload() default {}; } diff --git a/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java b/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java index 7ac8552..80136a4 100644 --- a/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java +++ b/src/main/java/com/gdscys/cokepoke/validation/implementation/EmailValidator.java @@ -1,2 +1,29 @@ -package com.gdscys.cokepoke.validation.implementation;public class EmailValidator { +package com.gdscys.cokepoke.validation.implementation; + +import com.gdscys.cokepoke.validation.declaration.ValidEmail; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class EmailValidator implements ConstraintValidator { + + private Pattern pattern; + private Matcher matcher; + private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-+]+(.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(.[A-Za-z0-9]+)*(.[A-Za-z]{2,})$"; + + @Override + public void initialize(ValidEmail constraintAnnotation) {} + + @Override + public boolean isValid(String email, ConstraintValidatorContext context) { + return validateEmail(email); + } + + private boolean validateEmail(String email) { + pattern = Pattern.compile(EMAIL_PATTERN); + matcher = pattern.matcher(email); + return matcher.matches(); + } } From fc6fc9f3eb76c51fb9edea93087a33476d70bce3 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 01:50:13 +0900 Subject: [PATCH 25/60] feat: constraints added --- .../gdscys/cokepoke/auth/controller/AuthController.java | 7 ++----- .../java/com/gdscys/cokepoke/auth/dto/LoginRequest.java | 7 +++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java index fdc5341..fff58fc 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java +++ b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java @@ -34,11 +34,8 @@ public ResponseEntity signup(@RequestBody @Valid SignupRequest r .body(MemberResponse.of(member)); } - @PostMapping(value = "/login", - consumes = "application/json", - produces = "application/json" - ) - public ResponseEntity login(@RequestBody LoginRequest loginRequest) { + @PostMapping(value = "/login") + public ResponseEntity login(@RequestBody @Valid LoginRequest loginRequest) { TokenInfo tokenInfo = memberService.login(loginRequest.getEmail(), loginRequest.getPassword()); return ResponseEntity.ok() .header(SET_COOKIE, generateCookie("accessToken", tokenInfo.getAccessToken()).toString()) diff --git a/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java index aa0053a..1786810 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java +++ b/src/main/java/com/gdscys/cokepoke/auth/dto/LoginRequest.java @@ -1,10 +1,17 @@ package com.gdscys.cokepoke.auth.dto; +import com.gdscys.cokepoke.validation.declaration.ValidEmail; import lombok.Getter; +import javax.validation.constraints.NotBlank; + @Getter public class LoginRequest { + + @ValidEmail private String email; + + @NotBlank private String password; protected LoginRequest() {} From 9ddfaaf101ffcc8b5cf00f2958d9d4fc7f4aeb24 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 01:50:24 +0900 Subject: [PATCH 26/60] fix: filter chain --- .../cokepoke/auth/jwt/JwtAuthFilter.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java index d21571b..7a1cc75 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java @@ -1,20 +1,23 @@ package com.gdscys.cokepoke.auth.jwt; + import com.gdscys.cokepoke.auth.domain.JwtCode; import com.gdscys.cokepoke.auth.domain.TokenInfo; -import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; import com.gdscys.cokepoke.member.domain.RefreshToken; +import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; import io.jsonwebtoken.Claims; -import javax.servlet.*; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Arrays; import java.util.Optional; @@ -89,7 +92,7 @@ protected boolean shouldNotFilter(HttpServletRequest request) { String path = request.getServletPath(); // filter 에서 제외한 url 목록 - String[] excludedPaths = { "/auth/login", "/auth/signUp"}; + String[] excludedPaths = { "/auth/login", "/auth/signup", "/h2-console"}; for (String excludedPath : excludedPaths) { if (path.startsWith(excludedPath)) { @@ -99,5 +102,4 @@ protected boolean shouldNotFilter(HttpServletRequest request) { return false; } - -} +} \ No newline at end of file From 22cfdc7855df33febf933331bf484ff045e9c7f0 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 01:51:36 +0900 Subject: [PATCH 27/60] fix: imports --- .../gdscys/cokepoke/auth/jwt/JwtTokenProvider.java | 13 +++++-------- .../cokepoke/configuration/SecurityConfig.java | 13 ++++++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java index 6e586ff..7b3a2c4 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.java @@ -2,11 +2,7 @@ import com.gdscys.cokepoke.auth.domain.JwtCode; import com.gdscys.cokepoke.auth.domain.TokenInfo; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SignatureAlgorithm; -import javax.servlet.http.Cookie; +import io.jsonwebtoken.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.access.AccessDeniedException; @@ -19,6 +15,7 @@ import org.springframework.stereotype.Component; import javax.crypto.spec.SecretKeySpec; +import javax.servlet.http.Cookie; import java.security.Key; import java.sql.Date; import java.time.LocalDateTime; @@ -31,7 +28,6 @@ @Slf4j @Component public class JwtTokenProvider { - private final Key key; public JwtTokenProvider(@Value("${jwt.secret}") String secretKey) { @@ -50,7 +46,7 @@ public TokenInfo generateToken(Authentication authentication, String email) { .setSubject(authentication.getName()) .claim("auth", authorities) .claim("email", email) - .setExpiration(java.sql.Date.from(now + .setExpiration(Date.from(now .plusMinutes(30) .atZone(ZoneId.systemDefault()).toInstant())) .signWith(key, SignatureAlgorithm.HS256) @@ -117,4 +113,5 @@ public Cookie generateCookie(String from, String token) { return cookie; } -} + +} \ No newline at end of file diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java index 8ae7988..5934da2 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java @@ -40,16 +40,19 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .formLogin().disable() .headers().frameOptions().sameOrigin() .and() - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests() - .antMatchers("/", "/auth/login", "/auth/signup", "/h2-console/**") + .antMatchers("/", "/auth/login", "/auth/signup", + "/h2-console/**") .permitAll() .anyRequest().authenticated() .and() .addFilterBefore(new JwtAuthFilter(jwtTokenProvider, refreshTokenRepository), UsernamePasswordAuthenticationFilter.class); + return http.build(); - } -} + + } + +} \ No newline at end of file From 3709231668b048e3bb96e5cf6499f4952990d931 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 01:52:00 +0900 Subject: [PATCH 28/60] fix: delete redundant code --- .../cokepoke/exception/GlobalExceptionHandler.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java index 262444a..1a6928c 100644 --- a/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/gdscys/cokepoke/exception/GlobalExceptionHandler.java @@ -16,18 +16,6 @@ @ControllerAdvice public class GlobalExceptionHandler { - @ExceptionHandler(IOException.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public ResponseEntity handleIOException( - IOException exception - ) { - ErrorResponse response = ErrorResponse.of( - exception, - exception.getMessage(), - HttpStatus.INTERNAL_SERVER_ERROR - ); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); - } @ExceptionHandler(AccessDeniedException.class) @ResponseStatus(HttpStatus.FORBIDDEN) @@ -99,4 +87,5 @@ public ResponseEntity handleAllUncaughtException( return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } + } From fb904f067846d4be9c0c4d95473935c17bf64984 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 04:27:57 +0900 Subject: [PATCH 29/60] fix --- .../cokepoke/member/service/CustomUserDetailsService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java index e1f1eac..b82fb07 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java @@ -17,14 +17,14 @@ public class CustomUserDetailsService implements UserDetailsService { private final MemberRepository memberRepository; @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - return memberRepository.findByUsername(username) + public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { + return memberRepository.findByEmail(email) .map(member -> User.builder() .username(member.getUsername()) .password(member.getPasswordHash()) .roles(Arrays.toString(member.getRoles().toArray())) .build()) - .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); + .orElseThrow(() -> new UsernameNotFoundException("User not found with email: " + email)); } } From 76517ee44f8052398db157a88314d77a9310992a Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 20:24:19 +0900 Subject: [PATCH 30/60] fix: user info --- .../java/com/gdscys/cokepoke/member/domain/Member.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 0203b98..c22199b 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -52,6 +52,9 @@ public class Member implements UserDetails { @ElementCollection(fetch = FetchType.EAGER) private Set roles = new HashSet<>(); + @Column(name = "is_expired", nullable = false) + private boolean isExpired = false; + protected Member() {} @@ -85,17 +88,17 @@ public String getUsername() { @Override public boolean isAccountNonExpired() { - return true; + return !this.isExpired; } @Override public boolean isAccountNonLocked() { - return true; + return !this.isExpired; } @Override public boolean isCredentialsNonExpired() { - return true; + return this.refreshToken; } @Override From 4a154e86f6ac0e85b0eba59f8eda24f95d361970 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 20:42:11 +0900 Subject: [PATCH 31/60] fix --- src/main/java/com/gdscys/cokepoke/member/domain/Member.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index c22199b..d9f8df0 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -98,7 +98,7 @@ public boolean isAccountNonLocked() { @Override public boolean isCredentialsNonExpired() { - return this.refreshToken; + return true; } @Override From 9f8f91cc2ff5bb1de9b15f23c97006403af7359a Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 20:43:52 +0900 Subject: [PATCH 32/60] changes --- .gradle/8.2.1/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.bin | Bin 0 -> 208006 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.2.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.2.1/fileHashes/fileHashes.bin | Bin 0 -> 24197 bytes .gradle/8.2.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.2.1/fileHashes/resourceHashesCache.bin | Bin 0 -> 21761 bytes .gradle/8.2.1/gc.properties | 0 .gradle/8.2/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../8.2/dependencies-accessors/gc.properties | 0 .../8.2/executionHistory/executionHistory.bin | Bin 0 -> 106017 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.2/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.2/fileHashes/fileHashes.bin | Bin 0 -> 21647 bytes .gradle/8.2/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.2/fileHashes/resourceHashesCache.bin | Bin 0 -> 19449 bytes .gradle/8.2/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18965 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .gradle/vcs-1/gc.properties | 0 .idea/compiler.xml | 24 ++ .idea/gradle.xml | 15 + .idea/jarRepositories.xml | 25 ++ .idea/misc.xml | 8 + .idea/modules.xml | 8 + .idea/modules/coke-poke.main.iml | 8 + .idea/uiDesigner.xml | 124 +++++++ .idea/workspace.xml | 152 +++++++++ build.gradle | 52 +++ .../gdscys/cokepoke/CokePokeApplication.class | Bin 0 -> 751 bytes .../auth/controller/AuthController.class | Bin 0 -> 4666 bytes .../gdscys/cokepoke/auth/domain/JwtCode.class | Bin 0 -> 1171 bytes .../cokepoke/auth/domain/TokenInfo.class | Bin 0 -> 761 bytes .../cokepoke/auth/dto/LoginRequest.class | Bin 0 -> 942 bytes .../cokepoke/auth/jwt/JwtAuthFilter.class | Bin 0 -> 6845 bytes .../cokepoke/auth/jwt/JwtTokenProvider.class | Bin 0 -> 7391 bytes .../configuration/QueryDslConfig.class | Bin 0 -> 910 bytes .../configuration/SecurityConfig.class | Bin 0 -> 6918 bytes .../configuration/SwaggerConfig.class | Bin 0 -> 1318 bytes .../ErrorResponse$ValidationError.class | Bin 0 -> 823 bytes .../cokepoke/exception/ErrorResponse.class | Bin 0 -> 2090 bytes .../exception/GlobalExceptionHandler.class | Bin 0 -> 5450 bytes .../member/controller/MemberController.class | Bin 0 -> 3335 bytes .../cokepoke/member/domain/Member.class | Bin 0 -> 5191 bytes .../cokepoke/member/domain/RefreshToken.class | Bin 0 -> 1877 bytes ...MemberResponse$MemberResponseBuilder.class | Bin 0 -> 1639 bytes .../cokepoke/member/dto/MemberResponse.class | Bin 0 -> 1556 bytes .../SignupRequest$SignupRequestBuilder.class | Bin 0 -> 1979 bytes .../cokepoke/member/dto/SignupRequest.class | Bin 0 -> 1810 bytes ...erRequest$UpdateMemberRequestBuilder.class | Bin 0 -> 1916 bytes .../member/dto/UpdateMemberRequest.class | Bin 0 -> 1377 bytes .../member/repository/MemberRepository.class | Bin 0 -> 1046 bytes .../repository/RefreshTokenRepository.class | Bin 0 -> 746 bytes .../service/CustomUserDetailsService.class | Bin 0 -> 3931 bytes .../member/service/IMemberService.class | Bin 0 -> 717 bytes .../member/service/MemberService.class | Bin 0 -> 8069 bytes .../declaration/PasswordMatches.class | Bin 0 -> 903 bytes .../validation/declaration/ValidEmail.class | Bin 0 -> 841 bytes .../implementation/EmailValidator.class | Bin 0 -> 2064 bytes .../PasswordMatchesValidator.class | Bin 0 -> 1784 bytes .../cokepoke/CokePokeApplicationTests.class | Bin 0 -> 549 bytes .../controller/FriendshipControllerTest.class | Bin 0 -> 5480 bytes .../controller/PokeControllerTest.class | Bin 0 -> 4887 bytes ...okepoke.controller.PokeControllerTest.html | 318 ++++++++++++++++++ build/reports/tests/test/css/base-style.css | 179 ++++++++++ build/reports/tests/test/css/style.css | 84 +++++ build/reports/tests/test/index.html | 133 ++++++++ build/reports/tests/test/js/report.js | 194 +++++++++++ .../com.gdscys.cokepoke.controller.html | 103 ++++++ ...cokepoke.controller.PokeControllerTest.xml | 208 ++++++++++++ build/test-results/test/binary/output.bin | Bin 0 -> 122439 bytes build/test-results/test/binary/output.bin.idx | Bin 0 -> 135 bytes build/test-results/test/binary/results.bin | Bin 0 -> 277 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 117841 bytes .../previous-compilation-data.bin | Bin 0 -> 64500 bytes git.ignore | 45 +++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63375 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 248 ++++++++++++++ gradlew.bat | 92 +++++ .../gdscys/cokepoke/CokePokeApplication.java | 13 + 86 files changed, 2042 insertions(+) create mode 100644 .gradle/8.2.1/checksums/checksums.lock create mode 100644 .gradle/8.2.1/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.2.1/dependencies-accessors/gc.properties create mode 100644 .gradle/8.2.1/executionHistory/executionHistory.bin create mode 100644 .gradle/8.2.1/executionHistory/executionHistory.lock create mode 100644 .gradle/8.2.1/fileChanges/last-build.bin create mode 100644 .gradle/8.2.1/fileHashes/fileHashes.bin create mode 100644 .gradle/8.2.1/fileHashes/fileHashes.lock create mode 100644 .gradle/8.2.1/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.2.1/gc.properties create mode 100644 .gradle/8.2/checksums/checksums.lock create mode 100644 .gradle/8.2/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.2/dependencies-accessors/gc.properties create mode 100644 .gradle/8.2/executionHistory/executionHistory.bin create mode 100644 .gradle/8.2/executionHistory/executionHistory.lock create mode 100644 .gradle/8.2/fileChanges/last-build.bin create mode 100644 .gradle/8.2/fileHashes/fileHashes.bin create mode 100644 .gradle/8.2/fileHashes/fileHashes.lock create mode 100644 .gradle/8.2/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.2/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/modules/coke-poke.main.iml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/workspace.xml create mode 100644 build.gradle create mode 100644 build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/controller/AuthController.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/domain/JwtCode.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/domain/TokenInfo.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/dto/LoginRequest.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/configuration/QueryDslConfig.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/configuration/SecurityConfig.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/configuration/SwaggerConfig.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse$ValidationError.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/exception/GlobalExceptionHandler.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/controller/MemberController.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/domain/Member.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/domain/RefreshToken.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse$MemberResponseBuilder.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest$SignupRequestBuilder.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/UpdateMemberRequest$UpdateMemberRequestBuilder.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/dto/UpdateMemberRequest.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/repository/MemberRepository.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/service/CustomUserDetailsService.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/service/IMemberService.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/member/service/MemberService.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/validation/declaration/PasswordMatches.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/validation/declaration/ValidEmail.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/validation/implementation/EmailValidator.class create mode 100644 build/classes/java/main/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.class create mode 100644 build/classes/java/test/com/gdscys/cokepoke/CokePokeApplicationTests.class create mode 100644 build/classes/java/test/com/gdscys/cokepoke/controller/FriendshipControllerTest.class create mode 100644 build/classes/java/test/com/gdscys/cokepoke/controller/PokeControllerTest.class create mode 100644 build/reports/tests/test/classes/com.gdscys.cokepoke.controller.PokeControllerTest.html create mode 100644 build/reports/tests/test/css/base-style.css create mode 100644 build/reports/tests/test/css/style.css create mode 100644 build/reports/tests/test/index.html create mode 100644 build/reports/tests/test/js/report.js create mode 100644 build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html create mode 100644 build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml create mode 100644 build/test-results/test/binary/output.bin create mode 100644 build/test-results/test/binary/output.bin.idx create mode 100644 build/test-results/test/binary/results.bin create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 git.ignore create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 src/main/java/com/gdscys/cokepoke/CokePokeApplication.java diff --git a/.gradle/8.2.1/checksums/checksums.lock b/.gradle/8.2.1/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..d2f183c0fc9c156339506e8e25de793c5886dc29 GIT binary patch literal 17 TcmZR!nS1ifhqV6>8K3|FMj8ds literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.2.1/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..79d18927839149685af2aac0a5c5093f2fe9fd5b GIT binary patch literal 17 TcmZR6Vg0SAXX&{)3{U_7LHGqk literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/dependencies-accessors/gc.properties b/.gradle/8.2.1/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.2.1/executionHistory/executionHistory.bin b/.gradle/8.2.1/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..29ecd6400a00982a359ae0a5333578778f1d0933 GIT binary patch literal 208006 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/executionHistory/executionHistory.lock b/.gradle/8.2.1/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..60fc5e48ae9aa69934d102a036678738b7d90ea8 GIT binary patch literal 17 UcmZRcm$Jt(bK~z81_@~ literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/fileChanges/last-build.bin b/.gradle/8.2.1/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/fileHashes/fileHashes.bin b/.gradle/8.2.1/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..0057b70edcaa49b2ba3f8dd74d29355b4035bfd0 GIT binary patch literal 24197 zcmeI4iC+)f|HnT|`=W(bEwoA!Maj})ZQqktN~lPvv|75Q6m8$+M%r*osGG7>L`l|A z6tbs_qJ?x-SLJu+bI$pEubF=T!0$Kb@i3n}o#(vIdCkn3@h~6D84OwRpQthZ+ob;c zBmEPd0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G$Ax0G+`9l>}VC zM12Lj5#9UhaIs3g08KXePrPuTYKPtKZr|{NlR;dSOB?)KIW;{ZH{C& zsA)iMImYFKDH1w<>?e>r2xFes=O<3$Lhg7U^K!K}`OmQJp9CaP=I zi23=K0znMHe;Q$buUgEjFPe%vs>7x3_|x8Wfr$lXjZ zZ<1V_m7ryQ2y%;jF3(KR%DrH+9&+#Lm_KZix!bZ|?h)kHDVR6U{9e%VTP_de?)+S? zU*4KtpM4r~PaVu#7t~~(>Wy83`Ws>17Ra;Ou%|T$a)%|Dw`;6aQIa3Hj{0xL{8gve z@ObD^bROD##{5IcL-8Fm)P95gZCo(#zNT4fuPAaHa%(NjKS>%_D+Vh*gxpFO^Ur4I zvxi@;P=nkymdnSShM!)%hQ{d_fO+p$--Vl2M)<(~b{1Uz;9}CoqM;_p9WnmdSNJ)~ z_{V0HvsXX{r|>%cw}Fkap8v*kgs`x`47*L{P+El1CTpwV?G+#x$2;M z(+$cZ7Gm@HefFJG*sKJ_lYUwj)s_vB=d!hMmBwi z+{y=Y(T&IQHtwyy5BZuB%*F24r9WDpSP!{<80O-(Pt$bfmBgU^3}G(OU%^sX?)DVz zXENrJL6u4;>R9NybKB14alCc)bCg?P|J4_`yzNHa$Z$|T_&W z%%@r^#2a=7FT3yu)iZO=GsAz$9sg|qWhO~J?673b@ZB4B+>C*6OQ>j zz7tO)GZH7k{Wzy#ZXj4^@B8VE8RRamT)r~0S*Gd1JjmU1x%~V5B)+(>HjrE1!+e2T zUg=F8*WHlYsB-y-kD&>dccGkZ6)|5dpf-5ADi)33r5E!h601Z{mB^#>*4Ybl;~?cA zm0OLOX?{irVeM+1etekh`7W^6s+Y1D&DhyzL-oySbmoYcDDPGVO zX@DMIT+}hQF8SO)Pg4_Jcdi|n+tobsc0Qtu`09_CJ1-3XIjdq38jnpP=B|R@I5agIhG>~H;*%O7flTK8Knf!uQ~=IfT^rKSa)tbyFV9rN{?l2TXp`|O3> zu9V9IH5%XdyhrP^(=9IV(63G~584L%yY9k#<9g@#>0{#jkXy1b59nhHLt-`4H>50TOBjFpt=AL0Z3m121N8Pb%ZF-QsNvbRtEI4d z+s$FmX5l3_ImWJ>09b<4q?cz4@2)-Gd-zBt=>Z+mi%patkjG!O8LG^*08 zKJM2W!jJxSV_)-?D;NDZ#@?HAIsF-|NUG5{CG+{(e#O|2i5idlp2jXl^GJgR&uXfn zd8IDuOSr*uHx;{R|HD$?JmQSXAJy1QH5Sxwl3Lg`7Cb7_Xx#nc{CQ;PLW4=XbxE3s z{g3#QS+i{Wu6yl^ig{B7-Yw+RK<{C)c2bS=rn)`NvHz%bRtwIRHD(4OV>_(DdxvV= z3H`IYxiO&O_Rt>-;%*OKCk${!Wk5r0E!9|+VLoHBIWv0p;Y*Su;l=XENQVZC_@BK< z^T^q(>^bXQMh_#x^83m0Sy_ZJRm|QU8ax$LW3z{wlyF+rc7fKS`G=>>21kxF^C(o~ zIn}t7IA#`Aojkw{I{ak7Lq-6N3LQbQzo>@Wa*Hijeio+|>^~>F;xC6&$oLPe!JI-h z_JkK(TE)Bxm$db+HXU$lLq;YvSj2nCq?yO8n^qR@Re2B{;&Et6_LxF09#m;@l z=*YXO%J=wl{;bOsG=SgL{(7&oT|%8E_A$xWJhke0ce zSE}yX8w#l>Wk2(SMVVv7!%+$IQVq+FZC`Bs1~l2{>R%hCUj=V7a}2b$i&{~Q?dbxo z?JII5CGI_&pZGNpuk9hQ22V8A7z!T$bhL2TsG%`OsZdWHyjjet5eE$>xbDgGIF%%@ zCErce-cjShx^FLPz)HX|l92)K4rF7&+--+m7g*lDD=q)Cf37)5^WO$*In`*ssu)@= zH+9*F@w*r7q5I%_ZyW<07oxG=f(G>{{+nUk9Srfrkn?&?yF!)ly zhGd*vT&DMX;1d4@5+8Uwr>ZRYwTAcv=dS;(y5s!^&E_q+r>I~r6m<|8V2vjl^AXsP zYP^(tueY)Ehi|Uoi8IH#CBc#7%ma;zhgcy<#-m>QTOGMRDa@T#<6`5%MuZ_hxoHzo zfx%!C-?$?g;}x;~QX+<08@441dA+mAMn*74VDOAn4eyHy2^F<*5;1A5nS-`&VH|^Z z3;GrwTb*j06W_Ez`L6k$z{{)Zf|~azA;S#TU`=ohws-1uIEd#gR0&i3?XAp}WrU#= zAN3v@Y$7w#JWear*-0zp4z66w>dIZR0j{F)QRur5)3hcq?(y|b^4j0Brf{k2ba{m_ zRD)RAK;zW_8&VA~g_kx*=FPmS{(*7FDCbNEX;fuYgIV)?akk#dV{%$TJNk!je?dkI zQGvlwnBXZxCq(;#&oc zXenq26Z0V%QAbV`JvjbPM4oz>jCZA@B&zW@G$fu;jpBgM2FpaZdQYpb?Ap_v0QSu} z9$-F1V-rssq#D83w!aj+uKLncFNJ@WM=y9r;2518fx$zp@g(E*o@)cg#%`v@DyDA| zySm5(86ah%vB3I8Hj+m}%=*fDQ$wHmCh34ymk+=9KzH7_G~DTt5H&dt7v?*Ff;`GsYd?P>CD&ak$ZaF zE-tAZij4iW2Com*NYm_z=&73~k>mY6BJSHdJSy~k7(t>IX&zg5&FOw}^GHR2VRt=i zhCm5v<`dj&pGw~M%Zv2W7Jl-qc+`8T9x}w>Jb0w3HS}|jDM-bScuP;J*pV<6s11#% z$IxJXq8dgzt30>*Wd_#``pr<9hJ?h!=+jhtx z?&F||P4Fx#dVXEP;9w-9&fAqS{eBz|GKhVH#*P3RQdX8DRe$Dv$Xs|-Uw>blf+PI9 zL3}hHM_{N^vmUtAToz1wKnb$zFRaZ_ZNfu5jAO)#p^ zogu%yw+?L1D9O~BlD7#T!KKh(8-h<#jURuR`ZQNHy^IpjoBd*diB{_9<;cjT8q4-& ztBc=Q5n%FIR(rHe%N31k1vGdkc#@G}2FV*##eC{pDC@j+NYNJ=U`-(!FF5- zsfM1FYI&23-y<*MuC^Jfncq+i3y#1L5T_c^y(2aED@=-o%4#3^Jg{&=2C;9@_=drT zR71J6u2FK5p~3BWqb)W}l=J@$4k!n=A+wcVi&8b=+Q_n26yo%REG%7anNvd&Z zKHr1>_!>cjZ(B-x9=J8a8ZqEr1scnAg5wdp+H6`;zh>E;(4H~Vw8ilH*t_`<$6&A~ zI35!k@iE8#cjK+IRa(4I9LS1mh7FjA z?%o;J4Gkys>_e;+cBGcR)kPg=#$Uy}0qfy~I~n*u?=YLZZUI8a%|2B-QwQ?C%E)N4t77*Et+4F!>$q zo0z%sTTTu3iOp0at@7L%^~HarChcSCDdryo_i>JaMl~g#YDCWwbT~Y!rB-(|zf8=D#6*=XseOctE>VQTi%`up-h+4D%2N7+#hyVZp literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/fileHashes/fileHashes.lock b/.gradle/8.2.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..b82242c934b0e07a40b6490e8ffaa20da6fa989a GIT binary patch literal 17 UcmZSnrDya0XIkKN1_*cv06S>~e*gdg literal 0 HcmV?d00001 diff --git a/.gradle/8.2.1/fileHashes/resourceHashesCache.bin b/.gradle/8.2.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..e1ad7dba3a663f0bfa2110cf9396173c3fc9acc3 GIT binary patch literal 21761 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.2/dependencies-accessors/gc.properties b/.gradle/8.2/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.2/executionHistory/executionHistory.bin b/.gradle/8.2/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..0db3ae025966a358452de1e35ce3772c166cbf0c GIT binary patch literal 106017 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.2/executionHistory/executionHistory.lock b/.gradle/8.2/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..34522831c0fa0d08d3f966c96f30371acfd0ca02 GIT binary patch literal 17 TcmZQ(-faJ*t54610Rp%HD)|F< literal 0 HcmV?d00001 diff --git a/.gradle/8.2/fileChanges/last-build.bin b/.gradle/8.2/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.2/fileHashes/fileHashes.bin b/.gradle/8.2/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..20c48b2951932cfc60f989d80d0cd3944827a529 GIT binary patch literal 21647 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 UUyFByY6D}&8bPn9jZS>yZ@$X{o&W#< literal 0 HcmV?d00001 diff --git a/.gradle/8.2/fileHashes/fileHashes.lock b/.gradle/8.2/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..7b23c833663466d0d4fbbce6134415f339720790 GIT binary patch literal 17 UcmZRcRCw9J{w7-^0|ev%05C-aB>(^b literal 0 HcmV?d00001 diff --git a/.gradle/8.2/fileHashes/resourceHashesCache.bin b/.gradle/8.2/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..b4b5ef49c77b198e57a9418e516c8780cdb711ab GIT binary patch literal 19449 zcmeI(`%hD69LMnvC?-rMRAk_QN)Xy?urkykAh&^rwi{*&8{smg3N?-uT&IR{PY0AD zlZ{J+jFogyK!sUGK~TnJnSiLk zo!xBNl|ph~@S-Q|Q}EfwM7{h+$zPsJ z>5b%dPoOUIP0RfJm4t4hb1G49;&~Vk+KL^>^9Wz`axLTbenC6gn^3>&cxcg(W;ITp zrwjGbjDzhb53r-j{R-+Dqm%bU;n@LXH%0yLxT>$^eay4ud3;fyFA*+}$5iK#`y$jA z0&GeL=rkLmbI+h|-ug5@B%Me8dN{VITQ(IR_p)Fy$o&ZFyJ*tHxT3Bwvb&%jAT~GR zEe?J~^dNuK4{BD{6RYJGWUoT~kk{mDk+Xjj(K*qmAGHdJ;(5D}oqHJdFxC*Q+kZ`=wQMZ;Euynks0)9R3|LSb%ZbiaqW%RZ+~9zRu`PL?9@LYjw%<@5ZO9-x zM~gc8q)-eL#CPx$1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;Kw!@Xf%V4QT>myx`qXAw%Cu|GR~Z-TCLPT- zqTPQN6-GS`ipUvtTGoi6>nTP(z9?3;$RwSqox-?Nx!E+PJ-%3boMfZTY0GbE(O5+L z+^obG--*3Bb;DwT+cCi#tof&=_~J>3;}2Y2@0=*xv+L${dL+JZzZGn_ga2&8?{Zt< zo4+;dpHkR#FQJ8U&p*;y!>4`97V?5Duiy)zM8QnG(RV*&x6{SC@=F!?BKUVn_k3*^ zHI{ih|44C%{(tBjR0XfNSAD%d=a5`3}JnHL$lbNzaKc#KJ#bd`@UIQwT) zdh5cx6T?OxOn-S_|2)U0t9%eBTbdVlKFD~sRV}EY7vKw@kH;S=1LKU2_lhp&NB8KT zhS+qDp?fJFPQ|a&`W+rRN1ivMjL&dk0@^|K!elif=hyV>6c% z4$uD6hcA-mh8M3^o~ZxSx@=h8e=HVXOfOco7qDV3rTsj^@ICX(UVKq1+9Gb?kJ`_s zyGf0&UdY84-$dMf>|NoJQhPe@Vc{}u0AI+XbQyV?WDM#gfV{aY5QlR}OyGp&Jvr;|mAAV(G|S`rhRJbG_6kW*fdp9kzFGtlcx} hbWM^}VJeBo7pHGgJ65OU`{H@)B?hhG`sXq1{sq&Ebm{;A literal 0 HcmV?d00001 diff --git a/.gradle/8.2/gc.properties b/.gradle/8.2/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..962b44ed7eae5a4036f11710b24532e56d144fc1 GIT binary patch literal 17 UcmZQRSmhRV@7*DN1_%fM06Gl>>;M1& literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..2918ec7 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Wed Oct 11 20:39:11 KST 2023 +gradle.version=8.2 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..106fd4db365dd5cfcd7d9f3ae236d6d089efed47 GIT binary patch literal 18965 zcmeI%T}V@57{KwFL50!6jlRy<^CYnw8*~%@17~~rpZ9&n`Q5JEFdTV5 z}kJD3$pm+FvFMC$_jRl}jJj{`S>P+qc%IjWQ>wee7$)54SgUMfQiZCq8!O ze`zgTB7LTIhy6*H-_uwuy;QqvtHbV#9K9>^6WSNgXz!{oShQODu=W-8!GTn0VpQgI zYOl(h72i{4>yy6kcW>+QhHvbAAl<2bgT42T%O7^h{O#InZU=U+-|;9a-LJjYmUKRT zeyU%3nfAK)$hO}3b=5N8t-UGs-PbhOlP~*6wKum14#bA~+A@9JbnScJhlcy#T(HXi zbK3RWFf1LJXM7@n00IagfB*srAbh);iFshQc~48<=?~i<#SH(b0VJdyDMJxy{KwmD}Vg GpZWzpQ)@Z^ literal 0 HcmV?d00001 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..8ed3787fc516ca317e27f719c3b93485a77b59cc GIT binary patch literal 8 PcmZQzVC + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..f9163b4 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..d3fceda --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5341222 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..bf32d85 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/coke-poke.main.iml b/.idea/modules/coke-poke.main.iml new file mode 100644 index 0000000..afc1871 --- /dev/null +++ b/.idea/modules/coke-poke.main.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..b7a7603 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..fbccda1 --- /dev/null +++ b/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '2.7.16' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' +} + +group = 'com.gdsc-ys' +version = '0.0.1-SNAPSHOT' + +java { + sourceCompatibility = '11' +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-web' + + implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.12' + implementation 'net.minidev:json-smart:2.4.9' + + compileOnly 'org.projectlombok:lombok:1.18.30' + runtimeOnly 'com.h2database:h2' + annotationProcessor 'org.projectlombok:lombok:1.18.30' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' + + // jwt + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5' + + + implementation "com.querydsl:querydsl-jpa:5.0.0" + annotationProcessor "com.querydsl:querydsl-apt:5.0.0" + +} + +tasks.named('test') { + useJUnitPlatform() +} \ No newline at end of file diff --git a/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class b/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..bbcda6ab539e85d43773f7f348e4200017addd0b GIT binary patch literal 751 zcma)4O;6iE5PcgG986khC=?1k^hA3bQO9FosMx?a-TIR8|-$k5Jq#c<=WFujf_x}d#ZlVf?Zj_jur{f~IFL+{ZbV&!~ak7kTqxTE! zXO(V}_GwVT8tK-o03p`NTOE!mRWiY6RBR99DZ)qC&0ck8{9{`23Te+6&{ zzSc0^iROwF6oWvQm?o7DkFY2q=fsBT1 z2XaYB%qJ->pTq(zwc)IW#SYl&i=!q>T{s7~1D@)A^(ZHCJ(iRa=QTX4;etS4w(R*% z@wg}5!_qgcf;TJOB`Yfh4oqg9qLI&e*$bYLbrxlb%_z!ZM!E*qt5wGM2HQskHib*8 z^7b_&Zz>QU?V*r%&&u27lE8_9M%#0~W6TCCXXLrE^!(AmNyp6_UdgrW{Jd)x<$1?l zG!}fnWXwpfMvNH zz^$?Nm}P%~&a!>iDHQ0ZF^vCht_MV4gx>^)8t!z8rezzUBdM@w zO8N^@d_=h1Y`6dZQVXoW=x7QZFv?QK4#mF zZ~7L4C2(78K+nsJk+JNYVOG}~(~jp)nWYjVPnm5?W}!@=no*(BHMLsiE|h9D^-Z2N zm&`{EZnScNdLyk~DQs8m)~Zu4)6$5nhn$?EVOzn;Ted(tJ|qFP6fY*#vdiJQ9w>-* z3Jk|aC|(Uot~usD4{^=YMpnTqDmi%NHua9<-m`$XTN1z{y_mZ-aSzw zxMZS@4PxEq@TgU?>R?(RIqQ_&th~=sY3|C}EVV~jt%4kvK|Q7r>G(V|MonJ3Gj?^{ z@r?Ml=7bt5Y6AUn`htvoglYSTG;_>eI{I;=hR1X~jwf_HsUA<^2@Ox{cm~gEcuvRj zctOL9I$pxd8eY-yDqhp^I^NLmrjGr1OUK)INBKbdyDKEXy3&Z>Xu=%3K2X<)5OZ6oD~cY|=K*oSVfSSOHh<^@hQ%wo09Z0z@S8dO5f@aXVL zx;D@uRsXMx-e4TEuw>NLRe^`r>S|CGHWpc5g_Nfj1@7PhX)@+(GX}lT!2CL00<3cW z*lPZ2hG&&j*x@@NUQ%u$$hsQ7qQoczS2Ng|7!RF_J7vwHtyMt4-2^eSCKC#5tgmw&YWOLlY zzJKTkB!-vK!q&>xwv6_v@1b2p$H+x=t{|Dfw_KONAfGAj0yS)*j;jLs*JCJ{31ndy zBOFmGc4H6qZ9xwV?B(v8IornE$Zj870=M8+_M5rrHn!VOL3sR?e<$ZUA$r-}#dbGa z7tcLLqY1(L$AJjKH|Pi;q$3DjG+$rFrm2hAoa%1<1wAKPhEi9IEF-myE0?ilb_H8o z@Ne|4e%;2eeRW?)>Ok+HKG1PJblgt5;Q%2|6Y6n}SHY*N;L|vWdx)urSB`rzwhI0r z#f0Dw#eg5bB>057JW-sA-#mNe^S)t*X?yDmb}-^st>EeeR&b426SH2lah*XBd$Eae zNYRFE9Iu+*S2ewlCf`rfDHlih7RIeJ!D(;;{B#r#L?%o{CUg(|glmU}f5gtAksp!x zj>|%}v2QWQDG@q-i@a^)C`9Pi+| XUjDOFXz#>F?ElLC9RIxexV`g#s*!`~ literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/domain/JwtCode.class b/build/classes/java/main/com/gdscys/cokepoke/auth/domain/JwtCode.class new file mode 100644 index 0000000000000000000000000000000000000000..a8c368374ca8d06e946a23e5c0f59f7a8147dc73 GIT binary patch literal 1171 zcmb7D?@!ZE6g_Y4)~ys6bE3of3x{k2sZ)>-n*=guf|)?95{dD{qpMr7YfaZ-{N|se zBN3y~@Yz4gcwe{3h?+o?_wKvzoqO)N_r3o7_4NmUWh^Hkqo`sI^9s@m?x+~Uf|&F; z##K7h1>$ZT6T+6_NC|sS!F`60L8-mi-gsJDr||XK=7v}(xt+E8^BNHqU!H?0cEFvk)nS;=7tRwW3ndKW zb=$QzyX`&8f5!J5+EGHnt=9|>^Ywjxz;%baP2C85+ijN5Q)H^{ncUgozAcys^s>v_ zlqK~yHAC`=6|}s@Hunh=SUy!1tJtm`tT0UeL(E2Dhd~ZnHUZU~<#yY-KKp3j@%)DE za)%*d*iDxQU7s>bc@Y(_n9hK?JS3$?9F;S7e}!&RHN38GT90heJ8f{o3!-ltE{MmJ z*06{rhS@W|4hjvuVM0tPBpJp|u0sfAh?jFFjU0W-o9l9q-|-q zXH|!HI>WX8xzW?C<<%0s?J@c>mA;iMitxLvu25o0&n!>DlxCiL_>p^`4qxml7M86=%W Jp7tUr{01%#0u}%O literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/domain/TokenInfo.class b/build/classes/java/main/com/gdscys/cokepoke/auth/domain/TokenInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..ac0d3faf1299dd282e04e2c7278e32d53811a8d3 GIT binary patch literal 761 zcma)3%TB^T6g>ll3RY0Ww+mefXzbF3#>AMInBXI7Ok56SgetVAEhhezCK3}Det;ik zJX26qSeQxY&fMPfxO3k>Uf%$0VL6Kw<}xraueSvgizb!?#--z^Fud?@l_yZB-pG4t zx1`sw&!fQg8ruR^psoWIHv2W{9oKWCU4dk&d?{e;`*kIduezQ(?zC$vxRA9LGli<} z$kwF{Tz&5+ji~8{0_#=BZ`+M}=sbkBL+v|$w(LYryY9E8>)El`p?B@mz*=e8)^J9f znLJWa)32Y(K(hiNm32IVoWmTHMp|gMWV9NMRGt>pq3^uNR%OgrqGltJy@TT1hGf$ wBd?n$?G(=$Z5>Q#)dHru|F-;$#3O$usPJXk9BH{Y5}f=C9vcasi6v$~0it`0=l}o! literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/dto/LoginRequest.class b/build/classes/java/main/com/gdscys/cokepoke/auth/dto/LoginRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..acc609abf3f8fe9f257815bbab08eceae47cec8b GIT binary patch literal 942 zcmZuvO>Yx15Pi;f(v-BJEfgq}Q={NgWC_yXW#! zdZCO4-l>gsG(^e-XKW)>%{ZTg&K2umon5r zn&Jh@4`n>{doKLeRU&I;ER*EQ#DTzGTJ`fh%qP2zrH*Xk9U1$YiY^G+S(I{iJzkVk zdZ8n2Ukc<~?Vdp4jR}-MqpKrzG#T|(d?wj}>(lr$?8#WW{VZ6pL(P`Ya8ytj{YsaPL;fD(=)#Lb;9_$^z}I$I0x3@@`-LL;qa)7Ek#@iu^V?4swEe zxhv6D(ugeuF!YR?rqZ-yy!z$zhGFqXX7C96U`x6J(&j ziVbEt@JHG_ZNq^(`!~pSp4}jSOVea65LO_hicMDCN-1}zuo)!@W}P^1s(+KXs%sDo jxT;&Y$8}NiH{`zXa9(mfQ}X>xaQ=UABNM!xmU!?7r~|>< literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.class b/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..35e34884f9b436e31b835be8c1e646440c85b858 GIT binary patch literal 6845 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.class b/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..a9684b045c1e378b84ebb4ff8311dde67b6b61c2 GIT binary patch literal 7391 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 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/QueryDslConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/QueryDslConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..3b0503899d2d4a26ff3573141cd01192bee699b9 GIT binary patch literal 910 zcmb7D+iuf95Iviu2@NhOgj=~+0+dvOMLd*;BBZp?hbllRC=!nwduukecg=bY&0m3p zR0$+LfR94Vnm|*@65_!#-q|x}&Wy)Det!K9;1O=M(Zos%R~E5=t8LV9t%d6?++bLe z+9@}EF0_cHWmp|f#0PQ6Gih^`JE=p-pUp!y7*_TQillO+ay3rmKx^ZKQ%2_ucPsLD zkGZytcJj~>N%OJN$~|GI_xdA-#+HdBLuaV8d{LxhY2OIqW;i!Ap-4u;Du12@8}6N= zVh@L*NqHRQ;WX!=IglAW^rH7wT-Z_)e^p33eVQj!nW9vb{5&+9MOP)3iT_W+x>!_D^!8g?2 nu6;rM2#rq^ui==ZJI4{sIR3~vUt%wm_F^g0|7(}%d>Qx!LuU48 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/SecurityConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/SecurityConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..419c442e2e0d21a2beca0ccb174421725c791be0 GIT binary patch literal 6918 zcmcIpiGLJl8GeQwlT3%^pkPr-DTWe4VUSkT1`!g%<))7~nG#tm9HJpGcTN85DYDWe_ z!z8luCmhSEu-kC54X4_WZ$m+Y16Rdq4J#4IPD!@T$ktgE=h|@}rsU5f8dl>iD&8uA z-zI+^Rq>dHO?bP8$8lc8J2bo#@6zxD-mT$1c&~~lRlH9@=gG6dn0rb%Bc6N4&InI| zk+R%^k z*QmT`jMO6#w0V$F#7^0cc&H?K88avH9O+KEmYF|ndbaGxgUvzC_7!YR+=}HolXkY` znSt#(MmpwUFdQYNm7^smunXd_?b}4$y3BM*En z%PKyg-<4gF8im&SU8ZPK~3SZap4SZ9@w{(0P-%;^h9pA(E zb^HJqrGuw*jlAh(jdUPgrUJ#_!Hyhy-p$H`tw%lI&N?NYt=o;<)=iX<@8*Tk*QerX z9Y4Y|DlREFy@2gige{%G(77T*h0mjQ$jk3yP;ou`ko!u1;5|T*b3Geu66s9+;Cr<%HC@KFQoQ70>DTDSoD4`5 zGq7?Dwxi;7N%+BV)K&3w9lyXYRs2fFukkw-&+GU-UQnFEK<}rU@{zpY4yPH=?Z|`y%Y7=SD&_Q|nf5Fo6s+ z6kqPqv%`4UWI7oI12@0Lir=mtvMz=w8SREm$IOZX!-9h2HxDeMjuofu(odvkqSo2O zj`@g8y2A?2pmeF^a>UKs77Mrb^w_Skq0~@1tzhT8@~hd=sKTT3;isnLxryDfFp4ES za}O8hmlQW(e2y9=(#LFt)!bU@GUN0|#L<~fVs$k?+RsXmIdd^!4m2vVHgiyF=847I zPL)K16s)=^i4W@Z{33N)C9q&Fn8un;C8weA*7qJuRWpw$-DRO!9g6akTi{dX!#qz> zQFsMA*p+7vtC`MJtY!swP>Bg#EtLilCys&+sKd-;q6~0AFaWZ2@_WPg&hfg#JChfI z5l#2kpoMAiT;+AL=_Xg|3R=Pm)`h*YI^4Se#ZM#G)L07ISZ^@>mo>?q`(;yPVi8rn znS#v1EIx^3&umm^5`#(GnqciGvwb%bSjiLBi>8VSM$8~Lt=X=?P0K4DYgG7Q$xE}G zEy0=(cs*E5hTJA5SPKSJ&}9aLZlT~h@(L`z2>G*uRf+WDDnfxXi)t3kNKYer-1dni zCCyRl-;^Qn(0O&G67`p+TWLsFhN}kER+0-+@fRI`#XofH!CnO?lki_0DJoc7bv?Fo zMqciw!uuuOZ27x5)hrzk=I^4sea})m* zSb}bOr@&UXyjI||1-wDV{hWD#z0K??d^TT!@o_{sGn!VS= zvk&sApdZ^~oGt80oYt!xz)YmIHAt07hmmCrTPi`!usf_09Xepz$3^i=D zmC+tHv@&ihLoZ`#*uDK}bd=FqMpxMFRG9_7<>~R3?iK0r*6x?2%eeD8 zR+jP7GF}!oR+VuVUwIa*$NQea-Tbb(jC;D*mhti<U`24NJ+{z0j~8%g~Ee z*noBD!$y7{q{I(V=Eo@QKf*=iO-I{%ec31<0UeD-zBWM$e~)zEe|QKiIz@N>MH-|32Ub!I@c;k- literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/SwaggerConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/SwaggerConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..a36522c083e7fc5801b69ed7dce4e8b5544f437b GIT binary patch literal 1318 zcmb7EO-~b16g{uBv`L#@rVkGeg_*=?fFy7ZziVF}k>D>EX&pqe9Gk50aukSwq%;Ba13#lkZ41{#N zWFU-`UW^(ziOV`mM=@rg3#k~!b)1OdijI>pWOU?FOhqxx(0NO`GPupqkse!N2rsFE zVCcX_#d9mO-FMRH(4N;*VCGMIm zRy{kA%H{bjyI2(7Qe$(0A*w3EU3`#b7)g)iq~d-Pz&B^OvVC5rK1x1cZlb6l@u=zs zvMg4lFR6n?*HuA-ni`nQDX+-=iYMLTnrD~Amhv`q1A%xRaC;xh?+Dw~;&w%5-8IE9 zdX%^%2-i3&G4iVFIpVHtnDN(XGVAuH%`ki1CYm0!j9D-dM?XXIUluT=4uveKaz(kq z4SW+kPw(7VV#oA)aqoS5QuJ@AaGd_Q$>LZzg6j$1t(~SN+4QWc}sm z`nykiZ{H_d4kVvs50=d9lE`#sDl=u`hF;K9_^;7m=+k!clI<4x^6I*90y3XSS_fpv zrVk&Nwh;@*8mh21f#Kc}l>0Uvk1-O+K#$0LI@dl&KG2hS6hT{sp}Qb_$CDNP-q5UW z3eTqu7wO%$=mP+BfF2q8={`U!PLWZJjPHPbr6hzwx_34<4Gd9kHUT(=1g#iO;|!s6 z@p6Lz8ctZfHT1P*1`#1xoW4>0Bs4(TAYJhTQbR4N5R!xp KkuiTnhk@U6VOYrk literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse$ValidationError.class b/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse$ValidationError.class new file mode 100644 index 0000000000000000000000000000000000000000..a162f005295ed9b84555538337cfe6aff155347c GIT binary patch literal 823 zcmbtSO>Yx15PjZ!Y_lvRP0L4t(jXxAmqA+uwhD{RZG6?zT|JO&@MWXyA5;%@B748gCR8nLu}R zEZ@nbkY%16I-|;bS0J2`wK6Axm7LuEg1O!wEaTSqbjHN?NR@POGMkclEvE$|-H}dZ zF_A|3{TWzyN6IpLA`6vCr*!$$7;OaN=VeJ|uaMRf6CRIJJxlV;rXOsQ>bErKmC*Z? z=3bOks#j#^y0mofTsNK|V&CImLo^?$Qn@Dr+x?3ZTto&FfzFuRkPRW;mS1|Il3z--rLTtroB8;)(!y0-5yZw$6cL`^~xiS0<@sW!FF~?>FZs9W5@q&OWSmhnR z_EK?hUff$MUc)*c;ZGiOu5oS;zo0hUIfWSBKSl6~p+7xrR&9C<>X`=?RYQ5>?P{z5 eSGjHl40jmlF#TH9=sIpxd4n-j#_QN%QS=id3bEw? literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse.class b/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..fab5101a0930d3e718f7ca10c33fedfe7e693775 GIT binary patch literal 2090 zcmb_c>vG#f7(FZ7Q7tQu>o_fUS}1MoBo(((z#*lCl!kHAOPDa>pJHzuHHzhtWS|2t z!dt)$nE;vL0eC2e^GQnV8vkep;>qsnyPogtk^cJok3Rw2#+Me#xK%^}AINfBmJdyQ zWO4sk9-0=G@rj8Q3q{;AamPXlpO$bJpP5)ynAvuHuj9sE&|3?`AXKo|dp#Yl`fe2I zNTH~|Z|lDJ73Nw`+;3gScY9rD?bO^bEF@_Kr6aJZ|(uiRZf;Vfvo{@|+p-@xDg_md-N~@mDre!J!cNGVli;zRHC(K!p=lmWK1eRfmVO6Yo!_mLMGPgY2i`1KKhsOzl+q`3I<_Y z-}4gnJR|CxLZCuvQ%9UwL>Ae28K2v@h^mcQ)NIV*lET6{-V~|uijB*7!Ni)4d-y_O zHo2)}(z{{kK9#pqp?Qv~7?i1Z+_1wIu;o`7!>Y&D_yl8Xa z`}{(UiYj$C>)$Aphe;{Y93_dX{6LoZ9nGUE{P0v2ijtiyaW`aYD7=`QUxG;s$>91b zEk5@=_gdo^s}YwzD{c+&BqmDk-u7k zLnS9cVk9TQlEWK3Pv;l_rh`Sma&O{V24=5Pb^{0%YHiR~)=K%Kr?g1MfcGZ-f|)La6tXwaY1pcva=q}+$Y zUFIkdgE2n*bkfL91F}YZ53o2PIX9kMo|wFZn-h}rU8tmIU{46J_uF+ABV literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/GlobalExceptionHandler.class b/build/classes/java/main/com/gdscys/cokepoke/exception/GlobalExceptionHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..4d25c3fcd35f0facc395d1d17970692afaacb4ed GIT binary patch literal 5450 zcmd5=SyvQC6#j~>VQ5itNkC%8Er19u5tqoK0}M+T2Au(nOG0{PikX(C8@qcDvK!65 z@5w`+@{m_U&M}gQoV+F{KOw&)=VZCvJsaAijOQ4YGu_qQw{CrPzwcJv^7ns!{sq8M zeC<>YH=3ld^qoZxKNE}ZG-20n8EY4kP)jz9En;4!0pSd zfTRzbkg_j|?dGEGX3huI^)T;)=C*VJ3j!`NRP`vDV)ZeUx3o?(R1D||&ag40Xgr*r zk8xvCj;ZvfKBUKGby_wQ`#JNn!b&M7!;w&2pO=yeGrnv}aea<2&`;t^alT+Fx+V>) zdQ4V>+2;{iOQ_uFX4sK(nt^zno8}bshHRO4ISvTgS%REL%G>b1;lEE*fxoJsfcr4;JyIVawr7UYfig0s5*GwMNEX7(T zkTto9Fzj0wA_gHdCPSC!NOyt9P;F#jFtpz#x3jR(I7_L8Pprz}nCOk1YGc++39%N{8xp31a zU?kHv8DZU;mQ^Le@NJ7Hzjg{c`tt7g|54z*FN241)V(K9JNJ~u8eIJ<-ZLjYyz9}jaFOBc}Asqm@D#6U0_4fKbCGr{oW z=;T?3ovxNfRh1`YH7ll^7#OZ*az&N3q*To8zNhtGH?8jsf??&sgDstz+Wx@cOeA=E zDj1z)Xmkk)sOpp!m($6VRX~PSIKSNc`yTym1<}us%JAI-fKz&Ww~dA;gOP9`G!qR* zrh}20U?egTVem!uv=Qe+RH;#A=Uwx4*aclFJN5w8aE4CVWCRk6N}P9#*nuVimWVVK z1zZ;KBsxVbVOhWnB3{HR0$vsI8mAEPIU?u_o0`+oxaff{AlnK1(D@i?_b*8qNU0&4HZ9#lA;=TS~A zprNhp2Fg}YeiId8=T_OiimEbPr;o0~ddIMlo|;fiNJMgNJKyg*$T%lg*o%G6fDL#8 z&15fP16t5ZL+vN~nldr~eFEC(SB3*e4Q%=T-#>3+Yo3#Ghvc0Q$n|0P z&`sm_(6GJK>Omj<1#rTdZWk))TOE$mmr5H*j;S%S>~$tSmSM_Az4{!cPLO3C%Kk>9 zfRh3Of00Foy&n3MXRqHQ7`^#m43Pgp1ijeXwu0?0dvq(p-Y~H@LhKC_dt*h}8!Cmp zVGqDVdB7v&YZOm=0e)l!kGg>ARs?XA08bL&C;>iG6!2InfI}XD$MS&3Nnl~3qzn^| Vp}jhsqUV?C=cD#n!tqj7&3{}aUMK(n literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/controller/MemberController.class b/build/classes/java/main/com/gdscys/cokepoke/member/controller/MemberController.class new file mode 100644 index 0000000000000000000000000000000000000000..4af0928b3c961f8000db5f9ae8b04cf8e2cec0d4 GIT binary patch literal 3335 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 NHRdZf%ocnb_#0Nti!J~F literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse$MemberResponseBuilder.class b/build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse$MemberResponseBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..39bd712bc1420bb11cbe108fecb481fb1088056a GIT binary patch literal 1639 zcmb_c>rN9v6#k~PY$+9LxrtZMB5k>>cmu8YgGPc$K_di1{59Q9U}3w{>`qB|6CXnp z3<)MafDdIn(_Nso8v==GX6MY=bG~!FZ%+63pVMCe7O|K@68HOH;DLTj7??~Uj)z%# z``Ey=fjmP()Vb|2WGnmpked#7cg;=Z+3s$MA=&hW=kmH>=zU|mwtCCZlP_#D#LKcq z-oc9Pij8KyD!eUTb;y&gNQ*n$+_UvLbjH=5?K6z53my4M_zmg$Vx?(2HQ_O&-@C5x z$`1E^L1FJImaLn*HQze&O-mk#1}(GR$~9|Bnw>DY&SQv5-S6bPITijBc4l3uJz4w6 zJyJ&rkJ?UDH6MnB{56Ycp_L3oXBejRh^t6#%BE+DRa=WZ)Jb_>#}mkg@YS01RT^pB zNTUy_H2RTZn7fvsI=#Srt%HxfIt3TL_ViGfH%wmqAd@aoAOQIqdR6kVrg{2s# zBd)Dmk-~Ng^Dr4+{i8+aF`R~cYs#0|?8MnbFEgSzR_6zzEM1GM&$ikl%U9f0beT(6 zYofa^15dO-&lqwS)NJ=qk8p6sLA_OODd`;!=|j!oRe|2f~-y$1a2@bH~}Vl_(i_$uQMLD5^Jx`E>8XiRBO(4x@=!vI+(?M!=%Ct%;nh+&YPy)9=F8M4zs0B&NKPK@A2C`u=nTJV5T zocV!R@f*3i(?`iiAz`|(}5IYA=2;ec=EobNbphd4__MdJ*dVVsgsxC~_=M2X`L<;8Fp_gZ@#L$qhf YV^D8dQegql@f72DME)dI$jSdbxH_*=-POYMS1@o2bYJa_E2Z0V0;<|1-HHBPp z-~MDFeT6yE0tl6u^|+u>cCA6VLNzC?R?g~Gtr9u|dU>7N)c^FwmZ z_8w73RgtQy!{==&CkWa{%nU2u9qVaqdkw#=UpOM#crWU*bSq>wbr80n1SZBYVPX_x zCURn?F_Xjt6E|>E(hp6{N|cjm6^|6whtj(Lz7&>*Lg6*&ZhWh>ugjrAeh|b-WfXS% zT(|!vP`o9&!pg9cuVIES{s{jPBK%T;Rzwl#6Nrg0;OownMX%`Ng(Il1t+J_Bkt9cO zp4My^-~ujkMdfjcpwhfcAEnPqb7A2Sk;393qFtCAx%ilN6lt=bqu2sD-EQkZN`=fQ zlv%kdguTo-Eu(`8hPZ;O9o8*+DV_X|SfPn{6A8Lx6R9TBU-%#b*}@d!Qbg`4WXL*3 zwh6AgTbjf*TxX4N#T6IA!%IqZ+1)gOY4(u82FNGyRE{jywFIJn-{yDf%);?K|o zLxPDvz#nCt?Hw#av`8KfD;&qAukF&TPirBuH1cs)qj z&m=L~i3e#s#3P2+XMv2Y6J2qb@cY#bVJU{U5tVD_}gkiarwU$%ZGP&lE z%&_s{{ejT>{zPc~*htK1`XJMoX5Z+-%etz8`&A7!=fZp1V~?_#=U5vHjj7mX^S!?Yf9? z|8&GZsBZCShlda)?l=`&iK2mNhS9c!qTa@E^JG8VqTgYP{(^DD^gNIj(<9N8G!;!r zgF(`uMPmc{cadh2WF!-XU9g{|#BhoBWYai=KGM^H11@8bPK@BMke3cFl8liw3S++z zEBqj}J-k0~3B&dM`h5&n$vdIZdg;&|joEQ(Or7fiW_J^_CmJ(;YD~@B0cKAVGZT%O zI5noO!2xEbiFpmz$)x$54S65@jpWC|4pF*;4q948zo5S|%|-GD}()>HV}%;RT)%D|xba(rpD=WB&o|Nze8G literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest.class b/build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..bf45e6a4b49b5aaab9513d4785d84ba9e5d6e846 GIT binary patch literal 1810 zcmbtUT~8B16usMS+ifX=fC5DX1f&$``hoHwF#&=Ju^<6#;^VeEwgdZ7cc%z%{v=Io zNHp;W_@j(xwhL`>eL$P+ojW`CoO|coyZ!m=+YcgIqvsh)Q!z~%>C!xs=CL$SQuH)K zNh+pjHAT-98ad=Or`b4QADYY;n@w(+%u^`4<2cOQvJBs6zCsCR8{AT8sB~8FOp&ETb8#ewh)?g(GsbHyge zPQbEOs=BsbGyUqhkC+qIz|)O0S=BPUHb+^~ZOfW~ob1hibl&K#L2LTVa}1j)q&0A% zkFIAbv|Mt%nqKD>c_ywhxn56!CFayb9ZBLgcjC}ildf?l-4TTbaGCeqv-huPlk42! z;w7T;i)Dq>E!RZeff9GvUeiXhBLf;qCEcoFl?{)}efUxpbq>*rky6-9!gW))dQZ<# z-0S?GefhUHvgW~EChD%a53y|~n1_l|mCM1{&M)4my1AZO!}&tVT8)XIffzwhMvPS- zBHmtgPVPD?4`H`;UHZ(S+w`jJ6%X|7$y=2C3av+$-Zh)uGj^G6*AUe@^HFo(9zK!X zpbdVOax{^pEcIt;NSa}3#;ISSji^EXTlXUM!F1k)11;<5_oi~ps)A(3Zi03vQjg(;u-o)fB!l)!+Vk07O#V}$dkh-i4J29oCF3H=rlcmjI-$V94<2-WLa%9g;~HE$SteLg_257 zN+4Nv8&0E0`P05r^4$fcKEubK9c=rOQ`pVZ!!Wv| z$5)EU&~7~jBlTE_1jny~hac0Y;HG~yV` zl1V;^LK5Q)8R^+o+vUzW_x*k8RT#3R9lpm+hr3mCLwUAaEi!bwV!zGAlI|zltF5*x z6SKB!t9gcKF2BVPTa*>S&|9)yvD&DWg}2Ge4r#I_X>n(Zd$#^=DPwBe_8ErW)hk?y z6`}3liq8$iPeEOJ+r=ZCP38928=VT2Sgy&)T( zC6;Vmf*T<;Oll`WS|!StrLPQJL9c-{x(yh5>p?fe)Wtd1Koity3sNdydAuIv@AoF~ zD1}J_CLS}aTpaj}V$yY|9ITahgryi}Ldx4oRi`GumBtfHF;v573(>VYD);Yf&9RB$ zwmH(Dor5&T@(cqtzAF}`YjO47R@-#)6?YZ2%A3n3(V15gPc`||45O!H+3ubmqoA9D z2$r~|q<4_SONK;A%H2kt;Y)iQEvKNc%iOIv!XFJRi=FqjY5sEDJgAEh^N(%zK`D#v z9o~XiZ%#o^Z_AxiK|gCzw4=%s~v1O6NXLe_-w(t; z6b>o)xw&ka%rq=JI*mNg|m>dEue&g^7n?!C9OKYxAu0pKy36^vl9j1rd2cFSzHOSn@(0gELx zN>~<{d%NemTDE1cBjZi^u`d(-qOSs9#sc=MFqH9X;3kPo1SX|d}DcAz*>!bDKOqrp$+BK}+u_!gvc+m&B$K~`=CXTNoCxaT%J!zcB z{4WuMbD}NvPULU6vD=ec#zax-9IN%ZvHTy1mNHNdFMwbtyHc;8Q@zeVW$0dI@*gTs zF|eAUeq}4_$DVwtjKnh;03Mj`0<)X_P^+HYR*9ng&%-d%u2xY<-Yc10_uW8oo|xkJ z(hI0l>K{)-+tuEVOw5d|anJ@+m)ID`gpEJnuRL-FF}<7tom%3iEy6N{AaIE%hgQ%Qnnw^{(zIHdWP(*pa<>NwsAGyJ zJ_Ag%sVNR}7g42ld0=?398w z|E{O7bE#*5=W&_-Se^+qTve_zW-v=g2FwkDG2h5{6y6=7_?bRmDEA^QQpR(*GR!{V z{S`Trnmd(R$>e=Cvp9dYcr>&4T4u3zw%E=nws1YgH&2QKG7Gdfxh#??phB;bdL;@{ F{tdZNGP3{x literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/repository/MemberRepository.class b/build/classes/java/main/com/gdscys/cokepoke/member/repository/MemberRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..8cfb9567a53d9d509f3c26bdeefe48fb75d3f540 GIT binary patch literal 1046 zcmb_bO-~y!5FLjkn?OmSd=&ZznyONL0uHGv5f!AOL_rDR?(7a*hh2MRd!e~-<4aaYM#SjQSOyi$QR)L3D&bOt49=d2 z__^cjn1_M&CzkvA5))cH#(0E=2bzEt?@puE7pmUK+a6jpit00{rL)gf{2{Hgv!UKE zZecoSTk8mgB2+I!J&cHmezT)Z$Ze8QaFLC8t<5D5gcE` zaP#8$&m{16PUzlfjJ|6v9%GycZb%U;oi-DGl8F8+dPdzjBMpb&zD|W)9_ZBgcq}6l zaVuB20RNP^k-=_1RZhluF0CZS50%nRWKJa0ef)3RmK=%NO%mh<8cDGKh|A_C{I?IX zd+{!Ex)|&&l>ITjstg#EXf4rOESDLSp+a$$q6#^Xwi>Mx)aht>{%GZ|qgSv>7)2J{ dZoumTXl-_Tohs#!Z(w5zy$M^iS1ErR;5QbuK@tD} literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.class b/build/classes/java/main/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..56be94e9382fe127f425b44e0000f375eea54b7d GIT binary patch literal 746 zcmbVK!A=4(5S=2hf~bgIj6Z-eu_xmJVxmzK4Fm(?!HX%oWhv~oo3^XjZ}5*i_yK;D zah6rt12O8MnM~hw`rey)dw+QafMeKkV9SAq1KR`|Vq|3t**AEvV69Iu{vomFn zj0Q~lbYQiRerrFwimeD}FS0^O7PJV|yWCEccf&Lbx#ijrDDkXIWgvXXY^*tf`(Ji! zcU%=x-!pDvsHX~d|;uZ^%uC-gdE{qOA040FB>hgauw#?^s}waYI>fZpuo zi7!4nOh-Uqw;xL@LVhQV7zO-PN@ZDUKRSJ|RD!`VaAlK-qg7ub(5Che*5=eMXM>Yo ztVCuYfunypSSCQAfM*4_u}~yXgc9au%t{0t467*s6@;pJXl()E+pMSt>+|9b*u+@I Hu62M9hl}U* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/service/CustomUserDetailsService.class b/build/classes/java/main/com/gdscys/cokepoke/member/service/CustomUserDetailsService.class new file mode 100644 index 0000000000000000000000000000000000000000..929ecdcb154463c7241bda91d97ad16ee18959d9 GIT binary patch literal 3931 zcmcInX;%|h7=A9>Kp0C*1s7bXMG2ubF0C6%6$G_Luz*-=tsRm9Mv|FyW&+aM+I`g%cq(;A9Ao<5UO=8nk9+6h zcJW~R^lg;g0+F<(rOrCK-8(1Wrk2qKhN6kf+Kd)YYvyEp#I+4`vb!^3*^_Z6D<=~+ zkIh>4bllOCIoojODAm^EIdVwpu4bg2xa4-s8&gb8pOqrxri5YYgE^`Hs5YMFN+e+= zwe*-~8*=V1*0@uKBXGEqS!6$BB=vY-&T*|wK-!46L7}yJhN?&zORNzH^k zN(!IW-6<<|Mw5oQy3M7!LxyR%Jp$d)N@`R>w{uLOHLYdFQ(F5{nA>*=T>OuKmTnug z+yN_RriykEfeO-h3QShCEM*Zr(~p^Zbbp-}ivqDqSe8npi$<)Rozw>m87Q0X({eT6z0vZqOGoRLJD1htg_u#X0j&xys(1#M7#6*jXxm?b1G~&lC`TKr(yHRrs8E>Rq+b0(f-@>M#ZamO~LCb-oTp* z-cs>4-cj)`-c#{DK47v`C`5P5*b;d|gq&S+VIJ-*00&;~gdwG~)X5ScIc0ku96IK{o?d!TFtQuXRd zoi5!K1g6+s7Og58J(43PhHjIx(X#u~jy^hNTeFKCO6@EjFM~2=M?1$t_!OTBY?R%i zjrE~zLKe)nS;L)b%lC?dZ9-seMw{0AEHkOO=eWa><7%eMo>1b_Qq6;{QlPn=L6-A7e19b(_85BU1n`p-wV#xbU>V)P@QD)Yka>&hLD=qO|T}YFB z)Q#vaX;&>qEf?r2*E(w38uPe0+IeAVvKLBRo<;s78P~g(hnGM{v8>o+U{Q~h5XP&S+o&@d-2nZDgg!1;Vm+%DHZa_F3l8HeQ$#y@j z$P@pHhV!ungn%1pT(rYu-I`~u`eLNUAQ$GC&&41Fl1tZ3sIhshn#X4&Y#Z)Pu)x1Ouc!{tx=fs7?R? literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/service/IMemberService.class b/build/classes/java/main/com/gdscys/cokepoke/member/service/IMemberService.class new file mode 100644 index 0000000000000000000000000000000000000000..28c18cfc89a614e331d3634c648fcd9eb68bb2ed GIT binary patch literal 717 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 Wvn9)C@HpRuXJLk{EmSdUR_|W|5dA&? literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.class b/build/classes/java/main/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.class new file mode 100644 index 0000000000000000000000000000000000000000..22ece6b80245f9306828c4f553abf49a65c69ef1 GIT binary patch literal 1784 zcmb7E%W@M(6g_P{28r=Q!Y1L3iNQ}i2_b=CV+>AFSy(_J@FKhRs3VUV%_uW1Ae&TW zmtTM%VB-xNr-}u|ns1^gPS1=b*@!Y(bl>hfx6e8E_U(E9@y%NR*YIl@qnI<(yoCj0 zFPAZbMGKCx-{ym%YH#D+0Nh*$sjGTG&tm zqw8Lv?sZz5DtaV0eR`_vp)36j8F^-(IrDnUiv@mLcf*#`Y{c$gvEznMRGY(jDt)gZ zwHF4C*J}H!r2?I9AILa<7DkPl)b5swH`2f`S`x6lbSrRYW_?>em5wiirgMLDTe*5E z@jUNGUJHX*N74&)7lkgZp6jLA-sq=`YO%u5DCMwQ&PHwlJtUzf@2g%b2ur9+LuB4mmiW zcs8cY@tat&aSJOJR&Crin>%J&1K-)*L8yIo`O3EnoW!X_!6lr=88V(_RGxeloa3rA!~pP&)s+VB-b!pDB;a{ZHWO_Qr=xQ=qz{{a^*6jw#RvLV8l K6sIwh*x64ue8R{8 literal 0 HcmV?d00001 diff --git a/build/classes/java/test/com/gdscys/cokepoke/CokePokeApplicationTests.class b/build/classes/java/test/com/gdscys/cokepoke/CokePokeApplicationTests.class new file mode 100644 index 0000000000000000000000000000000000000000..4ef02c73380ead1d854816c603359c74c45bf580 GIT binary patch literal 549 zcmb7AOG^VW5T0xwtL3q zB<(>E4+dr?^UZwUO!E2l{s91|u+@SZY=qDYVUs}fTqN?YHLwVha-l+G$#5`7`9Fq9RNIw@3YjdW$W zxRP$i-M>cmXY7#?IPqF#VWdj$4a>!oHglS2ZK*{$T-|R)N510{aX%%3Iy49z|L2he zx^5=Tm`dqQG85dw9t8OF?gVJ43HbeZqZkRs#^D=~S6>d%H$51_3f`kd1FS*|Gk`Xd h15ZA}%#nW)+dqh8NsO@3$*y4xVBPx;iZ9SEz&GMKgINFo literal 0 HcmV?d00001 diff --git a/build/classes/java/test/com/gdscys/cokepoke/controller/FriendshipControllerTest.class b/build/classes/java/test/com/gdscys/cokepoke/controller/FriendshipControllerTest.class new file mode 100644 index 0000000000000000000000000000000000000000..e195605c07a1a19b784703b5efa94815bc6cc583 GIT binary patch literal 5480 zcmb_g>wgsG6@Dfp%(59SE{Ij6T|p&4U?3nDv69UNx#WT*5D+a+cHiAhvOBZPC6`{Q zwXGG~S`|xMw6>*1s8$6Gq}cxYxqk`?|3ZI#-q{ViONL}YzU=Ir_dVx4&pGEk@7ewD z|Ni-J0NZgjiWTUK;OGJ@$1(Zwl8WOIyd1&aDC+P^J-&kz5xg3K5kY?hNx3JbLdb=5 z6d4Reu^47O25~~J4XMbg$VKrmtSD^crSN0~jtVyl4}KKG7+HW(jLC1`jpBRweiT2z z52N@IPSxYbcrA*b;C1=!r&9K_2!5_W&DqJJ&f%njjUBd=(cQdbTA8$CW4C$V5 zJ$*#<>#lHyv%=Fm3;TB|c=V8Od1g)=FBemZJ>h%yi0OzF%`VA_T)%J*iM;Kaa-+1Cv~zkUYfk_w5-|vgCgm58u`3%6l@4ArVZB<&S);H4;slK z*S7SO;Tip=mD0P*wo_d-QYlBcj8&{-&=@xKtYKyJ9#4j!%L`i>N6)alBSzL23g$m& zTBi5Bf_V*Vk0_{ZwNsQX?l3LU<;!^W8q9$-W+#p85yLU%dr?^H4VZMaGn91Fwmiqq zW`(1dn9_Su*vkSSo;p`}eqO<JkFY!i(e}}#$Ona@;td6l-^FCn^Xj`Sx0!A}Ym9ZVQYF6OLY$UQO`N;=B*5dE4>yKGPeJ^?sPePahGV zPmBKOPM(X+6y*)q#ym&P}dHVd+>2vX0XU3z{2+jo*;k15M%<=skPqpVQ{+d`w*Z`)pF1bc!u z(n5JLi;Z{5q8MdSxNI7FyZn}tA!n$=vn7Mh^UpeBk}7Mk;4rWut+py#lsv7<=}WgV@zBsQ|UG(3ZC3bt&Hzc9jMJ}_eBd@J5_ z(l;E@7~gMO8Oz>~@f+hk!uGR#*uFOqKfn`ZXlTL~4UO2KpkbCan6h(*X%$-_J3~;Q z%^3=_8>uD{{6fW>8cyS_;&M}IxmeLn#g#2HRtRAubOoEjAe7FzUW8F9BMraAuT=b6 z!`t|cMDdP_cQtGRPtVr5jCpohPdX${`YZqi+r!jkSxfUPQ;rM ziN^S0Hd&F1AK)g2Rl(8{tlKS=UAE#mL2Ff`pHn!1(<5N6Xjo(zRismO5D2iK(K73??-)o49nhK*qigDbo|Ud8*B10u(0&XDYLL*Zy=sNPWn zRl+|cTtDk2f*adqq!LxZRok@MsX83()>GR|pt$YOFJrEF_przWt;>6Vi1l@H5IqU^QxKbSJ-Qg{^oNyZENyIhv^n%v=e~0%Pm0qV@*rj>YE3)R=k= zkqIoQLEmk0G*%z0pDEU23u6n*#fxrW@iD0tQzx*b2IF|>Kd1`?3(Ex85SzeKIw*l& z&KQD|<0AyOk>J{~ga5MZEF&;hBrqM}ZwF+a=l*#CnRkLL04;R4>;@h_M$9$W@W?p6 z(LvFpvB&293oEYU@%7_ac^Tgv$G652zm6xyv1$UVYj7P;PT;8uRI3o7m)%&3X68D9 zHE3amo0-*C;%lR%JwUiT2zg5p;ZkOJcaXhiYS%L4iJ&f45@`!1t(3I6RNX_h7hLSc zKKa4hbrv#ewPc>2oy-A}=^&X-lIbF>4wC66nS%uR;{B63FoR6TEMyiwAToU6}5PYZfx~u{G6|*&LZkk&GajG|6O0Mv%+^$(STFc>iR& i?;umdRLkDd4yWqzDo)4nS`0%mydJ|DwdM^S z!*QI2r5;9fq~k~+6NkX4l8nVLuEUOF0+VrMky{4`uDZ*|aSmP_K4csLrs^?`LL4*r zp1S+KlKntkeyBmux#`K?skDaX9@iT){k&&8W22sx6Vt9YX-eTsb6Sj;zVN29LYlqB z^#?UP*&jI4&WSYYgx4?fu5YV_%39jZnPVA0J>#2ccapCrg;`u@dW#Fq-W8g(wt3XEg_H5e?R<(1 z?6lBuAktiUVaSy$&BH5oY0z*-CPZ5HTKT;2H0%m(jat4GULlt?C#>|O?>c72lGcdr zWX$7BmQ!7~G8s?!3{j$I!kV(otmTZEDXF5)*XuhNK502}(8>mcy7ooevE?BRYZ|u? zYN+jSGn8)Zu^rJDs4xv!481burmgIt<=N`FB&?O=HXZGWq?>jf>ABgg@XQm8CjFKk z2bggpsq=*l@*1{-ZtCCsOyO?D?QG|8>KfhtdcTZj3Rj|`@)eL z;$4Nb$cJ^I<3}2vTE$?=@3X7C?zH`U)|%;KVJdV}#rPQa-@SSN?VIdVNn{ziVCzk_jSk#l#tgK<%8McNq7HfM~%ij4* z*YDlBkevVU_T2f~^Y34oyZB!6{?+SqAHOsA_XR`Ad$-=2yZ8~qnQ{X!Ee_i%?G2Tw zYgSdIVP9kr)tz#5so2jM{ys6_Y18?Je>2*u_b*U}g!p57CZrC&W#kqjs72==h_^E-P;T;3d;T!B*X1J2w zyxio9olwWm4P3+}9hVIp#4mLG(!jg8V>!wT|Bycn?=~{MNwx_&~?+4E!F~bX+&^ zA#UjSgMmNdPX_*szZm!{t{M0U*EBpkJC&Czk0~A})9jZbJcHW& zqLqg;T0F!$sv0D`V)ZNx6s2Nn5A1A4cs#ahdH(bG@FNHfRmO39WFH7y$sYzt3DpOI>-3MMB&YL!c0J@r~LJswv6T26p6;1=j?tP(}ZUMkcpLRv6KOs$WC zDawY1b++FT_8QJW`>I8?3S(IdeN^TP`k#~eCfnazD0F1`;Uv2}&*h9u(es6Z`hpT( zD8g2Lfj02twhlGw$Oq2{KCR{NxAGm1;GkKf?n{R=cx6PmdZLIuw5 zxQ*J+PF#X0eH?8+faS4`pmy z=n*8(_+1uaKMK*h(*(KSScQLh;xvzS2X% z z>Z0NB1E?_0)lk{?U@AvRrJGcakxCD#bdyRiVfPW#@y}1?l?p0H7ODKVlojU-X5}F{ ze0DYB2e5%LKS|<)Bz}s-UnTKD5 + + + + +Test results - PokeControllerTest + + + + + +

+

PokeControllerTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
4.985s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestMethod nameDurationResult
포크하기try_poke_friend()1.313spassed
친구 아닌 사람 포크하기try_poke_stranger()2.372spassed
24시간 이내에는 한번만 포크 가능try_poke_twice_in_a_day()1.300spassed
+
+
+

Standard output

+ +
20:36:32.772 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
+20:36:32.777 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
+20:36:32.793 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.gdscys.cokepoke.controller.PokeControllerTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
+20:36:32.799 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.gdscys.cokepoke.controller.PokeControllerTest], using SpringBootContextLoader
+20:36:32.801 [Test worker] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: class path resource [com/gdscys/cokepoke/controller/PokeControllerTest-context.xml] does not exist
+20:36:32.801 [Test worker] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: class path resource [com/gdscys/cokepoke/controller/PokeControllerTestContext.groovy] does not exist
+20:36:32.802 [Test worker] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: no resource found for suffixes {-context.xml, Context.groovy}.
+20:36:32.802 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: PokeControllerTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
+20:36:32.832 [Test worker] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.gdscys.cokepoke.controller.PokeControllerTest]
+20:36:32.861 [Test worker] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [/Users/jinny/Downloads/coke-poke/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class]
+20:36:32.862 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.gdscys.cokepoke.CokePokeApplication for test class com.gdscys.cokepoke.controller.PokeControllerTest
+20:36:32.916 [Test worker] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.gdscys.cokepoke.controller.PokeControllerTest]: using defaults.
+20:36:32.917 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.event.ApplicationEventsTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener]
+20:36:32.926 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@304a9d7b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6bfdb014, org.springframework.test.context.event.ApplicationEventsTestExecutionListener@72889280, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@606fc505, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@4aa3d36, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2d140a7, org.springframework.test.context.transaction.TransactionalTestExecutionListener@347bdeef, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@2aa27288, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@7f34a967, org.springframework.test.context.event.EventPublishingTestExecutionListener@77e80a5e, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@1d8e2eea, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@240139e1, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@7ea4d397, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@49298ce7, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@253c1256, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@8dfe921, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@503fbbc6]
+20:36:32.928 [Test worker] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null].
+
+  .   ____          _            __ _ _
+ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
+( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
+ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
+  '  |____| .__|_| |_|_| |_\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+ :: Spring Boot ::               (v2.7.16)
+
+2023-10-11 20:36:33.119  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : Starting PokeControllerTest using Java 11.0.17 on ganghuijins-MacBook-Air.local with PID 31823 (started by jinny in /Users/jinny/Downloads/coke-poke)
+2023-10-11 20:36:33.120  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : No active profile set, falling back to 1 default profile: "default"
+2023-10-11 20:36:33.518  INFO 31823 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2023-10-11 20:36:33.549  INFO 31823 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 27 ms. Found 4 JPA repository interfaces.
+2023-10-11 20:36:33.848  INFO 31823 --- [    Test worker] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
+2023-10-11 20:36:33.872  INFO 31823 --- [    Test worker] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.15.Final
+2023-10-11 20:36:33.976  INFO 31823 --- [    Test worker] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2023-10-11 20:36:34.024  INFO 31823 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
+2023-10-11 20:36:34.094  INFO 31823 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
+2023-10-11 20:36:34.105  INFO 31823 --- [    Test worker] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
+2023-10-11 20:36:34.702  INFO 31823 --- [    Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2023-10-11 20:36:34.707  INFO 31823 --- [    Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2023-10-11 20:36:35.135  INFO 31823 --- [    Test worker] o.s.s.web.DefaultSecurityFilterChain     : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4c941d19, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5248c05a, org.springframework.security.web.context.SecurityContextPersistenceFilter@5f01361e, org.springframework.security.web.header.HeaderWriterFilter@1e2bc241, org.springframework.security.web.authentication.logout.LogoutFilter@33502cfe, com.gdscys.cokepoke.auth.jwt.JwtAuthFilter@151f1734, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5003c114, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e4bccc, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@601e7c97, org.springframework.security.web.session.SessionManagementFilter@112b3298, org.springframework.security.web.access.ExceptionTranslationFilter@4629dde5, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@40ef1934]
+2023-10-11 20:36:35.140  WARN 31823 --- [    Test worker] o.s.s.c.a.web.builders.WebSecurity       : You are asking Spring Security to ignore org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead.
+2023-10-11 20:36:35.140  INFO 31823 --- [    Test worker] o.s.s.web.DefaultSecurityFilterChain     : Will not secure org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a
+2023-10-11 20:36:35.288  WARN 31823 --- [    Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2023-10-11 20:36:35.496  INFO 31823 --- [    Test worker] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb'
+2023-10-11 20:36:36.402  INFO 31823 --- [    Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
+2023-10-11 20:36:36.402  INFO 31823 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
+2023-10-11 20:36:36.403  INFO 31823 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 1 ms
+2023-10-11 20:36:36.416  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : Started PokeControllerTest in 3.471 seconds (JVM running for 4.076)
+2023-10-11 20:36:36.438  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
+
+MockHttpServletRequest:
+      HTTP Method = POST
+      Request URI = /poke/
+       Parameters = {}
+          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
+             Body = {"receiverUsername":"test2"}
+    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
+
+Handler:
+             Type = com.gdscys.cokepoke.poke.controller.PokeController
+           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
+
+Async:
+    Async started = false
+     Async result = null
+
+Resolved Exception:
+             Type = java.util.NoSuchElementException
+
+ModelAndView:
+        View name = null
+             View = null
+            Model = null
+
+FlashMap:
+       Attributes = null
+
+MockHttpServletResponse:
+           Status = 404
+    Error message = null
+          Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
+     Content type = application/json
+             Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"FriendshipService.java","lineNumber":65,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"<generated>","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$FastClassBySpringCGLIB$$d8da9ae3","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"MethodProxy.java","lineNumber":218,"className":"org.springframework.cglib.proxy.MethodProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"CglibAopProxy.java","lineNumber":386,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"CglibAopProxy.java","lineNumber":85,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"CglibAopProxy.java","lineNumber":703,"className":"org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"<generated>","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$EnhancerBySpringCGLIB$$b3c423d5","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":44,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_stranger","fileName":"PokeControllerTest.java","lineNumber":74,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":"No friendship found between test2 and test2","suppressed":[],"localizedMessage":"No friendship found between test2 and test2"},"message":"No friendship found between test2 and test2","status":"NOT_FOUND","errors":null}
+    Forwarded URL = null
+   Redirected URL = null
+          Cookies = []
+2023-10-11 20:36:38.796  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
+2023-10-11 20:36:38.807  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
+
+MockHttpServletRequest:
+      HTTP Method = POST
+      Request URI = /poke/
+       Parameters = {}
+          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
+             Body = {"receiverUsername":"test3"}
+    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
+
+Handler:
+             Type = com.gdscys.cokepoke.poke.controller.PokeController
+           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
+
+Async:
+    Async started = false
+     Async result = null
+
+Resolved Exception:
+             Type = null
+
+ModelAndView:
+        View name = null
+             View = null
+            Model = null
+
+FlashMap:
+       Attributes = null
+
+MockHttpServletResponse:
+           Status = 201
+    Error message = null
+          Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
+     Content type = text/plain;charset=UTF-8
+             Body = Poked test3
+    Forwarded URL = null
+   Redirected URL = null
+          Cookies = []
+
+MockHttpServletRequest:
+      HTTP Method = POST
+      Request URI = /poke/
+       Parameters = {}
+          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
+             Body = {"receiverUsername":"test3"}
+    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
+
+Handler:
+             Type = com.gdscys.cokepoke.poke.controller.PokeController
+           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
+
+Async:
+    Async started = false
+     Async result = null
+
+Resolved Exception:
+             Type = java.lang.NullPointerException
+
+ModelAndView:
+        View name = null
+             View = null
+            Model = null
+
+FlashMap:
+       Attributes = null
+
+MockHttpServletResponse:
+           Status = 500
+    Error message = null
+          Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
+     Content type = application/json
+             Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$checkOncePerDay$1","fileName":"PokeService.java","lineNumber":59,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"accept","fileName":"ReferencePipeline.java","lineNumber":176,"className":"java.util.stream.ReferencePipeline$2$1","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Iterator.java","lineNumber":133,"className":"java.util.Iterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Spliterators.java","lineNumber":1801,"className":"java.util.Spliterators$IteratorSpliterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"copyInto","fileName":"AbstractPipeline.java","lineNumber":484,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"wrapAndCopyInto","fileName":"AbstractPipeline.java","lineNumber":474,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluateSequential","fileName":"ReduceOps.java","lineNumber":913,"className":"java.util.stream.ReduceOps$ReduceOp","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluate","fileName":"AbstractPipeline.java","lineNumber":234,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"collect","fileName":"ReferencePipeline.java","lineNumber":578,"className":"java.util.stream.ReferencePipeline","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"checkOncePerDay","fileName":"PokeService.java","lineNumber":62,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":45,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_twice_in_a_day","fileName":"PokeControllerTest.java","lineNumber":91,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":null,"suppressed":[],"localizedMessage":null},"message":null,"status":"INTERNAL_SERVER_ERROR","errors":null}
+    Forwarded URL = null
+   Redirected URL = null
+          Cookies = []
+2023-10-11 20:36:40.103  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
+2023-10-11 20:36:40.106  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
+
+MockHttpServletRequest:
+      HTTP Method = POST
+      Request URI = /poke/
+       Parameters = {}
+          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
+             Body = {"receiverUsername":"test3"}
+    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
+
+Handler:
+             Type = com.gdscys.cokepoke.poke.controller.PokeController
+           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
+
+Async:
+    Async started = false
+     Async result = null
+
+Resolved Exception:
+             Type = null
+
+ModelAndView:
+        View name = null
+             View = null
+            Model = null
+
+FlashMap:
+       Attributes = null
+
+MockHttpServletResponse:
+           Status = 201
+    Error message = null
+          Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
+     Content type = text/plain;charset=UTF-8
+             Body = Poked test3
+    Forwarded URL = null
+   Redirected URL = null
+          Cookies = []
+2023-10-11 20:36:41.417  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
+
+
+
+
+ +
+ + diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html new file mode 100644 index 0000000..6323008 --- /dev/null +++ b/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
4.985s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+com.gdscys.cokepoke.controller +3004.985s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+com.gdscys.cokepoke.controller.PokeControllerTest +3004.985s100%
+
+
+ +
+ + diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html b/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html new file mode 100644 index 0000000..391729b --- /dev/null +++ b/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package com.gdscys.cokepoke.controller + + + + + +
+

Package com.gdscys.cokepoke.controller

+ +
+ + + + + +
+
+ + + + + + + +
+
+
3
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
4.985s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+PokeControllerTest +3004.985s100%
+
+
+ +
+ + diff --git a/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml b/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml new file mode 100644 index 0000000..4de245d --- /dev/null +++ b/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml @@ -0,0 +1,208 @@ + + + + + + + true]], class annotated with @DirtiesContext [false] with mode [null]. + + . ____ _ __ _ _ + /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ + \\/ ___)| |_)| | | | | || (_| | ) ) ) ) + ' |____| .__|_| |_|_| |_\__, | / / / / + =========|_|==============|___/=/_/_/_/ + :: Spring Boot :: (v2.7.16) + +2023-10-11 20:36:33.119 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : Starting PokeControllerTest using Java 11.0.17 on ganghuijins-MacBook-Air.local with PID 31823 (started by jinny in /Users/jinny/Downloads/coke-poke) +2023-10-11 20:36:33.120 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : No active profile set, falling back to 1 default profile: "default" +2023-10-11 20:36:33.518 INFO 31823 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2023-10-11 20:36:33.549 INFO 31823 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 27 ms. Found 4 JPA repository interfaces. +2023-10-11 20:36:33.848 INFO 31823 --- [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2023-10-11 20:36:33.872 INFO 31823 --- [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.15.Final +2023-10-11 20:36:33.976 INFO 31823 --- [ Test worker] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} +2023-10-11 20:36:34.024 INFO 31823 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2023-10-11 20:36:34.094 INFO 31823 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2023-10-11 20:36:34.105 INFO 31823 --- [ Test worker] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect +2023-10-11 20:36:34.702 INFO 31823 --- [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2023-10-11 20:36:34.707 INFO 31823 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2023-10-11 20:36:35.135 INFO 31823 --- [ Test worker] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4c941d19, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5248c05a, org.springframework.security.web.context.SecurityContextPersistenceFilter@5f01361e, org.springframework.security.web.header.HeaderWriterFilter@1e2bc241, org.springframework.security.web.authentication.logout.LogoutFilter@33502cfe, com.gdscys.cokepoke.auth.jwt.JwtAuthFilter@151f1734, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5003c114, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e4bccc, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@601e7c97, org.springframework.security.web.session.SessionManagementFilter@112b3298, org.springframework.security.web.access.ExceptionTranslationFilter@4629dde5, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@40ef1934] +2023-10-11 20:36:35.140 WARN 31823 --- [ Test worker] o.s.s.c.a.web.builders.WebSecurity : You are asking Spring Security to ignore org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. +2023-10-11 20:36:35.140 INFO 31823 --- [ Test worker] o.s.s.web.DefaultSecurityFilterChain : Will not secure org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a +2023-10-11 20:36:35.288 WARN 31823 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2023-10-11 20:36:35.496 INFO 31823 --- [ Test worker] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb' +2023-10-11 20:36:36.402 INFO 31823 --- [ Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' +2023-10-11 20:36:36.402 INFO 31823 --- [ Test worker] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' +2023-10-11 20:36:36.403 INFO 31823 --- [ Test worker] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms +2023-10-11 20:36:36.416 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : Started PokeControllerTest in 3.471 seconds (JVM running for 4.076) +2023-10-11 20:36:36.438 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] + +MockHttpServletRequest: + HTTP Method = POST + Request URI = /poke/ + Parameters = {} + Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] + Body = {"receiverUsername":"test2"} + Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} + +Handler: + Type = com.gdscys.cokepoke.poke.controller.PokeController + Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) + +Async: + Async started = false + Async result = null + +Resolved Exception: + Type = java.util.NoSuchElementException + +ModelAndView: + View name = null + View = null + Model = null + +FlashMap: + Attributes = null + +MockHttpServletResponse: + Status = 404 + Error message = null + Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] + Content type = application/json + Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"FriendshipService.java","lineNumber":65,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$FastClassBySpringCGLIB$$d8da9ae3","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"MethodProxy.java","lineNumber":218,"className":"org.springframework.cglib.proxy.MethodProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"CglibAopProxy.java","lineNumber":386,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"CglibAopProxy.java","lineNumber":85,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"CglibAopProxy.java","lineNumber":703,"className":"org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$EnhancerBySpringCGLIB$$b3c423d5","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":44,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_stranger","fileName":"PokeControllerTest.java","lineNumber":74,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":"No friendship found between test2 and test2","suppressed":[],"localizedMessage":"No friendship found between test2 and test2"},"message":"No friendship found between test2 and test2","status":"NOT_FOUND","errors":null} + Forwarded URL = null + Redirected URL = null + Cookies = [] +2023-10-11 20:36:38.796 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] +2023-10-11 20:36:38.807 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] + +MockHttpServletRequest: + HTTP Method = POST + Request URI = /poke/ + Parameters = {} + Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] + Body = {"receiverUsername":"test3"} + Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} + +Handler: + Type = com.gdscys.cokepoke.poke.controller.PokeController + Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) + +Async: + Async started = false + Async result = null + +Resolved Exception: + Type = null + +ModelAndView: + View name = null + View = null + Model = null + +FlashMap: + Attributes = null + +MockHttpServletResponse: + Status = 201 + Error message = null + Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] + Content type = text/plain;charset=UTF-8 + Body = Poked test3 + Forwarded URL = null + Redirected URL = null + Cookies = [] + +MockHttpServletRequest: + HTTP Method = POST + Request URI = /poke/ + Parameters = {} + Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] + Body = {"receiverUsername":"test3"} + Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} + +Handler: + Type = com.gdscys.cokepoke.poke.controller.PokeController + Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) + +Async: + Async started = false + Async result = null + +Resolved Exception: + Type = java.lang.NullPointerException + +ModelAndView: + View name = null + View = null + Model = null + +FlashMap: + Attributes = null + +MockHttpServletResponse: + Status = 500 + Error message = null + Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] + Content type = application/json + Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$checkOncePerDay$1","fileName":"PokeService.java","lineNumber":59,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"accept","fileName":"ReferencePipeline.java","lineNumber":176,"className":"java.util.stream.ReferencePipeline$2$1","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Iterator.java","lineNumber":133,"className":"java.util.Iterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Spliterators.java","lineNumber":1801,"className":"java.util.Spliterators$IteratorSpliterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"copyInto","fileName":"AbstractPipeline.java","lineNumber":484,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"wrapAndCopyInto","fileName":"AbstractPipeline.java","lineNumber":474,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluateSequential","fileName":"ReduceOps.java","lineNumber":913,"className":"java.util.stream.ReduceOps$ReduceOp","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluate","fileName":"AbstractPipeline.java","lineNumber":234,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"collect","fileName":"ReferencePipeline.java","lineNumber":578,"className":"java.util.stream.ReferencePipeline","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"checkOncePerDay","fileName":"PokeService.java","lineNumber":62,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":45,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_twice_in_a_day","fileName":"PokeControllerTest.java","lineNumber":91,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":null,"suppressed":[],"localizedMessage":null},"message":null,"status":"INTERNAL_SERVER_ERROR","errors":null} + Forwarded URL = null + Redirected URL = null + Cookies = [] +2023-10-11 20:36:40.103 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] +2023-10-11 20:36:40.106 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] + +MockHttpServletRequest: + HTTP Method = POST + Request URI = /poke/ + Parameters = {} + Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] + Body = {"receiverUsername":"test3"} + Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} + +Handler: + Type = com.gdscys.cokepoke.poke.controller.PokeController + Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) + +Async: + Async started = false + Async result = null + +Resolved Exception: + Type = null + +ModelAndView: + View name = null + View = null + Model = null + +FlashMap: + Attributes = null + +MockHttpServletResponse: + Status = 201 + Error message = null + Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] + Content type = text/plain;charset=UTF-8 + Body = Poked test3 + Forwarded URL = null + Redirected URL = null + Cookies = [] +2023-10-11 20:36:41.417 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] +]]> + + diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000000000000000000000000000000000..ad76afb08d39beb1ebfa5cfcc0795bab6d59f118 GIT binary patch literal 122439 zcmeHw%WoUmn%}tZ0F${$W;MZd&uj|18rYo?ODvLlv7-yhl5DGCOM)bK_l2(D6sr!! zvPc%Eswhj>w}Wgli>&g%0NLcVOJ)^hvI`On0t5(oj8_7!1Nu~F-N^%0_3xwK6>;U z|NM&tf@>cH!3ckepEmLdZ;%I68CikrX{WcIqArc9eq)&v@ka=1M)FEjKCBSm~`nl~}*FNOyf(`LM z7c|f9^_Zt0;@<>D{F8v5O%$LuqI+1r11pk(I_M#GZX zXHL)sIa-oN_|b9BM;?}tJJ1FoQuxgahk2%Fb+19X(ZId~0xn5`jj19hAr>mFqJI;U zV!di)NKsNvgrdFGCS_rT(jW!_33ePChz6R?0%p+TGnAUSGL5Wg&aZq3q$8P}r99vR9#RNd;c@duN*MGM{6>t{gugvi;jR**pc=qvu_go~mb7@~`lC+Axq{rhPs-Ag zmL}1UI!V)iy+fi5u+sQy!az_oayYRT!)?5fLRLyS@vR#e+{LoYFR^%4*$g9jOfv`9 z8tjX}v6ev8K?S<}5_W|6N5>hMJ^TtuV76H0n3^fj#V7BeX1OYjwJWFXKT6QHo)x%h z6`U0~m+a7UJ5G=Jd1_*gHm0OKmeV2)FOcJA1MTaNIW-gC2iHSZ!aUka4Sj}DBoQ=H zZc}coBy)c+L6_C?iXRff^HuvZSDaE~o~3QV^#ImZU)w%z{F9k4+Fl3hA54atPG z@o%T&5EH}aU{T2j1!J2U5m-B2e(f{QUw-Qh2G`3w?z=$`2Byzdc!lhT<@U(w*~?N+ zm&t@$?wig4PvrIeHeMhp+!_vHu<<3L^EbIk@PA`-d3`l2CWU(GW+uTizP-0nyK*eG zM2s9i6_d{{OVw+{twQ^Xq~L$VXm1#+rMLf^;oTyeZ1;*;BeH#7Vk>0>@K?6kK zHa*x_e9TecLP)vvGaUjD*skU4NBCt2zf3XJBAD-38_V2*VCk=1>w+L3Gw;%|82w-# zK49Eg$O)#JB;&?`wz}*wG0>|^>kzJWa4_gy9}J$EPH*I~JHjU%=X=)P!5+!HyMaq! zK^OREF}*MZ(J3O=jYjH&@H+kF1TNAs=N$2L8ZimL|HzUg*&yt|vni&N0uipW z9mfl>Nab31%3w3GSFX)&JU4bpBAeK(cIkr~gNx?LhHQW>*t*^uyoEOgMSQoY-xL}= z$AJ%hf(hv-@$Y8urU2jCZA(A?l?N8sv2&r!%J(X)@pUNW35zICP7T^Xt9mAQ*z<88m3vd>#OQ53QPQG^*xW z38>R8#8$nr*0vezlz?1jMYd|DStIVL;f*&)${IVZwN4$9y;_DG<=1~}ZH=v0%@sJT zs^IPTsh6;&T86#OYK)m`__0u@MbN{NpKMgMYK^K<-(bdcz;A9{wbq!~ucBMs1~F>5jqZ#)emG-R`iB+C-+M)Z7HS zskKtAciL@hmG5VN`PUQs*?MUQQK_fG_;A`*QtB%N3WN=nNFgA$D}oQ&sZ0~mtJ30X zZ7^%4Zt%yqdCF;1%g3CS`1c}SdiH07bj|n|~|KsDODCR}~7XGoy5_ieugu|)B58ta zF}|%vyWTOY?fP^hB(-Lw#B#txR1?G1s_m6d%|t-HJHj-e)8ZJ}1uj1C)%oDd>=c7;2s}&$f(>4WqMGWW2{(KV|fgDnQgJH*#wt z62v_j5F-*}i6B_iANF{DgC|20y0G1-w%e-(9zZ-bOX&5?&bQ^A`>lz#ocdh|!0zDE z@!UZlVWQUR#`@~|N)3DuSNc=aXOyI&ecAUcktYFe*l5VM5EGIqdpuH3T;iQu5>@~J zz#$TPh~0J83h%lG%SgZV8BV&Oi zUf4)7Q59tf)5fQE+A(`RI}_={J_2^qB;afcKjfdpuk@9M|LEDT zwdG&_Qd_2nALAqb`I9$a^Iye3f2r~R=;6QdM0=ur{Y!%TYYmUnU%wW={t_Vm7Jf}U z{YTm_@hL(68V~Wm@Bshs*V+^QqV~1;j|11V#~Pl)pI>V_{-P)3-xzWUZ!U}f#Jo4d zKX@qoRs19v%bUw@_^|Fi{qjVkMaoy_zf;e$QAVbwnB_BPfS@m!E=8VCFq#}H7G&0&=2%

fwxdB*cHjt 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�a+m3!>3ePYwjVpc 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 literal 0 HcmV?d00001 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..4a939988318040f5e3531abe7dcc791dba20d149 GIT binary patch literal 64500 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 S5EhqewK|)ja-c)NzyAkIH>rRC literal 0 HcmV?d00001 diff --git a/git.ignore b/git.ignore new file mode 100644 index 0000000..27a29bc --- /dev/null +++ b/git.ignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ +settings.gradle +/build/** +/.gradle/** +gradlew +gradlew.bat + + + + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..033e24c4cdf41af1ab109bc7f253b2b887023340 GIT binary patch literal 63375 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≫L+crb^Bz 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/java/com/gdscys/cokepoke/CokePokeApplication.java b/src/main/java/com/gdscys/cokepoke/CokePokeApplication.java new file mode 100644 index 0000000..ae07130 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/CokePokeApplication.java @@ -0,0 +1,13 @@ +package com.gdscys.cokepoke; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CokePokeApplication { + + public static void main(String[] args) { + SpringApplication.run(CokePokeApplication.class, args); + } + +} \ No newline at end of file From 41d775c8bb92a59043214db7abd30e32f159573e Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:16:00 +0900 Subject: [PATCH 33/60] feat: friendship --- .../cokepoke/member/domain/Friendship.java | 37 +++++++++++++++++++ .../gdscys/cokepoke/member/domain/Member.java | 3 ++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java new file mode 100644 index 0000000..b55ec67 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java @@ -0,0 +1,37 @@ +package com.gdscys.cokepoke.member.domain; + +import lombok.Getter; + +import javax.persistence.*; + +@Entity(name = "Friends") +@Getter +@SequenceGenerator(name = "FRIENDS_SEQ_GEN", sequenceName = "FRIENDS_SEQ", allocationSize = 1) +public class Friendship { + + @Id @GeneratedValue(generator = "FRIENDS_SEQ_GEN") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "id") + private Member requestMember; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "id") + private Member recipientMember; + + @Column(name = "is_accepted", columnDefinition = "boolean default false") + private boolean isAccepted; + + protected Friendship() {} + + public Friendship(Member requestMember, Member recipientMember) { + this.requestMember = requestMember; + this.recipientMember = recipientMember; + } + + public void accept() { + this.isAccepted = true; + } + +} diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index d9f8df0..4acfc87 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -40,6 +40,9 @@ public class Member implements UserDetails { @Column(name = "password_hash", nullable = false) private String passwordHash; + @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) + private Set friendships = new HashSet<>(); + @CreationTimestamp private LocalDateTime createdAt; From e102f1e04a9b5b650f9fe07f7a5c868a6e29f345 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:19:41 +0900 Subject: [PATCH 34/60] refactor --- .../cokepoke/{member => friendship}/domain/Friendship.java | 3 ++- .../cokepoke/friendship/repository/FriendshipRepository.java | 2 ++ src/main/java/com/gdscys/cokepoke/member/domain/Member.java | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) rename src/main/java/com/gdscys/cokepoke/{member => friendship}/domain/Friendship.java (90%) create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java similarity index 90% rename from src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java rename to src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java index b55ec67..abc3e65 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Friendship.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java @@ -1,5 +1,6 @@ -package com.gdscys.cokepoke.member.domain; +package com.gdscys.cokepoke.friendship.domain; +import com.gdscys.cokepoke.member.domain.Member; import lombok.Getter; import javax.persistence.*; diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java new file mode 100644 index 0000000..59c79f4 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.repository;public interface FriendshipRepository { +} diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 4acfc87..e968760 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -1,5 +1,6 @@ package com.gdscys.cokepoke.member.domain; +import com.gdscys.cokepoke.friendship.domain.Friendship; import com.gdscys.cokepoke.validation.declaration.ValidEmail; import javax.persistence.*; import lombok.Getter; From 0650ab431599fa79551abba70bd7fe3407c3ae56 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:19:48 +0900 Subject: [PATCH 35/60] feat: friendship repository --- .../repository/FriendshipRepository.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java index 59c79f4..143e2ad 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java @@ -1,2 +1,19 @@ -package com.gdscys.cokepoke.friendship.repository;public interface FriendshipRepository { +package com.gdscys.cokepoke.friendship.repository; + +import com.gdscys.cokepoke.friendship.domain.Friendship; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface FriendshipRepository extends JpaRepository { + + Page findAllByRequestMember(Long requestMember, Pageable pageable); + Page findAllByRecipientMember(Long recipientMember, Pageable pageable); + Optional findByRequestMemberAndRecipientMember(Long requestMember, Long recipientMember); + Optional findByRequestMemberOrRecipientMemberAndAccepted(Long requestMember, Long recipientMember, boolean accepted); + } From 6a283db5ac97d64c172c7a650ab1f19ff3e3e3e0 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:30:45 +0900 Subject: [PATCH 36/60] fix: friendship repository --- .../friendship/repository/FriendshipRepository.java | 10 ++++++---- .../cokepoke/friendship/service/FriendshipService.java | 2 ++ .../friendship/service/IFriendshipService.java | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java index 143e2ad..16a24b3 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java @@ -1,6 +1,7 @@ package com.gdscys.cokepoke.friendship.repository; import com.gdscys.cokepoke.friendship.domain.Friendship; +import com.gdscys.cokepoke.member.domain.Member; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -11,9 +12,10 @@ @Repository public interface FriendshipRepository extends JpaRepository { - Page findAllByRequestMember(Long requestMember, Pageable pageable); - Page findAllByRecipientMember(Long recipientMember, Pageable pageable); - Optional findByRequestMemberAndRecipientMember(Long requestMember, Long recipientMember); - Optional findByRequestMemberOrRecipientMemberAndAccepted(Long requestMember, Long recipientMember, boolean accepted); + Page findAllByRequestMember(Member requestMember, Pageable pageable); + Page findAllByRecipientMember(Member recipientMember, Pageable pageable); + Page findAllByRequestMemberOrRecipientMember(Member member); + Optional findByRequestMemberAndRecipientMember(Member requestMember, Member recipientMember); + Optional findByRequestMemberOrRecipientMemberAndAccepted(Member requestMember, Member recipientMember, boolean accepted); } diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java new file mode 100644 index 0000000..fcfc1a5 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.service;public class FriendshipService { +} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java new file mode 100644 index 0000000..518d480 --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.service;public interface IFriendshipService { +} From eda53db319e59d653e7c972fd14035684e2e53f8 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:30:59 +0900 Subject: [PATCH 37/60] feat: friendship service --- .../cokepoke/friendship/service/IFriendshipService.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java index 518d480..35419cf 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java @@ -1,2 +1,9 @@ -package com.gdscys.cokepoke.friendship.service;public interface IFriendshipService { +package com.gdscys.cokepoke.friendship.service; + +import com.gdscys.cokepoke.member.domain.Member; + +public interface IFriendshipService { + + void createFriendship(Member requestMember, Member recipientMember); + void deleteFriendship(Member requestMember, Member recipientMember); } From f1a2c3bc49ab093f90c7d4e82d937663d5217ca2 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:31:05 +0900 Subject: [PATCH 38/60] feat: friendship service --- .../friendship/service/FriendshipService.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java index fcfc1a5..5f5401c 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -1,2 +1,26 @@ -package com.gdscys.cokepoke.friendship.service;public class FriendshipService { +package com.gdscys.cokepoke.friendship.service; + +import com.gdscys.cokepoke.friendship.domain.Friendship; +import com.gdscys.cokepoke.friendship.repository.FriendshipRepository; +import com.gdscys.cokepoke.member.domain.Member; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class FriendshipService implements IFriendshipService { + private final FriendshipRepository friendshipRepository; + + @Override + public void createFriendship(Member requestMember, Member recipientMember) { + Friendship friendship = new Friendship(requestMember, recipientMember); + friendshipRepository.save(friendship); + } + + @Override + public void deleteFriendship(Member requestMember, Member recipientMember) { + Friendship friendship = friendshipRepository.findByRequestMemberAndRecipientMember(requestMember, recipientMember) + .orElseThrow(() -> new IllegalArgumentException("No friendship found between: " + requestMember.getUsername() + " and " + recipientMember.getUsername() + ".")); + friendshipRepository.delete(friendship); + } } From f8e1bf7a12be241d627a543c8da0132f63f1e18e Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:39:40 +0900 Subject: [PATCH 39/60] fix: entity name --- .../cokepoke/friendship/controller/FriendshipController.java | 2 ++ .../java/com/gdscys/cokepoke/friendship/domain/Friendship.java | 2 +- .../com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java | 2 ++ .../com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java | 2 ++ 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java create mode 100644 src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java diff --git a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java new file mode 100644 index 0000000..7cc71ae --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.controller;public class FriendshipController { +} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java index abc3e65..58e061f 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java @@ -5,7 +5,7 @@ import javax.persistence.*; -@Entity(name = "Friends") +@Entity(name = "Friendship") @Getter @SequenceGenerator(name = "FRIENDS_SEQ_GEN", sequenceName = "FRIENDS_SEQ", allocationSize = 1) public class Friendship { diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java new file mode 100644 index 0000000..d92ee2d --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.dto;public class FriendshipRequest { +} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java new file mode 100644 index 0000000..20db11a --- /dev/null +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java @@ -0,0 +1,2 @@ +package com.gdscys.cokepoke.friendship.dto;public class FriendshipResponse { +} From bcba2789db4bd870261db3ca22697e43f389d689 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:39:47 +0900 Subject: [PATCH 40/60] feat: friendship request --- .../cokepoke/friendship/dto/FriendshipRequest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java index d92ee2d..e8e134d 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java @@ -1,2 +1,13 @@ -package com.gdscys.cokepoke.friendship.dto;public class FriendshipRequest { +package com.gdscys.cokepoke.friendship.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class FriendshipRequest { + private String requestUsername; + private String recipientUsername; + + protected FriendshipRequest() {} } From 9ad217709eba64953338d7293696fc9a1dfe4198 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:39:57 +0900 Subject: [PATCH 41/60] feat: friendship response --- .../friendship/dto/FriendshipResponse.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java index 20db11a..8a55974 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java @@ -1,2 +1,14 @@ -package com.gdscys.cokepoke.friendship.dto;public class FriendshipResponse { +package com.gdscys.cokepoke.friendship.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class FriendshipResponse { + private String username1; + private String username2; + + protected FriendshipResponse() {} + } From 0b96a471e47f9546e0f50cb0ead237ccb62a7baa Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:40:16 +0900 Subject: [PATCH 42/60] feat(MemberService): find by username --- .../com/gdscys/cokepoke/member/service/IMemberService.java | 1 + .../com/gdscys/cokepoke/member/service/MemberService.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java index bc00f7f..68e95fd 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java @@ -7,6 +7,7 @@ public interface IMemberService { Member saveMember(String email, String username, String password); + Member findMemberByUsername(String username); void updateMember(Member member, UpdateMemberRequest request); void deleteMember(Member member); List findAll(int page); diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java index 2784124..c453b53 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -42,6 +42,12 @@ public Member saveMember(String email, String username, String password) { return memberRepository.save(member); } + @Override + public Member findMemberByUsername(String username) { + return memberRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); + } + @Transactional public TokenInfo login(String email, String password) { From 3bd27daddcc916193a3037dbf9e26348aff9911e Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:55:13 +0900 Subject: [PATCH 43/60] feat: friendship controller --- .../controller/FriendshipController.java | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java index 7cc71ae..0e5f2da 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java @@ -1,2 +1,46 @@ -package com.gdscys.cokepoke.friendship.controller;public class FriendshipController { +package com.gdscys.cokepoke.friendship.controller; + +import com.gdscys.cokepoke.friendship.dto.FriendshipRequest; +import com.gdscys.cokepoke.friendship.dto.FriendshipResponse; +import com.gdscys.cokepoke.friendship.service.FriendshipService; +import com.gdscys.cokepoke.member.domain.Member; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; + +import static java.util.stream.Nodes.collect; + +@Controller +@RequestMapping("/friendship") +@RequiredArgsConstructor +public class FriendshipController { + + private final FriendshipService friendshipService; + + // 친구관계 만들기 + @PostMapping("/create") + public ResponseEntity createFriendship(@AuthenticationPrincipal Member member, + @RequestBody @Valid FriendshipRequest request) { + friendshipService.createFriendship(member, request.getRecipientUsername()); + return ResponseEntity.status(HttpStatus.CREATED).build(); + } + + // 내 친구관계 전체조회 + @GetMapping("/my") + public ResponseEntity> findFriendshipsByMember(@AuthenticationPrincipal Member member, + @RequestParam(defaultValue = "0") int page) { + List responses = friendshipService.findFriendshipsByMember(member, page) + .stream() + .map(FriendshipResponse::of) + .collect(Collectors.toList()); + } + + } From 72e0314e55fc172f0be4765690f36f5d1d066fd9 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:55:26 +0900 Subject: [PATCH 44/60] fix: friendship request --- .../com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java index e8e134d..6dd4f67 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java @@ -3,10 +3,12 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import javax.validation.constraints.NotBlank; + @Getter @AllArgsConstructor public class FriendshipRequest { - private String requestUsername; + @NotBlank private String recipientUsername; protected FriendshipRequest() {} From 8e0d0700de16638e59002e7b9bdd6a1808d9781f Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:55:40 +0900 Subject: [PATCH 45/60] feat: converter --- .../gdscys/cokepoke/friendship/dto/FriendshipResponse.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java index 8a55974..a643fdc 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java @@ -1,5 +1,6 @@ package com.gdscys.cokepoke.friendship.dto; +import com.gdscys.cokepoke.friendship.domain.Friendship; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,4 +12,10 @@ public class FriendshipResponse { protected FriendshipResponse() {} + public static FriendshipResponse of(Friendship friendship) { + String username1 = friendship.getRequestMember().getUsername(); + String username2 = friendship.getRecipientMember().getUsername(); + return new FriendshipResponse(username1, username2); + } + } From 7e112d19385cdbb242500a898b27cb3f1d354696 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:55:57 +0900 Subject: [PATCH 46/60] feat: friendship service --- .../repository/FriendshipRepository.java | 2 +- .../friendship/service/FriendshipService.java | 36 +++++++++++++++---- .../service/IFriendshipService.java | 10 ++++-- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java index 16a24b3..bcc37cc 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java @@ -14,7 +14,7 @@ public interface FriendshipRepository extends JpaRepository { Page findAllByRequestMember(Member requestMember, Pageable pageable); Page findAllByRecipientMember(Member recipientMember, Pageable pageable); - Page findAllByRequestMemberOrRecipientMember(Member member); + Page findAllByRequestMemberOrRecipientMember(Member member, Pageable pageable); Optional findByRequestMemberAndRecipientMember(Member requestMember, Member recipientMember); Optional findByRequestMemberOrRecipientMemberAndAccepted(Member requestMember, Member recipientMember, boolean accepted); diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java index 5f5401c..12ba32e 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -3,24 +3,48 @@ import com.gdscys.cokepoke.friendship.domain.Friendship; import com.gdscys.cokepoke.friendship.repository.FriendshipRepository; import com.gdscys.cokepoke.member.domain.Member; +import com.gdscys.cokepoke.member.service.MemberService; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class FriendshipService implements IFriendshipService { private final FriendshipRepository friendshipRepository; + private final MemberService memberService; + + private static final int PAGE_SIZE = 15; @Override - public void createFriendship(Member requestMember, Member recipientMember) { - Friendship friendship = new Friendship(requestMember, recipientMember); + public void createFriendship(Member member, String recipientUsername) { + Member recipientMember = memberService.findMemberByUsername(recipientUsername); + Friendship friendship = new Friendship(member, recipientMember); friendshipRepository.save(friendship); } @Override - public void deleteFriendship(Member requestMember, Member recipientMember) { - Friendship friendship = friendshipRepository.findByRequestMemberAndRecipientMember(requestMember, recipientMember) - .orElseThrow(() -> new IllegalArgumentException("No friendship found between: " + requestMember.getUsername() + " and " + recipientMember.getUsername() + ".")); - friendshipRepository.delete(friendship); + public Friendship findFriendshipByMembers(Member member, String username2) { + Member member2 = memberService.findMemberByUsername(username2); + + Optional friendship = friendshipRepository.findByRequestMemberAndRecipientMember(member, member2); + Optional friendship2 = friendshipRepository.findByRequestMemberAndRecipientMember(member2, member); + + if (friendship.isEmpty() && friendship2.isEmpty()) throw new NoSuchElementException("No friendship found between " + member2.getUsername() + " and " + username2); + else return friendship.orElseGet(friendship2::get); + } + + @Override + public List findFriendshipsByMember(Member member, int page) { + PageRequest pageRequest = PageRequest.of(page, PAGE_SIZE); + return friendshipRepository.findAllByRequestMemberOrRecipientMember(member, pageRequest) + .stream() + .collect(Collectors.toList()); } + } diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java index 35419cf..03585b5 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java @@ -1,9 +1,15 @@ package com.gdscys.cokepoke.friendship.service; +import com.gdscys.cokepoke.friendship.domain.Friendship; import com.gdscys.cokepoke.member.domain.Member; +import java.util.List; + public interface IFriendshipService { - void createFriendship(Member requestMember, Member recipientMember); - void deleteFriendship(Member requestMember, Member recipientMember); + void createFriendship(Member member, String recipientUsername); + + Friendship findFriendshipByMembers(Member member, String username2); + + List findFriendshipsByMember(Member member, int page); } From 14a2723e7009bb57a2716fe61f609acd5aa83556 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 02:57:01 +0900 Subject: [PATCH 47/60] fix: error --- .../cokepoke/friendship/controller/FriendshipController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java index 0e5f2da..8b29a2c 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.stream.Collectors; -import static java.util.stream.Nodes.collect; @Controller @RequestMapping("/friendship") @@ -40,6 +39,8 @@ public ResponseEntity> findFriendshipsByMember(@Authent .stream() .map(FriendshipResponse::of) .collect(Collectors.toList()); + + return ResponseEntity.ok(responses); } From 804e0d5434955ae43e5d93fc121c73bbe115ec74 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 03:06:08 +0900 Subject: [PATCH 48/60] fix: friendship --- .../com/gdscys/cokepoke/friendship/domain/Friendship.java | 2 ++ .../cokepoke/friendship/service/FriendshipService.java | 5 +++++ .../java/com/gdscys/cokepoke/member/domain/Member.java | 7 +++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java index 58e061f..f2cce52 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java @@ -15,10 +15,12 @@ public class Friendship { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id") + @Column(name = "request_member_id") private Member requestMember; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id") + @Column(name = "recipient_member_id") private Member recipientMember; @Column(name = "is_accepted", columnDefinition = "boolean default false") diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java index 12ba32e..7f283a8 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -24,6 +24,11 @@ public class FriendshipService implements IFriendshipService { @Override public void createFriendship(Member member, String recipientUsername) { Member recipientMember = memberService.findMemberByUsername(recipientUsername); + if (member.equals(recipientMember)) throw new IllegalArgumentException("You cannot be friends with yourself"); + if (friendshipRepository.findByRequestMemberAndRecipientMember(member, recipientMember).isPresent() || + friendshipRepository.findByRequestMemberAndRecipientMember(recipientMember, member).isPresent() + ) throw new IllegalArgumentException("You are already friends with " + recipientUsername); + Friendship friendship = new Friendship(member, recipientMember); friendshipRepository.save(friendship); } diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index e968760..9373c9e 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -41,8 +41,11 @@ public class Member implements UserDetails { @Column(name = "password_hash", nullable = false) private String passwordHash; - @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) - private Set friendships = new HashSet<>(); + @OneToMany(mappedBy = "request_member", fetch = FetchType.LAZY) + private Set requestedFriendships = new HashSet<>(); + + @OneToMany(mappedBy = "recipient_member", fetch = FetchType.LAZY) + private Set receivedFriendships = new HashSet<>(); @CreationTimestamp private LocalDateTime createdAt; From 3981db16aaf7c3797c8b472e87473964ea763a71 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 03:47:43 +0900 Subject: [PATCH 49/60] fix --- .../friendship/domain/Friendship.java | 21 ++++++------ .../friendship/dto/FriendshipResponse.java | 4 +-- .../repository/FriendshipRepository.java | 10 +++--- .../friendship/service/FriendshipService.java | 34 +++++++++++++------ .../gdscys/cokepoke/member/domain/Member.java | 16 ++++++--- 5 files changed, 51 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java index f2cce52..77fa95e 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java @@ -13,24 +13,23 @@ public class Friendship { @Id @GeneratedValue(generator = "FRIENDS_SEQ_GEN") private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "id") - @Column(name = "request_member_id") - private Member requestMember; + @ManyToOne + @JoinColumn(name="from_member_id") + private Member from; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "id") - @Column(name = "recipient_member_id") - private Member recipientMember; + @ManyToOne + @JoinColumn(name="to_member_id") + private Member to; @Column(name = "is_accepted", columnDefinition = "boolean default false") private boolean isAccepted; protected Friendship() {} - public Friendship(Member requestMember, Member recipientMember) { - this.requestMember = requestMember; - this.recipientMember = recipientMember; + public Friendship(Member from, Member to) { + this.from = from; + this.to = to; + this.isAccepted = false; } public void accept() { diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java index a643fdc..3d877c1 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java @@ -13,8 +13,8 @@ public class FriendshipResponse { protected FriendshipResponse() {} public static FriendshipResponse of(Friendship friendship) { - String username1 = friendship.getRequestMember().getUsername(); - String username2 = friendship.getRecipientMember().getUsername(); + String username1 = friendship.getFrom().getUsername(); + String username2 = friendship.getTo().getUsername(); return new FriendshipResponse(username1, username2); } diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java index bcc37cc..b0edd81 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java @@ -12,10 +12,8 @@ @Repository public interface FriendshipRepository extends JpaRepository { - Page findAllByRequestMember(Member requestMember, Pageable pageable); - Page findAllByRecipientMember(Member recipientMember, Pageable pageable); - Page findAllByRequestMemberOrRecipientMember(Member member, Pageable pageable); - Optional findByRequestMemberAndRecipientMember(Member requestMember, Member recipientMember); - Optional findByRequestMemberOrRecipientMemberAndAccepted(Member requestMember, Member recipientMember, boolean accepted); - + Page findAllByFrom(Member from, Pageable pageable); + Page findAllByTo(Member to, Pageable pageable); + Optional findByFromAndTo(Member from, Member to); + Optional findByFrom(Member from); } diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java index 7f283a8..72580bc 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -23,33 +23,45 @@ public class FriendshipService implements IFriendshipService { @Override public void createFriendship(Member member, String recipientUsername) { - Member recipientMember = memberService.findMemberByUsername(recipientUsername); - if (member.equals(recipientMember)) throw new IllegalArgumentException("You cannot be friends with yourself"); - if (friendshipRepository.findByRequestMemberAndRecipientMember(member, recipientMember).isPresent() || - friendshipRepository.findByRequestMemberAndRecipientMember(recipientMember, member).isPresent() - ) throw new IllegalArgumentException("You are already friends with " + recipientUsername); + Member to = memberService.findMemberByUsername(recipientUsername); + if (member.equals(to)) throw new IllegalArgumentException("You cannot be friends with yourself"); + if (friendshipRepository.findByFromAndTo(member, to).isPresent()) { + throw new IllegalArgumentException("You already sent a friend request"); + } - Friendship friendship = new Friendship(member, recipientMember); + Friendship friendship = new Friendship(member, to); friendshipRepository.save(friendship); + member.addRequested(friendship); + to.addReceived(friendship); + checkIfFriendshipExists(friendship); } @Override public Friendship findFriendshipByMembers(Member member, String username2) { - Member member2 = memberService.findMemberByUsername(username2); + Member to = memberService.findMemberByUsername(username2); - Optional friendship = friendshipRepository.findByRequestMemberAndRecipientMember(member, member2); - Optional friendship2 = friendshipRepository.findByRequestMemberAndRecipientMember(member2, member); + Optional friendship = friendshipRepository.findByFromAndTo(member, to); + Optional friendship2 = friendshipRepository.findByFromAndTo(to, member); - if (friendship.isEmpty() && friendship2.isEmpty()) throw new NoSuchElementException("No friendship found between " + member2.getUsername() + " and " + username2); + if (friendship.isEmpty() && friendship2.isEmpty()) throw new NoSuchElementException("No friendship found between " + to.getUsername() + " and " + username2); else return friendship.orElseGet(friendship2::get); } @Override public List findFriendshipsByMember(Member member, int page) { PageRequest pageRequest = PageRequest.of(page, PAGE_SIZE); - return friendshipRepository.findAllByRequestMemberOrRecipientMember(member, pageRequest) + return friendshipRepository.findAllByFrom(member, pageRequest) .stream() + .filter(Friendship::isAccepted) .collect(Collectors.toList()); } + private void checkIfFriendshipExists(Friendship friendship) { + Optional friendshipOptional = friendshipRepository.findByFromAndTo(friendship.getTo(), friendship.getFrom()); + if (friendshipOptional.isPresent()) { + friendship.accept(); + friendshipOptional.get().accept(); + } + } + } diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 9373c9e..936334e 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -41,11 +41,11 @@ public class Member implements UserDetails { @Column(name = "password_hash", nullable = false) private String passwordHash; - @OneToMany(mappedBy = "request_member", fetch = FetchType.LAZY) - private Set requestedFriendships = new HashSet<>(); + @OneToMany(mappedBy = "from") + private Set requested = new HashSet<>(); - @OneToMany(mappedBy = "recipient_member", fetch = FetchType.LAZY) - private Set receivedFriendships = new HashSet<>(); + @OneToMany(mappedBy = "to") + private Set received = new HashSet<>(); @CreationTimestamp private LocalDateTime createdAt; @@ -72,6 +72,14 @@ public Member(String email, String username, String passwordHash, Set ro this.roles = roles; } + public void addRequested(Friendship friendship) { + this.requested.add(friendship); + } + + public void addReceived(Friendship friendship) { + this.received.add(friendship); + } + public void updatePassword(String passwordHash) { this.passwordHash = passwordHash; } From 5bf6ec0bba5b1a2a5edf14761575a7960c2347a2 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 04:27:18 +0900 Subject: [PATCH 50/60] fix --- .../com/gdscys/cokepoke/auth/controller/AuthController.java | 2 -- src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java | 1 - .../com/gdscys/cokepoke/configuration/SecurityConfig.java | 2 +- .../com/gdscys/cokepoke/member/service/MemberService.java | 4 +--- 4 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java index fff58fc..601599e 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java +++ b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java @@ -2,7 +2,6 @@ import com.gdscys.cokepoke.auth.domain.TokenInfo; import com.gdscys.cokepoke.auth.dto.LoginRequest; -import com.gdscys.cokepoke.member.service.CustomUserDetailsService; import com.gdscys.cokepoke.member.domain.Member; import com.gdscys.cokepoke.member.dto.SignupRequest; import com.gdscys.cokepoke.member.dto.MemberResponse; @@ -24,7 +23,6 @@ @RequestMapping("/auth") @RequiredArgsConstructor public class AuthController { - private final CustomUserDetailsService customUserDetailsService; private final MemberService memberService; @PostMapping("/signup") diff --git a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java index 7a1cc75..040d5ee 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java +++ b/src/main/java/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.java @@ -8,7 +8,6 @@ import io.jsonwebtoken.Claims; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.access.AccessDeniedException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.filter.OncePerRequestFilter; diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java index 5934da2..d23379a 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java @@ -42,7 +42,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeRequests() - .antMatchers("/", "/auth/login", "/auth/signup", + .antMatchers("/", "/auth/**", "/auth/login", "/auth/signup", "/h2-console/**") .permitAll() .anyRequest().authenticated() diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java index c453b53..500fa68 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -70,9 +70,7 @@ public TokenInfo login(String email, String password) { .ifPresentOrElse(refreshToken -> { refreshToken.setRefreshToken(tokenInfo.getRefreshToken()); refreshTokenRepository.save(refreshToken); - }, () -> { - refreshTokenRepository.save(new RefreshToken(tokenInfo.getRefreshToken(), member.get())); - }); + }, () -> refreshTokenRepository.save(new RefreshToken(tokenInfo.getRefreshToken(), member.get()))); return tokenInfo; } From 91c74472c7bc466741833eaecce4c25554506c68 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 20:56:25 +0900 Subject: [PATCH 51/60] fix --- .gitignore | 37 ++++++++++++ .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 4 +- .gradle/buildOutputCleanup/outputFiles.bin | Bin 18965 -> 0 bytes .idea/gradle.xml | 1 + .idea/modules.xml | 8 --- .idea/workspace.xml | 24 +++++++- build.gradle | 13 ++++- gradle/wrapper/gradle-wrapper.properties | 4 ++ settings.gradle | 1 + .../gdscys/cokepoke/CokePokeApplication.java | 9 ++- .../DelegatingSecurityContextRepository.java | 53 ++++++++++++++++++ .../gdscys/cokepoke/auth/SecurityUtil.java | 12 ++++ .../configuration/SecurityConfig.java | 9 +++ .../exception/GlobalExceptionHandler.java | 1 - .../controller/FriendshipController.java | 14 +++-- .../friendship/dto/FriendshipRequest.java | 2 +- .../friendship/service/FriendshipService.java | 9 ++- .../service/IFriendshipService.java | 6 +- src/main/resources/application.yml | 22 ++++++++ .../cokepoke/CokePokeApplicationTests.java | 13 +++++ 21 files changed, 209 insertions(+), 33 deletions(-) create mode 100644 .gitignore delete mode 100644 .gradle/buildOutputCleanup/outputFiles.bin delete mode 100644 .idea/modules.xml create mode 100644 settings.gradle create mode 100644 src/main/java/com/gdscys/cokepoke/auth/DelegatingSecurityContextRepository.java create mode 100644 src/main/java/com/gdscys/cokepoke/auth/SecurityUtil.java create mode 100644 src/main/resources/application.yml create mode 100644 src/test/java/com/gdscys/cokepoke/CokePokeApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 962b44ed7eae5a4036f11710b24532e56d144fc1..64e4fcc9c972936907f0f68062d887c37df6c991 100644 GIT binary patch literal 17 UcmZQRSmhRV@7*DN1_%fQ06Go??EnA( literal 17 UcmZQRSmhRV@7*DN1_%fM06Gl>>;M1& diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index 2918ec7..c8f1296 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Wed Oct 11 20:39:11 KST 2023 -gradle.version=8.2 +#Wed Oct 11 20:55:29 KST 2023 +gradle.version=8.2.1 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index 106fd4db365dd5cfcd7d9f3ae236d6d089efed47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18965 zcmeI%T}V@57{KwFL50!6jlRy<^CYnw8*~%@17~~rpZ9&n`Q5JEFdTV5 z}kJD3$pm+FvFMC$_jRl}jJj{`S>P+qc%IjWQ>wee7$)54SgUMfQiZCq8!O ze`zgTB7LTIhy6*H-_uwuy;QqvtHbV#9K9>^6WSNgXz!{oShQODu=W-8!GTn0VpQgI zYOl(h72i{4>yy6kcW>+QhHvbAAl<2bgT42T%O7^h{O#InZU=U+-|;9a-LJjYmUKRT zeyU%3nfAK)$hO}3b=5N8t-UGs-PbhOlP~*6wKum14#bA~+A@9JbnScJhlcy#T(HXi zbK3RWFf1LJXM7@n00IagfB*srAbh);iFshQc~48<=?~i<#SH(b0VJdyDMJxy{KwmD}Vg GpZWzpQ)@Z^ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f9163b4..ce1c62c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ + - + + + + + + + + + + + + + + + + + + + + +

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 diff --git a/.gradle/8.2.1/executionHistory/executionHistory.lock b/.gradle/8.2.1/executionHistory/executionHistory.lock deleted file mode 100644 index 60fc5e48ae9aa69934d102a036678738b7d90ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZRcm$Jt(bK~z81_@~ diff --git a/.gradle/8.2.1/fileChanges/last-build.bin b/.gradle/8.2.1/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/8.2.1/fileHashes/fileHashes.bin b/.gradle/8.2.1/fileHashes/fileHashes.bin deleted file mode 100644 index 0057b70edcaa49b2ba3f8dd74d29355b4035bfd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24197 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 diff --git a/.gradle/8.2.1/fileHashes/fileHashes.lock b/.gradle/8.2.1/fileHashes/fileHashes.lock deleted file mode 100644 index b82242c934b0e07a40b6490e8ffaa20da6fa989a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSnrDya0XIkKN1_*cv06S>~e*gdg diff --git a/.gradle/8.2.1/fileHashes/resourceHashesCache.bin b/.gradle/8.2.1/fileHashes/resourceHashesCache.bin deleted file mode 100644 index e1ad7dba3a663f0bfa2110cf9396173c3fc9acc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21761 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 diff --git a/.gradle/8.2/dependencies-accessors/gc.properties b/.gradle/8.2/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/8.2/executionHistory/executionHistory.bin b/.gradle/8.2/executionHistory/executionHistory.bin deleted file mode 100644 index 0db3ae025966a358452de1e35ce3772c166cbf0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106017 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 diff --git a/.gradle/8.2/executionHistory/executionHistory.lock b/.gradle/8.2/executionHistory/executionHistory.lock deleted file mode 100644 index 34522831c0fa0d08d3f966c96f30371acfd0ca02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQ(-faJ*t54610Rp%HD)|F< diff --git a/.gradle/8.2/fileChanges/last-build.bin b/.gradle/8.2/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/8.2/fileHashes/fileHashes.bin b/.gradle/8.2/fileHashes/fileHashes.bin deleted file mode 100644 index 20c48b2951932cfc60f989d80d0cd3944827a529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21647 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 UUyFByY6D}&8bPn9jZS>yZ@$X{o&W#< diff --git a/.gradle/8.2/fileHashes/fileHashes.lock b/.gradle/8.2/fileHashes/fileHashes.lock deleted file mode 100644 index 7b23c833663466d0d4fbbce6134415f339720790..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZRcRCw9J{w7-^0|ev%05C-aB>(^b diff --git a/.gradle/8.2/fileHashes/resourceHashesCache.bin b/.gradle/8.2/fileHashes/resourceHashesCache.bin deleted file mode 100644 index b4b5ef49c77b198e57a9418e516c8780cdb711ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19449 zcmeI(`%hD69LMnvC?-rMRAk_QN)Xy?urkykAh&^rwi{*&8{smg3N?-uT&IR{PY0AD zlZ{J+jFogyK!sUGK~TnJnSiLk zo!xBNl|ph~@S-Q|Q}EfwM7{h+$zPsJ z>5b%dPoOUIP0RfJm4t4hb1G49;&~Vk+KL^>^9Wz`axLTbenC6gn^3>&cxcg(W;ITp zrwjGbjDzhb53r-j{R-+Dqm%bU;n@LXH%0yLxT>$^eay4ud3;fyFA*+}$5iK#`y$jA z0&GeL=rkLmbI+h|-ug5@B%Me8dN{VITQ(IR_p)Fy$o&ZFyJ*tHxT3Bwvb&%jAT~GR zEe?J~^dNuK4{BD{6RYJGWUoT~kk{mDk+Xjj(K*qmAGHdJ;(5D}oqHJdFxC*Q+kZ`=wQMZ;Euynks0)9R3|LSb%ZbiaqW%RZ+~9zRu`PL?9@LYjw%<@5ZO9-x zM~gc8q)-eL#CPx$1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`;KmY_l00ck)1V8`; zKmY_l00ck)1V8`;KmY_l00ck)1V8`;Kw!@Xf%V4QT>myx`qXAw%Cu|GR~Z-TCLPT- zqTPQN6-GS`ipUvtTGoi6>nTP(z9?3;$RwSqox-?Nx!E+PJ-%3boMfZTY0GbE(O5+L z+^obG--*3Bb;DwT+cCi#tof&=_~J>3;}2Y2@0=*xv+L${dL+JZzZGn_ga2&8?{Zt< zo4+;dpHkR#FQJ8U&p*;y!>4`97V?5Duiy)zM8QnG(RV*&x6{SC@=F!?BKUVn_k3*^ zHI{ih|44C%{(tBjR0XfNSAD%d=a5`3}JnHL$lbNzaKc#KJ#bd`@UIQwT) zdh5cx6T?OxOn-S_|2)U0t9%eBTbdVlKFD~sRV}EY7vKw@kH;S=1LKU2_lhp&NB8KT zhS+qDp?fJFPQ|a&`W+rRN1ivMjL&dk0@^|K!elif=hyV>6c% z4$uD6hcA-mh8M3^o~ZxSx@=h8e=HVXOfOco7qDV3rTsj^@ICX(UVKq1+9Gb?kJ`_s zyGf0&UdY84-$dMf>|NoJQhPe@Vc{}u0AI+XbQyV?WDM#gfV{aY5QlR}OyGp&Jvr;|mAAV(G|S`rhRJbG_6kW*fdp9kzFGtlcx} hbWM^}VJeBo7pHGgJ65OU`{H@)B?hhG`sXq1{sq&Ebm{;A diff --git a/.gradle/8.2/gc.properties b/.gradle/8.2/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 64e4fcc9c972936907f0f68062d887c37df6c991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQRSmhRV@7*DN1_%fQ06Go??EnA( diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index c8f1296..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Oct 11 20:55:29 KST 2023 -gradle.version=8.2.1 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe deleted file mode 100644 index 8ed3787fc516ca317e27f719c3b93485a77b59cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmZQzVC - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index ce1c62c..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index d3fceda..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 5341222..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/modules/coke-poke.main.iml b/.idea/modules/coke-poke.main.iml deleted file mode 100644 index afc1871..0000000 --- a/.idea/modules/coke-poke.main.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 21491d1..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class b/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class deleted file mode 100644 index bbcda6ab539e85d43773f7f348e4200017addd0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcma)4O;6iE5PcgG986khC=?1k^hA3bQO9FosMx?a-TIR8|-$k5Jq#c<=WFujf_x}d#ZlVf?Zj_jur{f~IFL+{ZbV&!~ak7kTqxTE! zXO(V}_GwVT8tK-o03p`NTOE!mRWiY6RBR99DZ)qC&0ck8{9{`23Te+6&{ zzSc0^iROwF6oWvQm?o7DkFY2q=fsBT1 z2XaYB%qJ->pTq(zwc)IW#SYl&i=!q>T{s7~1D@)A^(ZHCJ(iRa=QTX4;etS4w(R*% z@wg}5!_qgcf;TJOB`Yfh4oqg9qLI&e*$bYLbrxlb%_z!ZM!E*qt5wGM2HQskHib*8 z^7b_&Zz>QU?V*r%&&u27lE8_9M%#0~W6TCCXXLrE^!(AmNyp6_UdgrW{Jd)x<$1?l zG!}fnWXwpfMvNH zz^$?Nm}P%~&a!>iDHQ0ZF^vCht_MV4gx>^)8t!z8rezzUBdM@w zO8N^@d_=h1Y`6dZQVXoW=x7QZFv?QK4#mF zZ~7L4C2(78K+nsJk+JNYVOG}~(~jp)nWYjVPnm5?W}!@=no*(BHMLsiE|h9D^-Z2N zm&`{EZnScNdLyk~DQs8m)~Zu4)6$5nhn$?EVOzn;Ted(tJ|qFP6fY*#vdiJQ9w>-* z3Jk|aC|(Uot~usD4{^=YMpnTqDmi%NHua9<-m`$XTN1z{y_mZ-aSzw zxMZS@4PxEq@TgU?>R?(RIqQ_&th~=sY3|C}EVV~jt%4kvK|Q7r>G(V|MonJ3Gj?^{ z@r?Ml=7bt5Y6AUn`htvoglYSTG;_>eI{I;=hR1X~jwf_HsUA<^2@Ox{cm~gEcuvRj zctOL9I$pxd8eY-yDqhp^I^NLmrjGr1OUK)INBKbdyDKEXy3&Z>Xu=%3K2X<)5OZ6oD~cY|=K*oSVfSSOHh<^@hQ%wo09Z0z@S8dO5f@aXVL zx;D@uRsXMx-e4TEuw>NLRe^`r>S|CGHWpc5g_Nfj1@7PhX)@+(GX}lT!2CL00<3cW z*lPZ2hG&&j*x@@NUQ%u$$hsQ7qQoczS2Ng|7!RF_J7vwHtyMt4-2^eSCKC#5tgmw&YWOLlY zzJKTkB!-vK!q&>xwv6_v@1b2p$H+x=t{|Dfw_KONAfGAj0yS)*j;jLs*JCJ{31ndy zBOFmGc4H6qZ9xwV?B(v8IornE$Zj870=M8+_M5rrHn!VOL3sR?e<$ZUA$r-}#dbGa z7tcLLqY1(L$AJjKH|Pi;q$3DjG+$rFrm2hAoa%1<1wAKPhEi9IEF-myE0?ilb_H8o z@Ne|4e%;2eeRW?)>Ok+HKG1PJblgt5;Q%2|6Y6n}SHY*N;L|vWdx)urSB`rzwhI0r z#f0Dw#eg5bB>057JW-sA-#mNe^S)t*X?yDmb}-^st>EeeR&b426SH2lah*XBd$Eae zNYRFE9Iu+*S2ewlCf`rfDHlih7RIeJ!D(;;{B#r#L?%o{CUg(|glmU}f5gtAksp!x zj>|%}v2QWQDG@q-i@a^)C`9Pi+| XUjDOFXz#>F?ElLC9RIxexV`g#s*!`~ diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/domain/JwtCode.class b/build/classes/java/main/com/gdscys/cokepoke/auth/domain/JwtCode.class deleted file mode 100644 index a8c368374ca8d06e946a23e5c0f59f7a8147dc73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1171 zcmb7D?@!ZE6g_Y4)~ys6bE3of3x{k2sZ)>-n*=guf|)?95{dD{qpMr7YfaZ-{N|se zBN3y~@Yz4gcwe{3h?+o?_wKvzoqO)N_r3o7_4NmUWh^Hkqo`sI^9s@m?x+~Uf|&F; z##K7h1>$ZT6T+6_NC|sS!F`60L8-mi-gsJDr||XK=7v}(xt+E8^BNHqU!H?0cEFvk)nS;=7tRwW3ndKW zb=$QzyX`&8f5!J5+EGHnt=9|>^Ywjxz;%baP2C85+ijN5Q)H^{ncUgozAcys^s>v_ zlqK~yHAC`=6|}s@Hunh=SUy!1tJtm`tT0UeL(E2Dhd~ZnHUZU~<#yY-KKp3j@%)DE za)%*d*iDxQU7s>bc@Y(_n9hK?JS3$?9F;S7e}!&RHN38GT90heJ8f{o3!-ltE{MmJ z*06{rhS@W|4hjvuVM0tPBpJp|u0sfAh?jFFjU0W-o9l9q-|-q zXH|!HI>WX8xzW?C<<%0s?J@c>mA;iMitxLvu25o0&n!>DlxCiL_>p^`4qxml7M86=%W Jp7tUr{01%#0u}%O diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/domain/TokenInfo.class b/build/classes/java/main/com/gdscys/cokepoke/auth/domain/TokenInfo.class deleted file mode 100644 index ac0d3faf1299dd282e04e2c7278e32d53811a8d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcma)3%TB^T6g>ll3RY0Ww+mefXzbF3#>AMInBXI7Ok56SgetVAEhhezCK3}Det;ik zJX26qSeQxY&fMPfxO3k>Uf%$0VL6Kw<}xraueSvgizb!?#--z^Fud?@l_yZB-pG4t zx1`sw&!fQg8ruR^psoWIHv2W{9oKWCU4dk&d?{e;`*kIduezQ(?zC$vxRA9LGli<} z$kwF{Tz&5+ji~8{0_#=BZ`+M}=sbkBL+v|$w(LYryY9E8>)El`p?B@mz*=e8)^J9f znLJWa)32Y(K(hiNm32IVoWmTHMp|gMWV9NMRGt>pq3^uNR%OgrqGltJy@TT1hGf$ wBd?n$?G(=$Z5>Q#)dHru|F-;$#3O$usPJXk9BH{Y5}f=C9vcasi6v$~0it`0=l}o! diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/dto/LoginRequest.class b/build/classes/java/main/com/gdscys/cokepoke/auth/dto/LoginRequest.class deleted file mode 100644 index acc609abf3f8fe9f257815bbab08eceae47cec8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZuvO>Yx15Pi;f(v-BJEfgq}Q={NgWC_yXW#! zdZCO4-l>gsG(^e-XKW)>%{ZTg&K2umon5r zn&Jh@4`n>{doKLeRU&I;ER*EQ#DTzGTJ`fh%qP2zrH*Xk9U1$YiY^G+S(I{iJzkVk zdZ8n2Ukc<~?Vdp4jR}-MqpKrzG#T|(d?wj}>(lr$?8#WW{VZ6pL(P`Ya8ytj{YsaPL;fD(=)#Lb;9_$^z}I$I0x3@@`-LL;qa)7Ek#@iu^V?4swEe zxhv6D(ugeuF!YR?rqZ-yy!z$zhGFqXX7C96U`x6J(&j ziVbEt@JHG_ZNq^(`!~pSp4}jSOVea65LO_hicMDCN-1}zuo)!@W}P^1s(+KXs%sDo jxT;&Y$8}NiH{`zXa9(mfQ}X>xaQ=UABNM!xmU!?7r~|>< diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.class b/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtAuthFilter.class deleted file mode 100644 index 35e34884f9b436e31b835be8c1e646440c85b858..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6845 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 diff --git a/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.class b/build/classes/java/main/com/gdscys/cokepoke/auth/jwt/JwtTokenProvider.class deleted file mode 100644 index a9684b045c1e378b84ebb4ff8311dde67b6b61c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7391 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 diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/QueryDslConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/QueryDslConfig.class deleted file mode 100644 index 3b0503899d2d4a26ff3573141cd01192bee699b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmb7D+iuf95Iviu2@NhOgj=~+0+dvOMLd*;BBZp?hbllRC=!nwduukecg=bY&0m3p zR0$+LfR94Vnm|*@65_!#-q|x}&Wy)Det!K9;1O=M(Zos%R~E5=t8LV9t%d6?++bLe z+9@}EF0_cHWmp|f#0PQ6Gih^`JE=p-pUp!y7*_TQillO+ay3rmKx^ZKQ%2_ucPsLD zkGZytcJj~>N%OJN$~|GI_xdA-#+HdBLuaV8d{LxhY2OIqW;i!Ap-4u;Du12@8}6N= zVh@L*NqHRQ;WX!=IglAW^rH7wT-Z_)e^p33eVQj!nW9vb{5&+9MOP)3iT_W+x>!_D^!8g?2 nu6;rM2#rq^ui==ZJI4{sIR3~vUt%wm_F^g0|7(}%d>Qx!LuU48 diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/SecurityConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/SecurityConfig.class deleted file mode 100644 index 419c442e2e0d21a2beca0ccb174421725c791be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6918 zcmcIpiGLJl8GeQwlT3%^pkPr-DTWe4VUSkT1`!g%<))7~nG#tm9HJpGcTN85DYDWe_ z!z8luCmhSEu-kC54X4_WZ$m+Y16Rdq4J#4IPD!@T$ktgE=h|@}rsU5f8dl>iD&8uA z-zI+^Rq>dHO?bP8$8lc8J2bo#@6zxD-mT$1c&~~lRlH9@=gG6dn0rb%Bc6N4&InI| zk+R%^k z*QmT`jMO6#w0V$F#7^0cc&H?K88avH9O+KEmYF|ndbaGxgUvzC_7!YR+=}HolXkY` znSt#(MmpwUFdQYNm7^smunXd_?b}4$y3BM*En z%PKyg-<4gF8im&SU8ZPK~3SZap4SZ9@w{(0P-%;^h9pA(E zb^HJqrGuw*jlAh(jdUPgrUJ#_!Hyhy-p$H`tw%lI&N?NYt=o;<)=iX<@8*Tk*QerX z9Y4Y|DlREFy@2gige{%G(77T*h0mjQ$jk3yP;ou`ko!u1;5|T*b3Geu66s9+;Cr<%HC@KFQoQ70>DTDSoD4`5 zGq7?Dwxi;7N%+BV)K&3w9lyXYRs2fFukkw-&+GU-UQnFEK<}rU@{zpY4yPH=?Z|`y%Y7=SD&_Q|nf5Fo6s+ z6kqPqv%`4UWI7oI12@0Lir=mtvMz=w8SREm$IOZX!-9h2HxDeMjuofu(odvkqSo2O zj`@g8y2A?2pmeF^a>UKs77Mrb^w_Skq0~@1tzhT8@~hd=sKTT3;isnLxryDfFp4ES za}O8hmlQW(e2y9=(#LFt)!bU@GUN0|#L<~fVs$k?+RsXmIdd^!4m2vVHgiyF=847I zPL)K16s)=^i4W@Z{33N)C9q&Fn8un;C8weA*7qJuRWpw$-DRO!9g6akTi{dX!#qz> zQFsMA*p+7vtC`MJtY!swP>Bg#EtLilCys&+sKd-;q6~0AFaWZ2@_WPg&hfg#JChfI z5l#2kpoMAiT;+AL=_Xg|3R=Pm)`h*YI^4Se#ZM#G)L07ISZ^@>mo>?q`(;yPVi8rn znS#v1EIx^3&umm^5`#(GnqciGvwb%bSjiLBi>8VSM$8~Lt=X=?P0K4DYgG7Q$xE}G zEy0=(cs*E5hTJA5SPKSJ&}9aLZlT~h@(L`z2>G*uRf+WDDnfxXi)t3kNKYer-1dni zCCyRl-;^Qn(0O&G67`p+TWLsFhN}kER+0-+@fRI`#XofH!CnO?lki_0DJoc7bv?Fo zMqciw!uuuOZ27x5)hrzk=I^4sea})m* zSb}bOr@&UXyjI||1-wDV{hWD#z0K??d^TT!@o_{sGn!VS= zvk&sApdZ^~oGt80oYt!xz)YmIHAt07hmmCrTPi`!usf_09Xepz$3^i=D zmC+tHv@&ihLoZ`#*uDK}bd=FqMpxMFRG9_7<>~R3?iK0r*6x?2%eeD8 zR+jP7GF}!oR+VuVUwIa*$NQea-Tbb(jC;D*mhti<U`24NJ+{z0j~8%g~Ee z*noBD!$y7{q{I(V=Eo@QKf*=iO-I{%ec31<0UeD-zBWM$e~)zEe|QKiIz@N>MH-|32Ub!I@c;k- diff --git a/build/classes/java/main/com/gdscys/cokepoke/configuration/SwaggerConfig.class b/build/classes/java/main/com/gdscys/cokepoke/configuration/SwaggerConfig.class deleted file mode 100644 index a36522c083e7fc5801b69ed7dce4e8b5544f437b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmb7EO-~b16g{uBv`L#@rVkGeg_*=?fFy7ZziVF}k>D>EX&pqe9Gk50aukSwq%;Ba13#lkZ41{#N zWFU-`UW^(ziOV`mM=@rg3#k~!b)1OdijI>pWOU?FOhqxx(0NO`GPupqkse!N2rsFE zVCcX_#d9mO-FMRH(4N;*VCGMIm zRy{kA%H{bjyI2(7Qe$(0A*w3EU3`#b7)g)iq~d-Pz&B^OvVC5rK1x1cZlb6l@u=zs zvMg4lFR6n?*HuA-ni`nQDX+-=iYMLTnrD~Amhv`q1A%xRaC;xh?+Dw~;&w%5-8IE9 zdX%^%2-i3&G4iVFIpVHtnDN(XGVAuH%`ki1CYm0!j9D-dM?XXIUluT=4uveKaz(kq z4SW+kPw(7VV#oA)aqoS5QuJ@AaGd_Q$>LZzg6j$1t(~SN+4QWc}sm z`nykiZ{H_d4kVvs50=d9lE`#sDl=u`hF;K9_^;7m=+k!clI<4x^6I*90y3XSS_fpv zrVk&Nwh;@*8mh21f#Kc}l>0Uvk1-O+K#$0LI@dl&KG2hS6hT{sp}Qb_$CDNP-q5UW z3eTqu7wO%$=mP+BfF2q8={`U!PLWZJjPHPbr6hzwx_34<4Gd9kHUT(=1g#iO;|!s6 z@p6Lz8ctZfHT1P*1`#1xoW4>0Bs4(TAYJhTQbR4N5R!xp KkuiTnhk@U6VOYrk diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse$ValidationError.class b/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse$ValidationError.class deleted file mode 100644 index a162f005295ed9b84555538337cfe6aff155347c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmbtSO>Yx15PjZ!Y_lvRP0L4t(jXxAmqA+uwhD{RZG6?zT|JO&@MWXyA5;%@B748gCR8nLu}R zEZ@nbkY%16I-|;bS0J2`wK6Axm7LuEg1O!wEaTSqbjHN?NR@POGMkclEvE$|-H}dZ zF_A|3{TWzyN6IpLA`6vCr*!$$7;OaN=VeJ|uaMRf6CRIJJxlV;rXOsQ>bErKmC*Z? z=3bOks#j#^y0mofTsNK|V&CImLo^?$Qn@Dr+x?3ZTto&FfzFuRkPRW;mS1|Il3z--rLTtroB8;)(!y0-5yZw$6cL`^~xiS0<@sW!FF~?>FZs9W5@q&OWSmhnR z_EK?hUff$MUc)*c;ZGiOu5oS;zo0hUIfWSBKSl6~p+7xrR&9C<>X`=?RYQ5>?P{z5 eSGjHl40jmlF#TH9=sIpxd4n-j#_QN%QS=id3bEw? diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse.class b/build/classes/java/main/com/gdscys/cokepoke/exception/ErrorResponse.class deleted file mode 100644 index fab5101a0930d3e718f7ca10c33fedfe7e693775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2090 zcmb_c>vG#f7(FZ7Q7tQu>o_fUS}1MoBo(((z#*lCl!kHAOPDa>pJHzuHHzhtWS|2t z!dt)$nE;vL0eC2e^GQnV8vkep;>qsnyPogtk^cJok3Rw2#+Me#xK%^}AINfBmJdyQ zWO4sk9-0=G@rj8Q3q{;AamPXlpO$bJpP5)ynAvuHuj9sE&|3?`AXKo|dp#Yl`fe2I zNTH~|Z|lDJ73Nw`+;3gScY9rD?bO^bEF@_Kr6aJZ|(uiRZf;Vfvo{@|+p-@xDg_md-N~@mDre!J!cNGVli;zRHC(K!p=lmWK1eRfmVO6Yo!_mLMGPgY2i`1KKhsOzl+q`3I<_Y z-}4gnJR|CxLZCuvQ%9UwL>Ae28K2v@h^mcQ)NIV*lET6{-V~|uijB*7!Ni)4d-y_O zHo2)}(z{{kK9#pqp?Qv~7?i1Z+_1wIu;o`7!>Y&D_yl8Xa z`}{(UiYj$C>)$Aphe;{Y93_dX{6LoZ9nGUE{P0v2ijtiyaW`aYD7=`QUxG;s$>91b zEk5@=_gdo^s}YwzD{c+&BqmDk-u7k zLnS9cVk9TQlEWK3Pv;l_rh`Sma&O{V24=5Pb^{0%YHiR~)=K%Kr?g1MfcGZ-f|)La6tXwaY1pcva=q}+$Y zUFIkdgE2n*bkfL91F}YZ53o2PIX9kMo|wFZn-h}rU8tmIU{46J_uF+ABV diff --git a/build/classes/java/main/com/gdscys/cokepoke/exception/GlobalExceptionHandler.class b/build/classes/java/main/com/gdscys/cokepoke/exception/GlobalExceptionHandler.class deleted file mode 100644 index 4d25c3fcd35f0facc395d1d17970692afaacb4ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5450 zcmd5=SyvQC6#j~>VQ5itNkC%8Er19u5tqoK0}M+T2Au(nOG0{PikX(C8@qcDvK!65 z@5w`+@{m_U&M}gQoV+F{KOw&)=VZCvJsaAijOQ4YGu_qQw{CrPzwcJv^7ns!{sq8M zeC<>YH=3ld^qoZxKNE}ZG-20n8EY4kP)jz9En;4!0pSd zfTRzbkg_j|?dGEGX3huI^)T;)=C*VJ3j!`NRP`vDV)ZeUx3o?(R1D||&ag40Xgr*r zk8xvCj;ZvfKBUKGby_wQ`#JNn!b&M7!;w&2pO=yeGrnv}aea<2&`;t^alT+Fx+V>) zdQ4V>+2;{iOQ_uFX4sK(nt^zno8}bshHRO4ISvTgS%REL%G>b1;lEE*fxoJsfcr4;JyIVawr7UYfig0s5*GwMNEX7(T zkTto9Fzj0wA_gHdCPSC!NOyt9P;F#jFtpz#x3jR(I7_L8Pprz}nCOk1YGc++39%N{8xp31a zU?kHv8DZU;mQ^Le@NJ7Hzjg{c`tt7g|54z*FN241)V(K9JNJ~u8eIJ<-ZLjYyz9}jaFOBc}Asqm@D#6U0_4fKbCGr{oW z=;T?3ovxNfRh1`YH7ll^7#OZ*az&N3q*To8zNhtGH?8jsf??&sgDstz+Wx@cOeA=E zDj1z)Xmkk)sOpp!m($6VRX~PSIKSNc`yTym1<}us%JAI-fKz&Ww~dA;gOP9`G!qR* zrh}20U?egTVem!uv=Qe+RH;#A=Uwx4*aclFJN5w8aE4CVWCRk6N}P9#*nuVimWVVK z1zZ;KBsxVbVOhWnB3{HR0$vsI8mAEPIU?u_o0`+oxaff{AlnK1(D@i?_b*8qNU0&4HZ9#lA;=TS~A zprNhp2Fg}YeiId8=T_OiimEbPr;o0~ddIMlo|;fiNJMgNJKyg*$T%lg*o%G6fDL#8 z&15fP16t5ZL+vN~nldr~eFEC(SB3*e4Q%=T-#>3+Yo3#Ghvc0Q$n|0P z&`sm_(6GJK>Omj<1#rTdZWk))TOE$mmr5H*j;S%S>~$tSmSM_Az4{!cPLO3C%Kk>9 zfRh3Of00Foy&n3MXRqHQ7`^#m43Pgp1ijeXwu0?0dvq(p-Y~H@LhKC_dt*h}8!Cmp zVGqDVdB7v&YZOm=0e)l!kGg>ARs?XA08bL&C;>iG6!2InfI}XD$MS&3Nnl~3qzn^| Vp}jhsqUV?C=cD#n!tqj7&3{}aUMK(n diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/controller/MemberController.class b/build/classes/java/main/com/gdscys/cokepoke/member/controller/MemberController.class deleted file mode 100644 index 4af0928b3c961f8000db5f9ae8b04cf8e2cec0d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3335 zcmcImX>-$76g|&b6dV!K0HKtvWp$E*C}nFM(uR~ksKb&#y3p-eesM%($w<$k`2+m{ z{nmfc&d`?dq0`Tu{-#dPlZ0av<7w#N8R>2J-FwcxSNHm_f1dpT;1Z%dF5`ndK16W` zY)s~H1yh5_55UXo}_VhXp^v;A8g4 zHhcAo7YkhOhQ$p79fiKHq72VWbHfly2@8yO)6vdHV0d2Xm9TP08a7%*#IR%0s|Hdx zB4YjFbvS3TD?lA)?4EnHI7N2*7aDYIO)Yt`N3Tr>L8ztn=y8Gb9i#GCm7TH|R25w){vmGtP%56jpI&&{lt>&g1dPNbon;^Zz ztZ}`%^l95N**ER`0!!QQ@Z7fYuP&=(C*~N@C`(Q{Yq<1Ku1Tk%J>MyLu_l<&_Jmxo zKTpc(7i3>0a6i2kev|(jnMtZ%N16~EY7hNAI-o7;M-yY;JIoial7y0x4q_d#GU(Wu z_kv;{%U1FexY#jAI%VU6del&{PEw6%`X{}>(^CQ$y1J}$K^t2V$S;PC$W^nRsWN-h zg11>B&X~9hOmu`7^V3(MCUa-=1~FakDBXq3=I3Q)71+XU8+UNm!h(%O+_N!+T^8=! zSi)yEKF1eK%Bx|hjYI2cIf{4nVCM8x@e}P_vw}hVCC=>0~^?p!=K3CI-Q~GNzjcFKd5hj+D52vACB{VB0)Qz>TIGd zWN2xJQYUEh7;m4%Df*&7EjBTwJ7e52oM_T;I?gBMHQs^O1m5L2xsK9Nrw!ekIFoQ4 z&1GD3I7^Y{nP4Y4NArgI6i4Iu{P^z}9H00VJ-=|(>iRt`uFp5giGoZ2$fvm`l3OU1mF^C#t_%52;r0A$6OoM)8u;QWFxdU?P^{r2*2CVe~AIEzKyiIJo=1 z?|ajIO_#Jy&nYJ*JtrqW_w;Y->33&F(ny{HJ*PkDy_xs!{qB8t`QGTC|9?D~d{G3xB*T|w z_=*f)&Eso%d_9kEXvkP)4MU|hW5dt`->T|MOY<`m8unZZY~QM>Wy`Z}SJk9#JHFvt zj_qmK6^h@{>&o>k&sVmo^!YNC_NHu1JJq0Ob2DojHKn09sFw}jAZ8aGhK3$Hs8;1& zLw8_XF9qR-rr}@;+IeLw*YH(&*{BAJsJ)eF#c?&{g1{=D&~UWmxD|cXx~*KBvbxc7 zUJn5*GsbaTLiBjPKvp)1plXIy)i4|dq-xj|eZhAvyF$4kGd#+STCr?PLZP95!*I=2 z!yP+$d|bonlIhg+O4&0vJ>7KHRh>V5!>C$3G3E8LGOGq{$ukdNm1o7AxDa^atHh@X zc|sryb;I*scHHs>!&}vGxMV9|uhD*4ZRl$rapJ=%{UYDyE4JfGSOyw;w^l>NUei?) zwn?9YP*@~sJrO6xDDegK|#TFTiVjOnVg7PI& z3s!~I7`QZksD1Zr^qQ=;bJTb|#pG;N)s*eCsjAA9WKb?QJ9&Qg8ZB7f?47#hDt5GX zLqnhC-BOK(?z2*~=Xk8K@ntsSv?Ea%ELpa?97vECqZS+vD`MGjEqRX@v;L~ZLlqw) zN0-8k(W?t%TTk`yE6u=(v%A`TVtQh~hAt_8)hSc;&xrosBxms|x|G$Qj85>$<1RfT)|K z7+2}%UBi~fj%{sDNa^&`ddtU=27a=_BB7-w@9eO=Nz-)5`j;KMSx2lER?@(NZIap7U_Sr{ty6!_ANqS(%9wMBG>4 zN=QKw+w5xqr1F>uN1PKqx!?q@ zspc%X^ZKKXc~WlR^c!@R5%o8j)$T~N!5{4xa3oaI-!I??_+cKe6!0VbIFFwc@KgM(fS=ap4lEPCm9gtiDy+tO+&Lr!y<`R<$Hpg6Mgt4e#IL-$sdt36ERUF{G;@* z@f!`#C#4A_A133e>1}u2Xt0C6VAbkXwS_cTExawOyekj174b@7hu4fg7eBDBcDIh( zb|l^{ymB?1iJc4&y%iuygKheR-nRuh&blMqp7WhBzN2j}#u!aO!sN~9e&lCG(w8lg zDS^)8w*|b4Kj!h8l>8DuLtDjS*&FgjS2Ak1%LZ%NSTRiBaT&FK-an1EJpRlYC^^o0 zz-ScaZGN&&S9xQ|HSn)w24lRaD=rvzncohNMT!&my(`-k!!MA8_``2TCX=SN>Lz0p z?@k-l>VoCVN7B@T+vY*Fm&ad7om+yO78DJm_m{&v`S)goe=2sOm;abZ6MTMze=|-Y zi#?q8a^B~0WB(02icuL3+`v1i$3%NLgvY2xfkSv)hKx{J3^B^LSp9IM6snJT7)O!N z8DYLyb|>e(=n|wOkrj#^r3iU378&8&lc7hUK|K=72&=^s-JDN^z$CfE+R1Q@oENX{ z=X{#R&UknV@4X34VFG9Iw8A+&Lo4KGj#Hu5bQp~RYRvE#ip+A8>>Yy*ao)=ndVV2t zX_z4+_jCO@LOe%98t0wGH=q^&fz0(c&~+EtB8S{xLmMTIq6E5;#Yqg(yAeKL;z}V> z#${aLn?~TP1Qg&uaL#cqrU4g^+(mcs=w0NC$L^x1xF<`KVyz2e?I3zMKAo_3j@f<& zqdfZ|o_?IC7wab@3$b^<~qcoTiVJ@jYrcNFenAcMED?RAP|!VpCXxrl94-@%npX0(-%1F_wy zQ2u#BU&jrOVoK*MrgAjZ(*l(01Y^?z$u+ZjGgUd?sl1%3`~p4@Tb_z7572V%738z8 zBHQ&EtwvdoJh+(v8Hhdjpty@n|Fh!xt^W=0#RuWN*u*;;`F#Vr z{#B7cmHMGSpg*eWnc1Z=(N;}A?99&Gd(J)gvHRy=zyAT?HttQLimz*^;2XQ#vCH}d z?oQxa0Z;V=raG^JUjjchYUn?Cvi1GCz}ekY8#R($m8kupysvd+0;3|G2+TS6*ZzTw z6O|aLL+Nkz2)a;U_(5tJ2S)a~!7!C{s`ay*C>E%ssp{PnSnWh{-yf)b8Eg9b!BIHh z5vVZdiDFWebuf|wrxIhC`-cMcSiX#9GT4iLl3JjdB{U3l-+ydkrTauxM{>jf0_{#1 zjr@Ku2@exLB;tUNpIQB0GzygVx1BFh3k5mtXt@`0p?M+ z3!d&Ot;{`v?^=$;A1}$t%dpaA(KjNSW}~CDe3;rw?gg9-TkI$dhTR}m_MBgq%|LNf zZk!;-?pW)X%+$6tgQ)i?h}mSr5fdo2tbj^ink{D7Y^`LujL&O>#&IHn+4pYaDZBAA zS#vpdbon2nP)RZYGkGnK;#+wQT0c~9x}fIPvqsPN60WySuE1g^A4h2%$_L6;etJCK zn*D|a<_m^plb^CVT(4sptvaUBtYZeVbxh!tz}kOTU_1;Pesyq9yWN7di|0q=s zTnV1#1XJW`k>^S7AMspI@G(B2xnW`T~O5fq`S)I1Z<>N`$9eOVF z_@}7Vd?IWqEBs$#ib_7m%_2(gq?C4YgzF9|ryb=N__By{Yz(sM{+r5d2y>M)r1Wsh NHRdZf%ocnb_#0Nti!J~F diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse$MemberResponseBuilder.class b/build/classes/java/main/com/gdscys/cokepoke/member/dto/MemberResponse$MemberResponseBuilder.class deleted file mode 100644 index 39bd712bc1420bb11cbe108fecb481fb1088056a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1639 zcmb_c>rN9v6#k~PY$+9LxrtZMB5k>>cmu8YgGPc$K_di1{59Q9U}3w{>`qB|6CXnp z3<)MafDdIn(_Nso8v==GX6MY=bG~!FZ%+63pVMCe7O|K@68HOH;DLTj7??~Uj)z%# z``Ey=fjmP()Vb|2WGnmpked#7cg;=Z+3s$MA=&hW=kmH>=zU|mwtCCZlP_#D#LKcq z-oc9Pij8KyD!eUTb;y&gNQ*n$+_UvLbjH=5?K6z53my4M_zmg$Vx?(2HQ_O&-@C5x z$`1E^L1FJImaLn*HQze&O-mk#1}(GR$~9|Bnw>DY&SQv5-S6bPITijBc4l3uJz4w6 zJyJ&rkJ?UDH6MnB{56Ycp_L3oXBejRh^t6#%BE+DRa=WZ)Jb_>#}mkg@YS01RT^pB zNTUy_H2RTZn7fvsI=#Srt%HxfIt3TL_ViGfH%wmqAd@aoAOQIqdR6kVrg{2s# zBd)Dmk-~Ng^Dr4+{i8+aF`R~cYs#0|?8MnbFEgSzR_6zzEM1GM&$ikl%U9f0beT(6 zYofa^15dO-&lqwS)NJ=qk8p6sLA_OODd`;!=|j!oRe|2f~-y$1a2@bH~}Vl_(i_$uQMLD5^Jx`E>8XiRBO(4x@=!vI+(?M!=%Ct%;nh+&YPy)9=F8M4zs0B&NKPK@A2C`u=nTJV5T zocV!R@f*3i(?`iiAz`|(}5IYA=2;ec=EobNbphd4__MdJ*dVVsgsxC~_=M2X`L<;8Fp_gZ@#L$qhf YV^D8dQegql@f72DME)dI$jSdbxH_*=-POYMS1@o2bYJa_E2Z0V0;<|1-HHBPp z-~MDFeT6yE0tl6u^|+u>cCA6VLNzC?R?g~Gtr9u|dU>7N)c^FwmZ z_8w73RgtQy!{==&CkWa{%nU2u9qVaqdkw#=UpOM#crWU*bSq>wbr80n1SZBYVPX_x zCURn?F_Xjt6E|>E(hp6{N|cjm6^|6whtj(Lz7&>*Lg6*&ZhWh>ugjrAeh|b-WfXS% zT(|!vP`o9&!pg9cuVIES{s{jPBK%T;Rzwl#6Nrg0;OownMX%`Ng(Il1t+J_Bkt9cO zp4My^-~ujkMdfjcpwhfcAEnPqb7A2Sk;393qFtCAx%ilN6lt=bqu2sD-EQkZN`=fQ zlv%kdguTo-Eu(`8hPZ;O9o8*+DV_X|SfPn{6A8Lx6R9TBU-%#b*}@d!Qbg`4WXL*3 zwh6AgTbjf*TxX4N#T6IA!%IqZ+1)gOY4(u82FNGyRE{jywFIJn-{yDf%);?K|o zLxPDvz#nCt?Hw#av`8KfD;&qAukF&TPirBuH1cs)qj z&m=L~i3e#s#3P2+XMv2Y6J2qb@cY#bVJU{U5tVD_}gkiarwU$%ZGP&lE z%&_s{{ejT>{zPc~*htK1`XJMoX5Z+-%etz8`&A7!=fZp1V~?_#=U5vHjj7mX^S!?Yf9? z|8&GZsBZCShlda)?l=`&iK2mNhS9c!qTa@E^JG8VqTgYP{(^DD^gNIj(<9N8G!;!r zgF(`uMPmc{cadh2WF!-XU9g{|#BhoBWYai=KGM^H11@8bPK@BMke3cFl8liw3S++z zEBqj}J-k0~3B&dM`h5&n$vdIZdg;&|joEQ(Or7fiW_J^_CmJ(;YD~@B0cKAVGZT%O zI5noO!2xEbiFpmz$)x$54S65@jpWC|4pF*;4q948zo5S|%|-GD}()>HV}%;RT)%D|xba(rpD=WB&o|Nze8G diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest.class b/build/classes/java/main/com/gdscys/cokepoke/member/dto/SignupRequest.class deleted file mode 100644 index bf45e6a4b49b5aaab9513d4785d84ba9e5d6e846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcmbtUT~8B16usMS+ifX=fC5DX1f&$``hoHwF#&=Ju^<6#;^VeEwgdZ7cc%z%{v=Io zNHp;W_@j(xwhL`>eL$P+ojW`CoO|coyZ!m=+YcgIqvsh)Q!z~%>C!xs=CL$SQuH)K zNh+pjHAT-98ad=Or`b4QADYY;n@w(+%u^`4<2cOQvJBs6zCsCR8{AT8sB~8FOp&ETb8#ewh)?g(GsbHyge zPQbEOs=BsbGyUqhkC+qIz|)O0S=BPUHb+^~ZOfW~ob1hibl&K#L2LTVa}1j)q&0A% zkFIAbv|Mt%nqKD>c_ywhxn56!CFayb9ZBLgcjC}ildf?l-4TTbaGCeqv-huPlk42! z;w7T;i)Dq>E!RZeff9GvUeiXhBLf;qCEcoFl?{)}efUxpbq>*rky6-9!gW))dQZ<# z-0S?GefhUHvgW~EChD%a53y|~n1_l|mCM1{&M)4my1AZO!}&tVT8)XIffzwhMvPS- zBHmtgPVPD?4`H`;UHZ(S+w`jJ6%X|7$y=2C3av+$-Zh)uGj^G6*AUe@^HFo(9zK!X zpbdVOax{^pEcIt;NSa}3#;ISSji^EXTlXUM!F1k)11;<5_oi~ps)A(3Zi03vQjg(;u-o)fB!l)!+Vk07O#V}$dkh-i4J29oCF3H=rlcmjI-$V94<2-WLa%9g;~HE$SteLg_257 zN+4Nv8&0E0`P05r^4$fcKEubK9c=rOQ`pVZ!!Wv| z$5)EU&~7~jBlTE_1jny~hac0Y;HG~yV` zl1V;^LK5Q)8R^+o+vUzW_x*k8RT#3R9lpm+hr3mCLwUAaEi!bwV!zGAlI|zltF5*x z6SKB!t9gcKF2BVPTa*>S&|9)yvD&DWg}2Ge4r#I_X>n(Zd$#^=DPwBe_8ErW)hk?y z6`}3liq8$iPeEOJ+r=ZCP38928=VT2Sgy&)T( zC6;Vmf*T<;Oll`WS|!StrLPQJL9c-{x(yh5>p?fe)Wtd1Koity3sNdydAuIv@AoF~ zD1}J_CLS}aTpaj}V$yY|9ITahgryi}Ldx4oRi`GumBtfHF;v573(>VYD);Yf&9RB$ zwmH(Dor5&T@(cqtzAF}`YjO47R@-#)6?YZ2%A3n3(V15gPc`||45O!H+3ubmqoA9D z2$r~|q<4_SONK;A%H2kt;Y)iQEvKNc%iOIv!XFJRi=FqjY5sEDJgAEh^N(%zK`D#v z9o~XiZ%#o^Z_AxiK|gCzw4=%s~v1O6NXLe_-w(t; z6b>o)xw&ka%rq=JI*mNg|m>dEue&g^7n?!C9OKYxAu0pKy36^vl9j1rd2cFSzHOSn@(0gELx zN>~<{d%NemTDE1cBjZi^u`d(-qOSs9#sc=MFqH9X;3kPo1SX|d}DcAz*>!bDKOqrp$+BK}+u_!gvc+m&B$K~`=CXTNoCxaT%J!zcB z{4WuMbD}NvPULU6vD=ec#zax-9IN%ZvHTy1mNHNdFMwbtyHc;8Q@zeVW$0dI@*gTs zF|eAUeq}4_$DVwtjKnh;03Mj`0<)X_P^+HYR*9ng&%-d%u2xY<-Yc10_uW8oo|xkJ z(hI0l>K{)-+tuEVOw5d|anJ@+m)ID`gpEJnuRL-FF}<7tom%3iEy6N{AaIE%hgQ%Qnnw^{(zIHdWP(*pa<>NwsAGyJ zJ_Ag%sVNR}7g42ld0=?398w z|E{O7bE#*5=W&_-Se^+qTve_zW-v=g2FwkDG2h5{6y6=7_?bRmDEA^QQpR(*GR!{V z{S`Trnmd(R$>e=Cvp9dYcr>&4T4u3zw%E=nws1YgH&2QKG7Gdfxh#??phB;bdL;@{ F{tdZNGP3{x diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/repository/MemberRepository.class b/build/classes/java/main/com/gdscys/cokepoke/member/repository/MemberRepository.class deleted file mode 100644 index 8cfb9567a53d9d509f3c26bdeefe48fb75d3f540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1046 zcmb_bO-~y!5FLjkn?OmSd=&ZznyONL0uHGv5f!AOL_rDR?(7a*hh2MRd!e~-<4aaYM#SjQSOyi$QR)L3D&bOt49=d2 z__^cjn1_M&CzkvA5))cH#(0E=2bzEt?@puE7pmUK+a6jpit00{rL)gf{2{Hgv!UKE zZecoSTk8mgB2+I!J&cHmezT)Z$Ze8QaFLC8t<5D5gcE` zaP#8$&m{16PUzlfjJ|6v9%GycZb%U;oi-DGl8F8+dPdzjBMpb&zD|W)9_ZBgcq}6l zaVuB20RNP^k-=_1RZhluF0CZS50%nRWKJa0ef)3RmK=%NO%mh<8cDGKh|A_C{I?IX zd+{!Ex)|&&l>ITjstg#EXf4rOESDLSp+a$$q6#^Xwi>Mx)aht>{%GZ|qgSv>7)2J{ dZoumTXl-_Tohs#!Z(w5zy$M^iS1ErR;5QbuK@tD} diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.class b/build/classes/java/main/com/gdscys/cokepoke/member/repository/RefreshTokenRepository.class deleted file mode 100644 index 56be94e9382fe127f425b44e0000f375eea54b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmbVK!A=4(5S=2hf~bgIj6Z-eu_xmJVxmzK4Fm(?!HX%oWhv~oo3^XjZ}5*i_yK;D zah6rt12O8MnM~hw`rey)dw+QafMeKkV9SAq1KR`|Vq|3t**AEvV69Iu{vomFn zj0Q~lbYQiRerrFwimeD}FS0^O7PJV|yWCEccf&Lbx#ijrDDkXIWgvXXY^*tf`(Ji! zcU%=x-!pDvsHX~d|;uZ^%uC-gdE{qOA040FB>hgauw#?^s}waYI>fZpuo zi7!4nOh-Uqw;xL@LVhQV7zO-PN@ZDUKRSJ|RD!`VaAlK-qg7ub(5Che*5=eMXM>Yo ztVCuYfunypSSCQAfM*4_u}~yXgc9au%t{0t467*s6@;pJXl()E+pMSt>+|9b*u+@I Hu62M9hl}U* diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/service/CustomUserDetailsService.class b/build/classes/java/main/com/gdscys/cokepoke/member/service/CustomUserDetailsService.class deleted file mode 100644 index 929ecdcb154463c7241bda91d97ad16ee18959d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3931 zcmcInX;%|h7=A9>Kp0C*1s7bXMG2ubF0C6%6$G_Luz*-=tsRm9Mv|FyW&+aM+I`g%cq(;A9Ao<5UO=8nk9+6h zcJW~R^lg;g0+F<(rOrCK-8(1Wrk2qKhN6kf+Kd)YYvyEp#I+4`vb!^3*^_Z6D<=~+ zkIh>4bllOCIoojODAm^EIdVwpu4bg2xa4-s8&gb8pOqrxri5YYgE^`Hs5YMFN+e+= zwe*-~8*=V1*0@uKBXGEqS!6$BB=vY-&T*|wK-!46L7}yJhN?&zORNzH^k zN(!IW-6<<|Mw5oQy3M7!LxyR%Jp$d)N@`R>w{uLOHLYdFQ(F5{nA>*=T>OuKmTnug z+yN_RriykEfeO-h3QShCEM*Zr(~p^Zbbp-}ivqDqSe8npi$<)Rozw>m87Q0X({eT6z0vZqOGoRLJD1htg_u#X0j&xys(1#M7#6*jXxm?b1G~&lC`TKr(yHRrs8E>Rq+b0(f-@>M#ZamO~LCb-oTp* z-cs>4-cj)`-c#{DK47v`C`5P5*b;d|gq&S+VIJ-*00&;~gdwG~)X5ScIc0ku96IK{o?d!TFtQuXRd zoi5!K1g6+s7Og58J(43PhHjIx(X#u~jy^hNTeFKCO6@EjFM~2=M?1$t_!OTBY?R%i zjrE~zLKe)nS;L)b%lC?dZ9-seMw{0AEHkOO=eWa><7%eMo>1b_Qq6;{QlPn=L6-A7e19b(_85BU1n`p-wV#xbU>V)P@QD)Yka>&hLD=qO|T}YFB z)Q#vaX;&>qEf?r2*E(w38uPe0+IeAVvKLBRo<;s78P~g(hnGM{v8>o+U{Q~h5XP&S+o&@d-2nZDgg!1;Vm+%DHZa_F3l8HeQ$#y@j z$P@pHhV!ungn%1pT(rYu-I`~u`eLNUAQ$GC&&41Fl1tZ3sIhshn#X4&Y#Z)Pu)x1Ouc!{tx=fs7?R? diff --git a/build/classes/java/main/com/gdscys/cokepoke/member/service/IMemberService.class b/build/classes/java/main/com/gdscys/cokepoke/member/service/IMemberService.class deleted file mode 100644 index 28c18cfc89a614e331d3634c648fcd9eb68bb2ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 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 Wvn9)C@HpRuXJLk{EmSdUR_|W|5dA&? diff --git a/build/classes/java/main/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.class b/build/classes/java/main/com/gdscys/cokepoke/validation/implementation/PasswordMatchesValidator.class deleted file mode 100644 index 22ece6b80245f9306828c4f553abf49a65c69ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1784 zcmb7E%W@M(6g_P{28r=Q!Y1L3iNQ}i2_b=CV+>AFSy(_J@FKhRs3VUV%_uW1Ae&TW zmtTM%VB-xNr-}u|ns1^gPS1=b*@!Y(bl>hfx6e8E_U(E9@y%NR*YIl@qnI<(yoCj0 zFPAZbMGKCx-{ym%YH#D+0Nh*$sjGTG&tm zqw8Lv?sZz5DtaV0eR`_vp)36j8F^-(IrDnUiv@mLcf*#`Y{c$gvEznMRGY(jDt)gZ zwHF4C*J}H!r2?I9AILa<7DkPl)b5swH`2f`S`x6lbSrRYW_?>em5wiirgMLDTe*5E z@jUNGUJHX*N74&)7lkgZp6jLA-sq=`YO%u5DCMwQ&PHwlJtUzf@2g%b2ur9+LuB4mmiW zcs8cY@tat&aSJOJR&Crin>%J&1K-)*L8yIo`O3EnoW!X_!6lr=88V(_RGxeloa3rA!~pP&)s+VB-b!pDB;a{ZHWO_Qr=xQ=qz{{a^*6jw#RvLV8l K6sIwh*x64ue8R{8 diff --git a/build/classes/java/test/com/gdscys/cokepoke/CokePokeApplicationTests.class b/build/classes/java/test/com/gdscys/cokepoke/CokePokeApplicationTests.class deleted file mode 100644 index 4ef02c73380ead1d854816c603359c74c45bf580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmb7AOG^VW5T0xwtL3q zB<(>E4+dr?^UZwUO!E2l{s91|u+@SZY=qDYVUs}fTqN?YHLwVha-l+G$#5`7`9Fq9RNIw@3YjdW$W zxRP$i-M>cmXY7#?IPqF#VWdj$4a>!oHglS2ZK*{$T-|R)N510{aX%%3Iy49z|L2he zx^5=Tm`dqQG85dw9t8OF?gVJ43HbeZqZkRs#^D=~S6>d%H$51_3f`kd1FS*|Gk`Xd h15ZA}%#nW)+dqh8NsO@3$*y4xVBPx;iZ9SEz&GMKgINFo diff --git a/build/classes/java/test/com/gdscys/cokepoke/controller/FriendshipControllerTest.class b/build/classes/java/test/com/gdscys/cokepoke/controller/FriendshipControllerTest.class deleted file mode 100644 index e195605c07a1a19b784703b5efa94815bc6cc583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5480 zcmb_g>wgsG6@Dfp%(59SE{Ij6T|p&4U?3nDv69UNx#WT*5D+a+cHiAhvOBZPC6`{Q zwXGG~S`|xMw6>*1s8$6Gq}cxYxqk`?|3ZI#-q{ViONL}YzU=Ir_dVx4&pGEk@7ewD z|Ni-J0NZgjiWTUK;OGJ@$1(Zwl8WOIyd1&aDC+P^J-&kz5xg3K5kY?hNx3JbLdb=5 z6d4Reu^47O25~~J4XMbg$VKrmtSD^crSN0~jtVyl4}KKG7+HW(jLC1`jpBRweiT2z z52N@IPSxYbcrA*b;C1=!r&9K_2!5_W&DqJJ&f%njjUBd=(cQdbTA8$CW4C$V5 zJ$*#<>#lHyv%=Fm3;TB|c=V8Od1g)=FBemZJ>h%yi0OzF%`VA_T)%J*iM;Kaa-+1Cv~zkUYfk_w5-|vgCgm58u`3%6l@4ArVZB<&S);H4;slK z*S7SO;Tip=mD0P*wo_d-QYlBcj8&{-&=@xKtYKyJ9#4j!%L`i>N6)alBSzL23g$m& zTBi5Bf_V*Vk0_{ZwNsQX?l3LU<;!^W8q9$-W+#p85yLU%dr?^H4VZMaGn91Fwmiqq zW`(1dn9_Su*vkSSo;p`}eqO<JkFY!i(e}}#$Ona@;td6l-^FCn^Xj`Sx0!A}Ym9ZVQYF6OLY$UQO`N;=B*5dE4>yKGPeJ^?sPePahGV zPmBKOPM(X+6y*)q#ym&P}dHVd+>2vX0XU3z{2+jo*;k15M%<=skPqpVQ{+d`w*Z`)pF1bc!u z(n5JLi;Z{5q8MdSxNI7FyZn}tA!n$=vn7Mh^UpeBk}7Mk;4rWut+py#lsv7<=}WgV@zBsQ|UG(3ZC3bt&Hzc9jMJ}_eBd@J5_ z(l;E@7~gMO8Oz>~@f+hk!uGR#*uFOqKfn`ZXlTL~4UO2KpkbCan6h(*X%$-_J3~;Q z%^3=_8>uD{{6fW>8cyS_;&M}IxmeLn#g#2HRtRAubOoEjAe7FzUW8F9BMraAuT=b6 z!`t|cMDdP_cQtGRPtVr5jCpohPdX${`YZqi+r!jkSxfUPQ;rM ziN^S0Hd&F1AK)g2Rl(8{tlKS=UAE#mL2Ff`pHn!1(<5N6Xjo(zRismO5D2iK(K73??-)o49nhK*qigDbo|Ud8*B10u(0&XDYLL*Zy=sNPWn zRl+|cTtDk2f*adqq!LxZRok@MsX83()>GR|pt$YOFJrEF_przWt;>6Vi1l@H5IqU^QxKbSJ-Qg{^oNyZENyIhv^n%v=e~0%Pm0qV@*rj>YE3)R=k= zkqIoQLEmk0G*%z0pDEU23u6n*#fxrW@iD0tQzx*b2IF|>Kd1`?3(Ex85SzeKIw*l& z&KQD|<0AyOk>J{~ga5MZEF&;hBrqM}ZwF+a=l*#CnRkLL04;R4>;@h_M$9$W@W?p6 z(LvFpvB&293oEYU@%7_ac^Tgv$G652zm6xyv1$UVYj7P;PT;8uRI3o7m)%&3X68D9 zHE3amo0-*C;%lR%JwUiT2zg5p;ZkOJcaXhiYS%L4iJ&f45@`!1t(3I6RNX_h7hLSc zKKa4hbrv#ewPc>2oy-A}=^&X-lIbF>4wC66nS%uR;{B63FoR6TEMyiwAToU6}5PYZfx~u{G6|*&LZkk&GajG|6O0Mv%+^$(STFc>iR& i?;umdRLkDd4yWqzDo)4nS`0%mydJ|DwdM^S z!*QI2r5;9fq~k~+6NkX4l8nVLuEUOF0+VrMky{4`uDZ*|aSmP_K4csLrs^?`LL4*r zp1S+KlKntkeyBmux#`K?skDaX9@iT){k&&8W22sx6Vt9YX-eTsb6Sj;zVN29LYlqB z^#?UP*&jI4&WSYYgx4?fu5YV_%39jZnPVA0J>#2ccapCrg;`u@dW#Fq-W8g(wt3XEg_H5e?R<(1 z?6lBuAktiUVaSy$&BH5oY0z*-CPZ5HTKT;2H0%m(jat4GULlt?C#>|O?>c72lGcdr zWX$7BmQ!7~G8s?!3{j$I!kV(otmTZEDXF5)*XuhNK502}(8>mcy7ooevE?BRYZ|u? zYN+jSGn8)Zu^rJDs4xv!481burmgIt<=N`FB&?O=HXZGWq?>jf>ABgg@XQm8CjFKk z2bggpsq=*l@*1{-ZtCCsOyO?D?QG|8>KfhtdcTZj3Rj|`@)eL z;$4Nb$cJ^I<3}2vTE$?=@3X7C?zH`U)|%;KVJdV}#rPQa-@SSN?VIdVNn{ziVCzk_jSk#l#tgK<%8McNq7HfM~%ij4* z*YDlBkevVU_T2f~^Y34oyZB!6{?+SqAHOsA_XR`Ad$-=2yZ8~qnQ{X!Ee_i%?G2Tw zYgSdIVP9kr)tz#5so2jM{ys6_Y18?Je>2*u_b*U}g!p57CZrC&W#kqjs72==h_^E-P;T;3d;T!B*X1J2w zyxio9olwWm4P3+}9hVIp#4mLG(!jg8V>!wT|Bycn?=~{MNwx_&~?+4E!F~bX+&^ zA#UjSgMmNdPX_*szZm!{t{M0U*EBpkJC&Czk0~A})9jZbJcHW& zqLqg;T0F!$sv0D`V)ZNx6s2Nn5A1A4cs#ahdH(bG@FNHfRmO39WFH7y$sYzt3DpOI>-3MMB&YL!c0J@r~LJswv6T26p6;1=j?tP(}ZUMkcpLRv6KOs$WC zDawY1b++FT_8QJW`>I8?3S(IdeN^TP`k#~eCfnazD0F1`;Uv2}&*h9u(es6Z`hpT( zD8g2Lfj02twhlGw$Oq2{KCR{NxAGm1;GkKf?n{R=cx6PmdZLIuw5 zxQ*J+PF#X0eH?8+faS4`pmy z=n*8(_+1uaKMK*h(*(KSScQLh;xvzS2X% z z>Z0NB1E?_0)lk{?U@AvRrJGcakxCD#bdyRiVfPW#@y}1?l?p0H7ODKVlojU-X5}F{ ze0DYB2e5%LKS|<)Bz}s-UnTKD5 - - - - -Test results - PokeControllerTest - - - - - -

-

PokeControllerTest

-
-
- - - - - -
-
- - - - - - - -
-
-
3
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
4.985s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestMethod nameDurationResult
포크하기try_poke_friend()1.313spassed
친구 아닌 사람 포크하기try_poke_stranger()2.372spassed
24시간 이내에는 한번만 포크 가능try_poke_twice_in_a_day()1.300spassed
-
-
-

Standard output

- -
20:36:32.772 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
-20:36:32.777 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
-20:36:32.793 [Test worker] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.gdscys.cokepoke.controller.PokeControllerTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
-20:36:32.799 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.gdscys.cokepoke.controller.PokeControllerTest], using SpringBootContextLoader
-20:36:32.801 [Test worker] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: class path resource [com/gdscys/cokepoke/controller/PokeControllerTest-context.xml] does not exist
-20:36:32.801 [Test worker] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: class path resource [com/gdscys/cokepoke/controller/PokeControllerTestContext.groovy] does not exist
-20:36:32.802 [Test worker] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: no resource found for suffixes {-context.xml, Context.groovy}.
-20:36:32.802 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.gdscys.cokepoke.controller.PokeControllerTest]: PokeControllerTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
-20:36:32.832 [Test worker] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.gdscys.cokepoke.controller.PokeControllerTest]
-20:36:32.861 [Test worker] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [/Users/jinny/Downloads/coke-poke/build/classes/java/main/com/gdscys/cokepoke/CokePokeApplication.class]
-20:36:32.862 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.gdscys.cokepoke.CokePokeApplication for test class com.gdscys.cokepoke.controller.PokeControllerTest
-20:36:32.916 [Test worker] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.gdscys.cokepoke.controller.PokeControllerTest]: using defaults.
-20:36:32.917 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.event.ApplicationEventsTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener]
-20:36:32.926 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@304a9d7b, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6bfdb014, org.springframework.test.context.event.ApplicationEventsTestExecutionListener@72889280, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@606fc505, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@4aa3d36, org.springframework.test.context.support.DirtiesContextTestExecutionListener@2d140a7, org.springframework.test.context.transaction.TransactionalTestExecutionListener@347bdeef, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@2aa27288, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@7f34a967, org.springframework.test.context.event.EventPublishingTestExecutionListener@77e80a5e, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@1d8e2eea, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@240139e1, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@7ea4d397, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@49298ce7, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@253c1256, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@8dfe921, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@503fbbc6]
-20:36:32.928 [Test worker] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null].
-
-  .   ____          _            __ _ _
- /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
-( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
- \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
-  '  |____| .__|_| |_|_| |_\__, | / / / /
- =========|_|==============|___/=/_/_/_/
- :: Spring Boot ::               (v2.7.16)
-
-2023-10-11 20:36:33.119  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : Starting PokeControllerTest using Java 11.0.17 on ganghuijins-MacBook-Air.local with PID 31823 (started by jinny in /Users/jinny/Downloads/coke-poke)
-2023-10-11 20:36:33.120  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : No active profile set, falling back to 1 default profile: "default"
-2023-10-11 20:36:33.518  INFO 31823 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2023-10-11 20:36:33.549  INFO 31823 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 27 ms. Found 4 JPA repository interfaces.
-2023-10-11 20:36:33.848  INFO 31823 --- [    Test worker] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
-2023-10-11 20:36:33.872  INFO 31823 --- [    Test worker] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.15.Final
-2023-10-11 20:36:33.976  INFO 31823 --- [    Test worker] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
-2023-10-11 20:36:34.024  INFO 31823 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
-2023-10-11 20:36:34.094  INFO 31823 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
-2023-10-11 20:36:34.105  INFO 31823 --- [    Test worker] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
-2023-10-11 20:36:34.702  INFO 31823 --- [    Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
-2023-10-11 20:36:34.707  INFO 31823 --- [    Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2023-10-11 20:36:35.135  INFO 31823 --- [    Test worker] o.s.s.web.DefaultSecurityFilterChain     : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4c941d19, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5248c05a, org.springframework.security.web.context.SecurityContextPersistenceFilter@5f01361e, org.springframework.security.web.header.HeaderWriterFilter@1e2bc241, org.springframework.security.web.authentication.logout.LogoutFilter@33502cfe, com.gdscys.cokepoke.auth.jwt.JwtAuthFilter@151f1734, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5003c114, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e4bccc, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@601e7c97, org.springframework.security.web.session.SessionManagementFilter@112b3298, org.springframework.security.web.access.ExceptionTranslationFilter@4629dde5, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@40ef1934]
-2023-10-11 20:36:35.140  WARN 31823 --- [    Test worker] o.s.s.c.a.web.builders.WebSecurity       : You are asking Spring Security to ignore org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead.
-2023-10-11 20:36:35.140  INFO 31823 --- [    Test worker] o.s.s.web.DefaultSecurityFilterChain     : Will not secure org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a
-2023-10-11 20:36:35.288  WARN 31823 --- [    Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
-2023-10-11 20:36:35.496  INFO 31823 --- [    Test worker] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb'
-2023-10-11 20:36:36.402  INFO 31823 --- [    Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
-2023-10-11 20:36:36.402  INFO 31823 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
-2023-10-11 20:36:36.403  INFO 31823 --- [    Test worker] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 1 ms
-2023-10-11 20:36:36.416  INFO 31823 --- [    Test worker] c.g.c.controller.PokeControllerTest      : Started PokeControllerTest in 3.471 seconds (JVM running for 4.076)
-2023-10-11 20:36:36.438  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
-
-MockHttpServletRequest:
-      HTTP Method = POST
-      Request URI = /poke/
-       Parameters = {}
-          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
-             Body = {"receiverUsername":"test2"}
-    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
-
-Handler:
-             Type = com.gdscys.cokepoke.poke.controller.PokeController
-           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
-
-Async:
-    Async started = false
-     Async result = null
-
-Resolved Exception:
-             Type = java.util.NoSuchElementException
-
-ModelAndView:
-        View name = null
-             View = null
-            Model = null
-
-FlashMap:
-       Attributes = null
-
-MockHttpServletResponse:
-           Status = 404
-    Error message = null
-          Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
-     Content type = application/json
-             Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"FriendshipService.java","lineNumber":65,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"<generated>","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$FastClassBySpringCGLIB$$d8da9ae3","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"MethodProxy.java","lineNumber":218,"className":"org.springframework.cglib.proxy.MethodProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"CglibAopProxy.java","lineNumber":386,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"CglibAopProxy.java","lineNumber":85,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"CglibAopProxy.java","lineNumber":703,"className":"org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"<generated>","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$EnhancerBySpringCGLIB$$b3c423d5","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":44,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_stranger","fileName":"PokeControllerTest.java","lineNumber":74,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":"No friendship found between test2 and test2","suppressed":[],"localizedMessage":"No friendship found between test2 and test2"},"message":"No friendship found between test2 and test2","status":"NOT_FOUND","errors":null}
-    Forwarded URL = null
-   Redirected URL = null
-          Cookies = []
-2023-10-11 20:36:38.796  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
-2023-10-11 20:36:38.807  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
-
-MockHttpServletRequest:
-      HTTP Method = POST
-      Request URI = /poke/
-       Parameters = {}
-          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
-             Body = {"receiverUsername":"test3"}
-    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
-
-Handler:
-             Type = com.gdscys.cokepoke.poke.controller.PokeController
-           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
-
-Async:
-    Async started = false
-     Async result = null
-
-Resolved Exception:
-             Type = null
-
-ModelAndView:
-        View name = null
-             View = null
-            Model = null
-
-FlashMap:
-       Attributes = null
-
-MockHttpServletResponse:
-           Status = 201
-    Error message = null
-          Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
-     Content type = text/plain;charset=UTF-8
-             Body = Poked test3
-    Forwarded URL = null
-   Redirected URL = null
-          Cookies = []
-
-MockHttpServletRequest:
-      HTTP Method = POST
-      Request URI = /poke/
-       Parameters = {}
-          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
-             Body = {"receiverUsername":"test3"}
-    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
-
-Handler:
-             Type = com.gdscys.cokepoke.poke.controller.PokeController
-           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
-
-Async:
-    Async started = false
-     Async result = null
-
-Resolved Exception:
-             Type = java.lang.NullPointerException
-
-ModelAndView:
-        View name = null
-             View = null
-            Model = null
-
-FlashMap:
-       Attributes = null
-
-MockHttpServletResponse:
-           Status = 500
-    Error message = null
-          Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
-     Content type = application/json
-             Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$checkOncePerDay$1","fileName":"PokeService.java","lineNumber":59,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"accept","fileName":"ReferencePipeline.java","lineNumber":176,"className":"java.util.stream.ReferencePipeline$2$1","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Iterator.java","lineNumber":133,"className":"java.util.Iterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Spliterators.java","lineNumber":1801,"className":"java.util.Spliterators$IteratorSpliterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"copyInto","fileName":"AbstractPipeline.java","lineNumber":484,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"wrapAndCopyInto","fileName":"AbstractPipeline.java","lineNumber":474,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluateSequential","fileName":"ReduceOps.java","lineNumber":913,"className":"java.util.stream.ReduceOps$ReduceOp","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluate","fileName":"AbstractPipeline.java","lineNumber":234,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"collect","fileName":"ReferencePipeline.java","lineNumber":578,"className":"java.util.stream.ReferencePipeline","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"checkOncePerDay","fileName":"PokeService.java","lineNumber":62,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":45,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_twice_in_a_day","fileName":"PokeControllerTest.java","lineNumber":91,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":null,"suppressed":[],"localizedMessage":null},"message":null,"status":"INTERNAL_SERVER_ERROR","errors":null}
-    Forwarded URL = null
-   Redirected URL = null
-          Cookies = []
-2023-10-11 20:36:40.103  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
-2023-10-11 20:36:40.106  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true]
-
-MockHttpServletRequest:
-      HTTP Method = POST
-      Request URI = /poke/
-       Parameters = {}
-          Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"]
-             Body = {"receiverUsername":"test3"}
-    Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]}
-
-Handler:
-             Type = com.gdscys.cokepoke.poke.controller.PokeController
-           Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest)
-
-Async:
-    Async started = false
-     Async result = null
-
-Resolved Exception:
-             Type = null
-
-ModelAndView:
-        View name = null
-             View = null
-            Model = null
-
-FlashMap:
-       Attributes = null
-
-MockHttpServletResponse:
-           Status = 201
-    Error message = null
-          Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"]
-     Content type = text/plain;charset=UTF-8
-             Body = Poked test3
-    Forwarded URL = null
-   Redirected URL = null
-          Cookies = []
-2023-10-11 20:36:41.417  INFO 31823 --- [    Test worker] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]
-
-
-
-
- -
- - diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e..0000000 --- a/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913..0000000 --- a/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html deleted file mode 100644 index 6323008..0000000 --- a/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
3
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
4.985s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-com.gdscys.cokepoke.controller -3004.985s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-com.gdscys.cokepoke.controller.PokeControllerTest -3004.985s100%
-
-
- -
- - diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a..0000000 --- a/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html b/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html deleted file mode 100644 index 391729b..0000000 --- a/build/reports/tests/test/packages/com.gdscys.cokepoke.controller.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package com.gdscys.cokepoke.controller - - - - - -
-

Package com.gdscys.cokepoke.controller

- -
- - - - - -
-
- - - - - - - -
-
-
3
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
4.985s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-PokeControllerTest -3004.985s100%
-
-
- -
- - diff --git a/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml b/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml deleted file mode 100644 index 4de245d..0000000 --- a/build/test-results/test/TEST-com.gdscys.cokepoke.controller.PokeControllerTest.xml +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - true]], class annotated with @DirtiesContext [false] with mode [null]. - - . ____ _ __ _ _ - /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ -( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ - \\/ ___)| |_)| | | | | || (_| | ) ) ) ) - ' |____| .__|_| |_|_| |_\__, | / / / / - =========|_|==============|___/=/_/_/_/ - :: Spring Boot :: (v2.7.16) - -2023-10-11 20:36:33.119 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : Starting PokeControllerTest using Java 11.0.17 on ganghuijins-MacBook-Air.local with PID 31823 (started by jinny in /Users/jinny/Downloads/coke-poke) -2023-10-11 20:36:33.120 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : No active profile set, falling back to 1 default profile: "default" -2023-10-11 20:36:33.518 INFO 31823 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2023-10-11 20:36:33.549 INFO 31823 --- [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 27 ms. Found 4 JPA repository interfaces. -2023-10-11 20:36:33.848 INFO 31823 --- [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] -2023-10-11 20:36:33.872 INFO 31823 --- [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.15.Final -2023-10-11 20:36:33.976 INFO 31823 --- [ Test worker] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} -2023-10-11 20:36:34.024 INFO 31823 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... -2023-10-11 20:36:34.094 INFO 31823 --- [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. -2023-10-11 20:36:34.105 INFO 31823 --- [ Test worker] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect -2023-10-11 20:36:34.702 INFO 31823 --- [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2023-10-11 20:36:34.707 INFO 31823 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' -2023-10-11 20:36:35.135 INFO 31823 --- [ Test worker] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4c941d19, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5248c05a, org.springframework.security.web.context.SecurityContextPersistenceFilter@5f01361e, org.springframework.security.web.header.HeaderWriterFilter@1e2bc241, org.springframework.security.web.authentication.logout.LogoutFilter@33502cfe, com.gdscys.cokepoke.auth.jwt.JwtAuthFilter@151f1734, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5003c114, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6e4bccc, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@601e7c97, org.springframework.security.web.session.SessionManagementFilter@112b3298, org.springframework.security.web.access.ExceptionTranslationFilter@4629dde5, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@40ef1934] -2023-10-11 20:36:35.140 WARN 31823 --- [ Test worker] o.s.s.c.a.web.builders.WebSecurity : You are asking Spring Security to ignore org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. -2023-10-11 20:36:35.140 INFO 31823 --- [ Test worker] o.s.s.web.DefaultSecurityFilterChain : Will not secure org.springframework.boot.autoconfigure.security.servlet.StaticResourceRequest$StaticResourceRequestMatcher@7f7f544a -2023-10-11 20:36:35.288 WARN 31823 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2023-10-11 20:36:35.496 INFO 31823 --- [ Test worker] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb' -2023-10-11 20:36:36.402 INFO 31823 --- [ Test worker] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet '' -2023-10-11 20:36:36.402 INFO 31823 --- [ Test worker] o.s.t.web.servlet.TestDispatcherServlet : Initializing Servlet '' -2023-10-11 20:36:36.403 INFO 31823 --- [ Test worker] o.s.t.web.servlet.TestDispatcherServlet : Completed initialization in 1 ms -2023-10-11 20:36:36.416 INFO 31823 --- [ Test worker] c.g.c.controller.PokeControllerTest : Started PokeControllerTest in 3.471 seconds (JVM running for 4.076) -2023-10-11 20:36:36.438 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] - -MockHttpServletRequest: - HTTP Method = POST - Request URI = /poke/ - Parameters = {} - Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] - Body = {"receiverUsername":"test2"} - Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} - -Handler: - Type = com.gdscys.cokepoke.poke.controller.PokeController - Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) - -Async: - Async started = false - Async result = null - -Resolved Exception: - Type = java.util.NoSuchElementException - -ModelAndView: - View name = null - View = null - Model = null - -FlashMap: - Attributes = null - -MockHttpServletResponse: - Status = 404 - Error message = null - Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] - Content type = application/json - Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"FriendshipService.java","lineNumber":65,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$FastClassBySpringCGLIB$$d8da9ae3","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"MethodProxy.java","lineNumber":218,"className":"org.springframework.cglib.proxy.MethodProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"CglibAopProxy.java","lineNumber":386,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"CglibAopProxy.java","lineNumber":85,"className":"org.springframework.aop.framework.CglibAopProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"CglibAopProxy.java","lineNumber":703,"className":"org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"getFriendshipByMembers","fileName":"","lineNumber":-1,"className":"com.gdscys.cokepoke.friendship.service.FriendshipService$$EnhancerBySpringCGLIB$$b3c423d5","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":44,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_stranger","fileName":"PokeControllerTest.java","lineNumber":74,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":"No friendship found between test2 and test2","suppressed":[],"localizedMessage":"No friendship found between test2 and test2"},"message":"No friendship found between test2 and test2","status":"NOT_FOUND","errors":null} - Forwarded URL = null - Redirected URL = null - Cookies = [] -2023-10-11 20:36:38.796 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@268ee31d, testMethod = try_poke_stranger@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] -2023-10-11 20:36:38.807 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] - -MockHttpServletRequest: - HTTP Method = POST - Request URI = /poke/ - Parameters = {} - Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] - Body = {"receiverUsername":"test3"} - Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} - -Handler: - Type = com.gdscys.cokepoke.poke.controller.PokeController - Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) - -Async: - Async started = false - Async result = null - -Resolved Exception: - Type = null - -ModelAndView: - View name = null - View = null - Model = null - -FlashMap: - Attributes = null - -MockHttpServletResponse: - Status = 201 - Error message = null - Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] - Content type = text/plain;charset=UTF-8 - Body = Poked test3 - Forwarded URL = null - Redirected URL = null - Cookies = [] - -MockHttpServletRequest: - HTTP Method = POST - Request URI = /poke/ - Parameters = {} - Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] - Body = {"receiverUsername":"test3"} - Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} - -Handler: - Type = com.gdscys.cokepoke.poke.controller.PokeController - Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) - -Async: - Async started = false - Async result = null - -Resolved Exception: - Type = java.lang.NullPointerException - -ModelAndView: - View name = null - View = null - Model = null - -FlashMap: - Attributes = null - -MockHttpServletResponse: - Status = 500 - Error message = null - Headers = [Content-Type:"application/json", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] - Content type = application/json - Body = {"exception":{"cause":null,"stackTrace":[{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$checkOncePerDay$1","fileName":"PokeService.java","lineNumber":59,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"accept","fileName":"ReferencePipeline.java","lineNumber":176,"className":"java.util.stream.ReferencePipeline$2$1","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Iterator.java","lineNumber":133,"className":"java.util.Iterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEachRemaining","fileName":"Spliterators.java","lineNumber":1801,"className":"java.util.Spliterators$IteratorSpliterator","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"copyInto","fileName":"AbstractPipeline.java","lineNumber":484,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"wrapAndCopyInto","fileName":"AbstractPipeline.java","lineNumber":474,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluateSequential","fileName":"ReduceOps.java","lineNumber":913,"className":"java.util.stream.ReduceOps$ReduceOp","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"evaluate","fileName":"AbstractPipeline.java","lineNumber":234,"className":"java.util.stream.AbstractPipeline","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"collect","fileName":"ReferencePipeline.java","lineNumber":578,"className":"java.util.stream.ReferencePipeline","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"checkOncePerDay","fileName":"PokeService.java","lineNumber":62,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeService.java","lineNumber":45,"className":"com.gdscys.cokepoke.poke.service.PokeService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"poke","fileName":"PokeController.java","lineNumber":28,"className":"com.gdscys.cokepoke.poke.controller.PokeController","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doInvoke","fileName":"InvocableHandlerMethod.java","lineNumber":205,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeForRequest","fileName":"InvocableHandlerMethod.java","lineNumber":150,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAndHandle","fileName":"ServletInvocableHandlerMethod.java","lineNumber":117,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":808,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1072,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":965,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1006,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doPost","fileName":"FrameworkServlet.java","lineNumber":909,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":555,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"FrameworkServlet.java","lineNumber":883,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"TestDispatcherServlet.java","lineNumber":72,"className":"org.springframework.test.web.servlet.TestDispatcherServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"service","fileName":"HttpServlet.java","lineNumber":623,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":167,"className":"org.springframework.mock.web.MockFilterChain$ServletFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":80,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ErrorPageSecurityFilter.java","lineNumber":70,"className":"org.springframework.boot.web.servlet.filter.ErrorPageSecurityFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":337,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"FilterSecurityInterceptor.java","lineNumber":115,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterSecurityInterceptor.java","lineNumber":81,"className":"org.springframework.security.web.access.intercept.FilterSecurityInterceptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":122,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"ExceptionTranslationFilter.java","lineNumber":116,"className":"org.springframework.security.web.access.ExceptionTranslationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":126,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SessionManagementFilter.java","lineNumber":81,"className":"org.springframework.security.web.session.SessionManagementFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"AnonymousAuthenticationFilter.java","lineNumber":109,"className":"org.springframework.security.web.authentication.AnonymousAuthenticationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextHolderAwareRequestFilter.java","lineNumber":149,"className":"org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"RequestCacheAwareFilter.java","lineNumber":63,"className":"org.springframework.security.web.savedrequest.RequestCacheAwareFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"JwtAuthFilter.java","lineNumber":74,"className":"com.gdscys.cokepoke.auth.jwt.JwtAuthFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":103,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"LogoutFilter.java","lineNumber":89,"className":"org.springframework.security.web.authentication.logout.LogoutFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doHeadersAfter","fileName":"HeaderWriterFilter.java","lineNumber":90,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"HeaderWriterFilter.java","lineNumber":75,"className":"org.springframework.security.web.header.HeaderWriterFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":112,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"SecurityContextPersistenceFilter.java","lineNumber":82,"className":"org.springframework.security.web.context.SecurityContextPersistenceFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"WebAsyncManagerIntegrationFilter.java","lineNumber":55,"className":"org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"DisableEncodeUrlFilter.java","lineNumber":42,"className":"org.springframework.security.web.session.DisableEncodeUrlFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":346,"className":"org.springframework.security.web.FilterChainProxy$VirtualFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FilterChainProxy.java","lineNumber":221,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"FilterChainProxy.java","lineNumber":186,"className":"org.springframework.security.web.FilterChainProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeDelegate","fileName":"DelegatingFilterProxy.java","lineNumber":354,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"DelegatingFilterProxy.java","lineNumber":267,"className":"org.springframework.web.filter.DelegatingFilterProxy","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"RequestContextFilter.java","lineNumber":100,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":93,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":201,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":117,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"doFilter","fileName":"MockFilterChain.java","lineNumber":134,"className":"org.springframework.mock.web.MockFilterChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"perform","fileName":"MockMvc.java","lineNumber":201,"className":"org.springframework.test.web.servlet.MockMvc","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"try_poke_twice_in_a_day","fileName":"PokeControllerTest.java","lineNumber":91,"className":"com.gdscys.cokepoke.controller.PokeControllerTest","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeMethod","fileName":"ReflectionUtils.java","lineNumber":725,"className":"org.junit.platform.commons.util.ReflectionUtils","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"MethodInvocation.java","lineNumber":60,"className":"org.junit.jupiter.engine.execution.MethodInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":131,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"intercept","fileName":"TimeoutExtension.java","lineNumber":149,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestableMethod","fileName":"TimeoutExtension.java","lineNumber":140,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"interceptTestMethod","fileName":"TimeoutExtension.java","lineNumber":84,"className":"org.junit.jupiter.engine.extension.TimeoutExtension","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$ofVoidMethod$0","fileName":"ExecutableInvoker.java","lineNumber":115,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invoke$0","fileName":"ExecutableInvoker.java","lineNumber":105,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":106,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"proceed","fileName":"InvocationInterceptorChain.java","lineNumber":64,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"chainAndInvoke","fileName":"InvocationInterceptorChain.java","lineNumber":45,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"InvocationInterceptorChain.java","lineNumber":37,"className":"org.junit.jupiter.engine.execution.InvocationInterceptorChain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":104,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ExecutableInvoker.java","lineNumber":98,"className":"org.junit.jupiter.engine.execution.ExecutableInvoker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$invokeTestMethod$7","fileName":"TestMethodTestDescriptor.java","lineNumber":214,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeTestMethod","fileName":"TestMethodTestDescriptor.java","lineNumber":210,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":135,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestMethodTestDescriptor.java","lineNumber":66,"className":"org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":151,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"forEach","fileName":"ArrayList.java","lineNumber":1541,"className":"java.util.ArrayList","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"invokeAll","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":41,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$6","fileName":"NodeTestTask.java","lineNumber":155,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$8","fileName":"NodeTestTask.java","lineNumber":141,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"around","fileName":"Node.java","lineNumber":137,"className":"org.junit.platform.engine.support.hierarchical.Node","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$executeRecursively$9","fileName":"NodeTestTask.java","lineNumber":139,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ThrowableCollector.java","lineNumber":73,"className":"org.junit.platform.engine.support.hierarchical.ThrowableCollector","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"executeRecursively","fileName":"NodeTestTask.java","lineNumber":138,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"NodeTestTask.java","lineNumber":95,"className":"org.junit.platform.engine.support.hierarchical.NodeTestTask","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"submit","fileName":"SameThreadHierarchicalTestExecutorService.java","lineNumber":35,"className":"org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestExecutor.java","lineNumber":57,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"HierarchicalTestEngine.java","lineNumber":54,"className":"org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":107,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":88,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"lambda$execute$0","fileName":"EngineExecutionOrchestrator.java","lineNumber":54,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"withInterceptedStreams","fileName":"EngineExecutionOrchestrator.java","lineNumber":67,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"EngineExecutionOrchestrator.java","lineNumber":52,"className":"org.junit.platform.launcher.core.EngineExecutionOrchestrator","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":114,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncher.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncher","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"DefaultLauncherSession.java","lineNumber":86,"className":"org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"processAllTestClasses","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":110,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"access$000","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":90,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"JUnitPlatformTestClassProcessor.java","lineNumber":85,"className":"org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":"SuiteTestClassProcessor.java","lineNumber":62,"className":"org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":true},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"jdk.internal.reflect.NativeMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"jdk.internal.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"classLoaderName":null,"moduleName":"java.base","moduleVersion":"11.0.17","methodName":"invoke","fileName":"Method.java","lineNumber":566,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":36,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ReflectionDispatch.java","lineNumber":24,"className":"org.gradle.internal.dispatch.ReflectionDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"dispatch","fileName":"ContextClassLoaderDispatch.java","lineNumber":33,"className":"org.gradle.internal.dispatch.ContextClassLoaderDispatch","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"invoke","fileName":"ProxyDispatchAdapter.java","lineNumber":94,"className":"org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"stop","fileName":null,"lineNumber":-1,"className":"com.sun.proxy.$Proxy2","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"TestWorker.java","lineNumber":193,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker$3","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"executeAndMaintainThreadName","fileName":"TestWorker.java","lineNumber":129,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":100,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"TestWorker.java","lineNumber":60,"className":"org.gradle.api.internal.tasks.testing.worker.TestWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"execute","fileName":"ActionExecutionWorker.java","lineNumber":56,"className":"org.gradle.process.internal.worker.child.ActionExecutionWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":113,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":null,"moduleName":null,"moduleVersion":null,"methodName":"call","fileName":"SystemApplicationClassLoaderWorker.java","lineNumber":65,"className":"org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"run","fileName":"GradleWorkerMain.java","lineNumber":69,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false},{"classLoaderName":"app","moduleName":null,"moduleVersion":null,"methodName":"main","fileName":"GradleWorkerMain.java","lineNumber":74,"className":"worker.org.gradle.process.internal.worker.GradleWorkerMain","nativeMethod":false}],"message":null,"suppressed":[],"localizedMessage":null},"message":null,"status":"INTERNAL_SERVER_ERROR","errors":null} - Forwarded URL = null - Redirected URL = null - Cookies = [] -2023-10-11 20:36:40.103 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@74ed11d7, testMethod = try_poke_twice_in_a_day@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] -2023-10-11 20:36:40.106 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@396a4dea]; rollback [true] - -MockHttpServletRequest: - HTTP Method = POST - Request URI = /poke/ - Parameters = {} - Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"28"] - Body = {"receiverUsername":"test3"} - Session Attrs = {SPRING_SECURITY_CONTEXT=SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=test1, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]]]} - -Handler: - Type = com.gdscys.cokepoke.poke.controller.PokeController - Method = com.gdscys.cokepoke.poke.controller.PokeController#poke(PokeRequest) - -Async: - Async started = false - Async result = null - -Resolved Exception: - Type = null - -ModelAndView: - View name = null - View = null - Model = null - -FlashMap: - Attributes = null - -MockHttpServletResponse: - Status = 201 - Error message = null - Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"11", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"SAMEORIGIN"] - Content type = text/plain;charset=UTF-8 - Body = Poked test3 - Forwarded URL = null - Redirected URL = null - Cookies = [] -2023-10-11 20:36:41.417 INFO 31823 --- [ Test worker] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test: [DefaultTestContext@9ec531 testClass = PokeControllerTest, testInstance = com.gdscys.cokepoke.controller.PokeControllerTest@5ddd3fbd, testMethod = try_poke_friend@PokeControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@40147317 testClass = PokeControllerTest, locations = '{}', classes = '{class com.gdscys.cokepoke.CokePokeApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@33e01298, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@4b3fa0b3, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@20b5f2ac, [ImportsContextCustomizer@210f0cc1 key = [org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@39dcf4b0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1991f767, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@b40bb6e, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@6986852], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]] -]]> - - diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin deleted file mode 100644 index ad76afb08d39beb1ebfa5cfcc0795bab6d59f118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122439 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

fwxdB*cHjt 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�a+m3!>3ePYwjVpc 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 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin deleted file mode 100644 index 4a939988318040f5e3531abe7dcc791dba20d149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64500 zcmY&=2|QG5AMl(r`<$6^T5rp3*K%8)ZhN<#L5Rp$+G{YD!e|E3O4e)@itMswNwyXu zYm1Pigf>Z}L|Ra&?|-=W{l4%0{odPg&a?dY=f6Eerx{`*T!W4nh>2K;P4h65*>Y&! zmgWjG7X_Dg+Dvv(Y7hVC(frJ0b`Elxjg3@J(A@YmU%9o^&Rk(-Z7-nt{_m5J<{?!$ zkd2Qnxb~G#_4F;-Z!`}>qm&Ful~MYmMPm??7)$ej1;>t~`PtjsSer>4tYvoNX`V1m zLEh5*{c)*pX5Eo5rlKeM=;a@V6GRjB>0<>#a!#7;(b(4$Ent4gl^7TA;+yK?ZcOu(ouROIOl74ogi}(R>tAxs#35fmluRfbaj%PX9Mz z4FGC(a4pT<$!uijb%yIzH;6Z)O=z(S&4;3})Y*YhrFjkSD}v!NhyTD=Gf`L9K%3E@ znlxV+CACuk;Rr377xiqeP4lpJ_!ploMmoB>CR>pn(ns5n0a_xaomNQA9Oc#yF3VL6 z0YFE4dzsvU&|YIi^8jc^fH77#5pPF3&`z`q?M6$Mt4yCksP3Vi{%^05QF{&dq5VjL zmYCA~9pn-_g~W{Fpc&0iVrM6F7-lD7P7C;z(pd}}1o>mSH_Jk`2 z;%9Cxal>dHF7{H4k_p-=OxGRL^T3cNhP*K3jUl!VM)S3hC_u8DZEa3tAZHS@g9@3Q zFGf3UE^&~UTHBcuei+Tm^nldN!50ZDLLNRd|hAv_#977Qp+P!jBBu4X=OBIeb4n!0z z1%!80M8m`Is~A{Q;$UVal`BS8iN$o|FoR2&Zak(NhOJo}jm2OiUlK6YM9d%w(@n;7 zFJmZ$+9DOE%SR|qtXXTH27fwQ+nE1vwRBAN3TBXjiLYXs$yg?k4ak@U0F4N~eKtIf zOc>cC2Q$dUbgyCPI)-jwh5pu<{*XC1tN<#8`U_12*2pG~=*)6glk7!F2sQ z?LH>1z%(9Us1ifARq&NkS!**X!LJ^{0-lGbKg4uvF!YE5`v`zK0uId;r0{?LbN%nB zlUIxBKgRUyF!TgNPXVt35+{jsJx22fDNtC0;Ml4!xh(X!o$O}i_I9lR^ z(>y87bv%vJyuiYM8S#ZD8%H3lAAB2r`D< z@@uUEaIHYxP(yeI2HGhcB*0|_Ihc{GQC3wrSM@vH-u3QK|5;q^9IhOM8wBGh1PAe0 zMV!Y04@(dMAOvO0FW@w97dwfqwHdkbl{9Ywl<9M4E1&en%Y|ZDkgTYeeD7(YQtot{sb`IKUV)0|s|s z#3h{OBL!;##)F*Lwo@(JP5JF0J7%M6cv5gYZk&J{CgS=@I7$XWVV7YWN?shmE)pp? z%}-|IVk?u|TUndAVX5#DSO5eBHg3wU{IgSMyKxm~Y{WrNvs-C6O2^R^9I-P1VuhpK zRrm+&W+sr;!TIn~(zM0Jt4QbJgYN1E+u0`LR%YQS8%H@f%Ei$&Ky>A*>oC;GT6*{f z(8a;pMygl_n9lu#)<>)J+;s<^cX;eMv*IpBcC3mvXZpED@0_01>|Ktpzlj^<;Trk4 zQ9pJI2b}>-Wj0Py^8#2$CO<5Zn-@~lvyjRug(Sz{e#K4wv3zx0CBg8@a@V|#s}|v+ zVqCWbN2L@I$^ddR3roTuD+l2iKFsgHD~Uo%>L(Ka}sl$z*;2Lj%f1fbzr?ATZq`w~6DVI4}gLNjKtbDN0+c9J#3qPpt+`YW_ z8Lr%b8#LmEO}PGZ9K8UlzJyK9!2cm$;j{n=<=B88f)<&(VTJf>oOWsnd17c;ef1wV ztSXh8@D*lb) z(ugDU75@&5vXqj<5^unL;4F*c(eK5{OY6}GH2WH63rP299?S`Sne!8UjDr2e_=VAPSZhfeCZ(Tl;-%+Y3>qxe>ym62c>QpsrO*ijMCTB7AhX^y>{o>yu|@@LvK2~ zuS=<#dcuV}YHH*1GhON=IRIbP-^&lRAXc zX}+c|4pLJ`b90vnnCJ+K25us3B;I)^U+vEgy2n>JT{0Q{(>anZ4#u-E@_2PbbLYb@ zr{4>1FK#q{HzSI!A5GVap@U;X#L~e6QqB*EcO1Y>StoLV_nx-UYr6%##xYBp=Y;fL zqN8{^+Lb^Dtp=aY&Js3@-t@|S+wR-S;a`J{lfT)lNu;ABI!dOa%Rv7Wfc1c_b1F=b zI#WzYgD1*P4o_XZ>wLw9w=qBCcW7LG*Jb-5ovwO?Zs-H#yn~aWXWg%=tglG=>+bBP zLt{=@Wzf-8I?AM|=gq}mU5ZQiK2bThcD>` zd2IAPXLF&+hT8{A=&HR~Hbzd?E~Pt+&s!qV>pbmyYWuxXIw}MCz{-K{)Hy~8+Z_P% zfce4I4`5H(u(Jw#GV|@G^Zb<; zFHbzLZS~zezLJir=%|_w_V^(Tw{JZ4#gFNlb#(NE!u=%R{*>aHf{Il@C-wP1m&siFqwN;w1l7n6zNn|8XLQs+M~%Sd zreVNM&7RX~eiSkzB7Bw(JIPjk5#2eyG-#6Bvx@7h>up}pwf4OPoWZUSn+DSP+q>d1 zULR-P)s_!!73rnCqHDgUZ*HcG-q2AC9lfQaRyuk|N7LFs#w7}S5YYqeu%C^@&eH5X zyrW_-h;E5~yaTY5f_)iY_yb^0$*_G^*eV~r1GJ>o8Xt$Uk}rRx>vw|C?54jO&5Kp>-W%AzR-2P($P0M`c6l^bks*j z{d8pT184*QKp1KElTJGWQKc2-*^R`;19Y1I$VWJ`<%&THYIBJ_F$AE&zrX0T!2fT2 zJ^mYD`7h*@lj%w}p|4)I7)|^6x6>7e9%EO=)>zz)0nUw$je_+2(Nd$@ww@apX<3?8&H-`~D&Rm=Jdvvq^BRVVE%y6wp@_F`ywGgRJUJ`9?> zoeOm?k*xw0i>`7*e)e#nNXa>;Zx#sj%k^r%K5#1<3jGq!*c`zy zjASTBF~rdf@hy557DEjm35|(Z3TcSQC=(M0&yH|D!a*b@TW#`hMR-ljHcZ^xGdAVQ z!%Gacek`6r3;2J$PzAYU%9=T;iCdrkz3rEJf_cfN1O`fEzyV?iC~kDFDE++KQjmB1 zMytcD!n`B~N@k$T3^XkTXdwaj*-DxUpxDSPEx{6{F~A9xSuQ_74i)KR1_N#>A@h^3 z@6egDG@YS#g|Vd{%K)-VUE&$!y3>JKaV4d7k--z+R485Vy~+@0GEf$fJDWlCqk>hb zZ1@bS#>kU{Nv9sR^^8l|fAHcInldeip_0qcxW-V8p$}l!DL{t9&>KK@@RFpYvs!U# zN>-3%elc$Gv+U)^n+#DNLp`5?ZZW`s7BIjF+Bp%0u#cUSwOnRL9mcmu@Bv?$TyV81 zY=3XD_QmT8wR`CgVu~23m;rHJ2@El_f%Fk|o-rO(+1`jqa@_VbH;Qo0oL0&}Wejit z%VChku*U&|jN5vithu%3-o3y?Yx6_rEAKE2o3Oh;B#GQo>OfXybo~8!X6N#J_4%{A zc8oW_$3XWPaBNlpgl6W}uz>XEbPb*M{O5aDTP)|y4E^a#aRNn%w#Ulo)rNpg(l3cf*1;K&Sv{NO%V;Gn6 z&U|>xFsx(fJYk4@=ufG2AX_$k7Wz|%dn_?Zf7OwXUuOP1(1Z2sjICAi!#Kmx(^Nac1C8`z5ZkIK|uZ%nkjlgmXoBBd%5GUT!b>Iy{tA%0Q zj|DN_GHCw85sQQMuoIu^|3`6GjPj!T)t;sI{1@7`GQ{r~+HDNf&VW$#J&^N&lP%E! zvgc&`0pN4714{*liu^FYH0T7^KmG2Lu^rlfmW=wyK%ETmv>sAa`dqm%{~yOIYYWws z4k{;=efY#s>td*OGn79ww)QZ#eqo@m3~)=nQNVyvf;@7FKi31i9QDH zluJL*Nopa1vW9(!JwR8b&CmVC(D= zIK@QnOyt1?$H|jP^D!R@(!7{(0GUZFEMzw3faRX4#S?rqGj9a>gAg zWsYS2>mk|5hCQSxSPXKU3VX;bQRl)yf1oM0)pzg4wi&xjrxz4OGet2>Q7jYfBEI2q zF!|qOXylOIc*VJQp}mnFuBHW81qi=)vlw(vUS()F-6VzeUL^gh@Z%_Qxmo?+gP@? zbob|pZD}i1Dwv`NOjOAPH@6DLP;mfJ4GWH#MSwu2soM2duhoO%AEmc*lH}?Snc^Cz z_z@G;GQk6Vi4%{Rkj@xM%22Xa2e3O(>2oq|aq;}IQJ3qF3ycn4$}Mnx!Zd!wd3Y;4FU-BNyQebj`<5Fm%j=ow8O4?ckVY`f|Hg)ZQ|{hz?9QQG6A!GbH`6o6 zM>jH26Qx1Vf!y-{B6=7%_R)(~v7`BOe|Uu4ZL%}E^MZ+9GSMq0dJPn7WWaKOW7PM1Q)e{1-u*6Y?bJi$8>YC0srHtMTAAn_3~qzL<`S79(GCJ8k-Z0Mk7Uou zhByQK#*3E|&dy$Ie~4Y@nam`+gOV&JAfuD3Q^J0a5qLc9V4@F92xC5iDnN1^a#SNe z9qhX!iazPllKnm5Z#Mih=~LEFClh@Fy`hw$WqYsOdCr>)=je;RIIX|a(Z$s5W~zK< zq8^GnUxqaloYi43miP*E9LWkw&GRsF`uwR@?+@CZIp3_%?%O)<-Z!S&cc!WbHh}fQ zJgLG=Zau6p_of9!PU5Q7NWV5H&h#-+Kad>%0nE3MN-2vL{5vrD)41E%nElHO z(+y7;|74;8&_5;>K?79|*h?H?)VI~s>!hRG-yZM&<$q!6?~lKj=r?7~Tv?FoZ~zG~ zb#$P_@x}Gm>&9k`wt4ll(=#Z)Dcg;uc8aCy&QkVZZS`br^qhe^4JCFQ|qdP!whLfUQZ)Trd)gTGS4E0g<@fUW*mTQCIhnq1Om)F6Uxt=^J=V% zcjHLjug(g-#6mmZb+ksIP2KAgNqZX^wSA9MN5`|o2`r67mevD|%5szG+aB-u5EnbY z_DwW>htX!GB$j3}OY?Xpc9{hytb|JTlcjCRp0P1Ac$4Va^Pa>#bxvW4Qduf#EVXnN zy264OCWA%ucLYz~989IPjRJJ!7yUP#bl&kLv z;7vXY4pWG{Z^0`&N2+W9>w3t2B*^#r~b?lK!mPQo|4#H}f=%{dz z*-}~R>kRVTmFD!YL)+6{6)%k}dqqxp$U-#$)FT)+5{1LjTFasmi?(EEeZ(mD_~Jiz zEWdf=9mDR`W0ts%rTc`1o&sI4Dh!Gdz(nmIH?Kyw1+NKTw#@VCp9Tl&Sx{tp1|a@h zLn3eUdw$1=zdrT7FMe+L>!*7IOVr2`wc<^~j2i}xvej@hE_1nZ;7W1uiQ;D2(Ja|L zrROZI7cBIWg_i8GQ?X{F}#<$zL$4n60qt|BW~l#5<5w zTU$q{j6pPTQOm1uiTk4FcQ==RZZ#Sc(#AsVEO7MS0~sMBN%3)SVc~bIdojb-urPb! zrl-ywEd38GlWwN=M@l~+S*akaoerF=8(gTqsxU&^*<_r!lLa0$Oue~r*PE9?UmjgM zewO=1aNx@)mZ*!R^MKh6Gi9=aj`p7^Zb6hqiZ0BaxA@MMb3On3(eg5RtbGp)ePN-m zlxBSc`2RaaKpDRSFU*DkYqg!0w{Y{#Pk|9hQj?F_hP^CtA4|WVrJK+A0qQb>VFl|a zJP+sH6lB)T!Di#Q4dx=+o*FZ){W}I&Xpn`5Sm+lE{bnIoHpsOb8!})rTR0M`m?uxM zq4EhyZby5{*Q%mqvNK+?;lR#!bZf8ihICfmD0enEitzsZwI5#BHw6xcXB_trF?!_c z!8Y(@YkRT5IuqV(n!CNki46TYk!jyh9iO%7kKgp4sdOK<$!WIO1M_7=ybF~MNPOqA zNcuZP|D1%v;?=WK_aytMa{bu){%pw82CyN?0FinZ^NJge6F z_QtUl&w1iUCKuQ!lnwc!2b5LcVstP05bbFaCpJC%MQQ^pjBR+4E%u>@vmske`O)C< zXH0nd{k6M#Tgi%$m0QWbQ3P8Y$rfd^qS#cRM;R0F?VjRfC&Q=ZGrfNPq)$%v>#>=3 z(QK6%wm~dgC60|Qu~9r5WK|^j!Oph$H;LFspgPt+9y31TWH4YoFfk?XX;;Nt7NkEv)E97BPv*tEHblq(*?r- zwYOI<7D~rX4Qa_{8|JXJa{*|ISm2#qhvp7*Q?nZsd4V#ZzT}dhLw@H1s;cdUzU%vZ zI&R%$Bgi@4r{{wxg4bm?61xJK>+(m}H%8AYzMrO7VeL0C^%h$z$cz8^dK%XS%K`JIfMK)mW<85@@*Bz|SW6TwAju$*W@@bQ-zN6YU*2WU&ZkwCy=CjRvPJLM zhOtcHH-M2GEWNC0G4)cL);|wufvrltZET~*SUXV2o(fUOM>|IEbABBCXx;gHCqiFt z&w9@mcd)m9VC#Ee6|5*$G>bftzGvGT!(P)me@rM+6h8gP*6d`fd}5<6HaMW&0JOxB zN=4gQ5}$$I|325?WbBdpyWgUC9=5?3 zw&7Q{iU*d!cEi3=N-E|7uwZ^7pcx568{Y(Y)~S&dQVT^)LQr>$`IF-8cr9G5b>-sBbA8 z+&SQ?%0?VUlI?pW=(B>8x9ao^X;;;;C=U+ulw%06Y{`qRsfW-Hxh zaC4tG2LuCzxbuLI$|EDL{TIV!8m2t`TptcP&4B~ZmjeJn276dFVBBL115JMmr5$RQ zJ(Ve@0RvN#wdliS1>+J086Z*{pgHD|@Ie9;DN)kt$%u&r|4PbCyd^}~jaiEDD z8f2Z>vSm?h;bo3i3J07dA{FRpXXa=MbcEoyKWy3TX|K|s9?H0?KUVT3K8+(v=ZLOw zpqTcQp1~RRPOPP1@HDWobLsBQH)>U+w8z<&O;NN4QNiTTCz`lui`V$$B_SK{ z%t~cl<3PF`-dA1wcw~e15%YwNi9hI3?^UjI&~ z<(S3YGk;o|Y<@XMbcZ9l%h8Qx-h&mWg9nPdaZFO@ud`Yk209|{$D!5fe(tpU9MuXA z^a?=}5@|E7wsB2Wm*END&M~t?MlE>2L6sbENUDJEX4WIUY5?~96eFt*N31@pH66+i zGzibC<`_TZDA#bb9&w;~q82b5>GOIF8xL1Ep)f&mJJz&5oVW1Uy~xF#`z~CZRL2ot z;yeK)p)xEbTeyy&gAt!RvNEW zpH;4z(7@46;tXNr_w(y2?te`QxfwroL&ol`wnmP)iG!X~s#V1#UVwB-?ZFv_eH3K# zoP<9||0QqVf9&?YG4Efle8~~L;uvOuO#_3!$St$Ha^c|Rb3-i=kvICUz2=CUIr?un zYAqb2w;a^ULGL)o;3b~HB8=Jq%aI_ioiiLGLBFFpL>Ob<2Hv!P{N~9Fu59#k_D{xp zj<|zk@PQ-#$U&VP^oaxBg<%&=mdg$+py#ohLvuf5^BMjtJA9Q%DqoB({pOR_v0~Ml zmE$+`{OI8rWHOvc@hZz$zuNib%+ITfR&U<@{R>C*m1FXaqy3$OdMQNTW6-S92h^nE zL$Ds>-8cfpz2seOLfygKS%cmbPREzlnW`_0RZ{mWF09o`TURTouJKaYg?>W z1PPB1a#V*nYQH!}zd6dTT#*}B_Y_ynoonR5MV?#;VZFG}y+k!oQ2Bo9Fac6LWB;a8 z|AGh+Te2m3YddlT@0J~CEc$WVn`_X(_Tj>Q!;L#GWapaWhg&EAC23!pxm;%VL-{lp zl3Tu9pyqG|fwZo4n$eS|=dn?vMB8=VF1jBV`Ewy*763zRW#*1H(m*b>!cx%FaYRxF*$A1xLOs{2Dj|}=)Sw*JQrQyf|U$~j^5!eCvyc=QYbN9x_-&) z$~1#f&y$q4A2SW(s$Jw7hI3H_H5g>g4U6Q`e61D3*#-#H8|;tB%$F8fzPS`#c&ucl zauio3nwiKZ=LbkD&QzVzS>RaGlM#CSQ8ZT+!!?NI8h&QFVR5hob+`_jb6}-ui_Wr? zt5dT|)|6M;mTcm?a>*sk)<5L(H$;<9p$l5vAxT5P^wHsV0BK9*%*+7%DCARmAIHI!h(Bj`faX$5f@rsi2JN!kXNWD50|DDG0WHQ*NYze)ic2Ch*ACH^WZ3F zy*H@YMEHGAD(cRuj=omH)i33$m2sgqPn5${%3pzIr#pbR%-#_~2f*9VvT#f0&NiJ< z`<9v=iL)Dfmy7Okp-OTe1}Pj(hubOut}Hj7#q^~L^#@b*CcZ99wy)r#2V7LiMO9q1 zq#DQs4IR*)Md{u{;1Q%WZECnw281dND$7&!{!l7=TT^-R+ncTCE|0hdwOrlDT(ttA z8?>;J=ghucy7+YL{D>iz4d;X=BV%IjX<^mf(WqJz(pS`!WvrC#@+a#1}O z(n3L01g*J8xzDj6sIxa_!`j4&3xl31)7+s>qR-G7r<& zXWm_D(E4_YX}?oWGZ($#LZ*R&@O|I@#G|~yDY;n*UFNrEo^Iiyw_FG^ODN7~bb9XZ z($DpC)KR=(78*Th<)U|7$X>Sr5TK9tRLtY7?x%ahZ+Z22hbep3`>MzN#>ws~jVH{5 zdy<@M>GdW2`_}DT!}na&!9^c{-XFO%cSma#q7$H_@|WbmwUe8Qj*qgp)uB88{ZEGN zC$6}Q0+8sYjH1-+fB9;%r@_B7@t+B1ns3k zcT#?i`hM1_KI17hdo+^2aW%ek^^-XjEGVmu_0nwmqW7}t`AN$+wZy*4UXW%E;Bh@R zi|#L*y`gkh-SVXq-FEbG#r<66A6%`UT>SyA${-gFanUa>n)aJZ^M{UpODN1kySCj- z@G}YMekPYoer{`iQp4z}7Y0u2Irz+#hunDR6b~(N=Ru{2O8Zc*&|e#iH80#%abe4zC@qleXJZK#U z6F+>7AQ=9jZVte)y9f3V?@)_I=p1s-(NWI^vN zStj4&VKIrv_H1@_(_8*MA(Xc@jHi5&ry9;viQwr!U`FyFK=`*P7{!CLQ!a6Vra7>S zshtzFv-e-k3Vqevq@!uIESiU6cwpmW;a&$o@o&c#0I)RNtH9RDKr!Q}Z@Z1w#)ok{ zbcqKIL-DX2bpry1>}lxS`10^#6gd0X9QoRn!3jLoM4sUTW)cj6&TG45Ai1LjWN^sX z2huaOje$)DVdv-lIx_mt%RGY=o^mQrJ&mWE&eQh5J_1@-0BC13>2OhkD8xwt*ROol zI<>_MtXFJE(7AmkgQtI$r;^D-Sv+L$lTQ4iLsCj#KD*Wa$KkRs9lfMM!`_^1o_-EQ zGCaKyt{--aJcdZMJM9of+>Elw5yGC>qGNK-Ql6TJUG(s0q-Huwo_0U7@%greT%+( z+rPK$Yp!gN-SxoFJnle& z{`FlUOtLRvjE?zp_e9U;5Sz>1d*?Os)SGzvS={Fo;p7VG6&|^(VV+!T)5k&k!FyxJ zr`~({f~WP8Cw@h7t(NneM{{>DZ{|Ten!OFVa&4OJgUT7#=%>yna0ZwCe8WR6Jm^@X zjOzlYb-LPao2-Jkx?XFHQVzf689c{^*rfWDpmd?LCe%arxJmYsfjW!;1 zGDY!*>8}f>fkB2a0nxCuF8C7q)MkR5TEbTc#-yN zlbir!xYZvhb;(k7!+02%I$WC1Hl_&nj)BVmvy}%<@A7H9*fJ-HG2sjgos`)aV zxkXHe@OPY7%QpA(wDR!)9{DI~k-kow?im&lal1=;T>gWn^OLuAfM@W4DYEKjk*EHy zJ3lxh!=91Xb~kV8riekF>JZQ17f<&$&&ZWfb|VZ<5xVY#kq3c12`Dbeh<0`!W|7n*syDhmjq3hO zS$2+43nKK+aDoZ2KMwYe4j}}nHdGdd{grg3_r}**VV7jxmF`A2Y#q)MTP_gdP(rPU z6Gl)Gm0SvWc&T|Yr-Vap-=mrO@`QM*mhZY&{+Bec?)mk4maMs5YfQxt+^s7yY< zdCw#tYHrHrs3Z|;$rReeWda-_2gwyCXoX78`=R46*IsQI zzZE-?cAA$$sHYO5G(s~N&&0mseK?t`J1?wjKw#2)>&9WlE&Jqj0$m}X&X56sQuk}j zuL7D>?*^pxp=Bx}ur$IZY{|x5+zWNZ7oUvzgp;?E6zelohj1%VfNYuxzBrRmZDnT> zH2?pSgOD2{yPu)89t+kt^0ECM^VD{9W)q?uLN}LCyG9sYCv;08asNN!=Z@2(++5;?h(5834;nkGYqT2haDe-;@qDTMay!>-o2c4 zYW2GO2ZUxNpaAOV=0W#x6Z)`gqx~75NVdwHm^(is6Q3 zu*qM~53P4O=N-agyp$I-@E<=S#8G%H$efkLUP_)Vy=J_5RNAE4DG{F~@$J5EIOOJC zg3pdx9Uq;y%hHxme@dWw0zD&W z?h5M$kT6G?Z4H}Lwk+t5aqOMJ?P(K=jHj+>Bt&(PogznXpX6nkTI48BKl$0w!tQMo zfu0lK3%>x6te32&(sRMj#%`#X>Nq`*`R1m}-QCVF3FTJ=;mrEl|8@>&mOHWTO#0TtR7f+{uq*Cq$6T~6n8_S~P9la;ycs>{aBAKnt`t%UA7 zLN$v$0C7GD`f1Cb!VQ~Ck9`T+zT5Hl!N@iOwG+@4^d1Bb0%|E0>s|kll}Op^hcES@#$Rz>Lw_66^sh(GJM+zhLKK&M;@+x6nXRcpq9yBmnQWPx?c$W zOdge{Cs#FM*Dq6&P`@P=w*$4iP%iT5m7h(7W{|!4q zrc^;{FWIMhey^kbmNxmp^R@X4UHMvWe9aQP27k*Sy*r@>k=u*X;+Hxj25n1c|XZrk}{^aKLI0m z-mqm9oSyJtPSCBy1&h)}r}-jZzKS2;#Gfw;;6tH}2!s{?>l_2ENnwwJ7QxY7OR z?oSJnR-U<+VQLb|*NEclM)Oe&A9OMnE>7G2w-gc1kK;qu8;au{a|0@t@)q`~vUS!c zepOp}iLVpSM+tmrfJkK!iF`<>S&}swhbG0ZEvlZ~D{VKJX5f&-H%#X1Ugj&O@b$0I zQ~6Yl9C{m|Qzi`nrhIX#@qjEk-F-4iZf>$K%{OQ5&9&q#^5L4qlM7nybjOcA?I4^v zH7lL3dWEkK3J=gYDy#sz$guWY<(M}jojl72`-*C}U*(H4`T9k?3RV^@JrWwi(hn!c z1TL>#_dTuckFTN+b1!D|Avpm=xEAE&&$ZjKZAIhwF75v`KXKLg#tb*1Wxxh|hnoaxSP;jn>|PspRPE@^2b`UPaz47lM|b(?#B(+kXbKdLE3${? z*q8Nuo%%I%QN=wzy3dE;p88gMa%vQV$Z7p+j3qvHHunfBqEz zqy_%IUbddx`H-()!&iUASE=QLr6$Hb#2-`gYieVyfVNHY&~&EZFNULDdV@=+`lrY{ zb$r7od=(#h6c38!tPq=H^Uj-%_Bj&uIQwI`-&4MFJzwn^(6nKMqHuaP0=?i4H+AnC z(l%h+V|8Y2s^f}SO^*V?9G|4~oA~HCC@1y;)Dl!i0jD}3{wqVhzd3gKUsaQj6a=Aa z>?I$)0^Q`ihJ}akvr{Rbi_7$4C%%95G}z4YM{MQaJh}H4 zSMBA46))p=Vr0Xr*yj7ce|z+fSvGpc^;iCVe6@bQN({dG2Pi(=;xls~=N4#RGOsJC zZ2#i)X0mZn+)qB-k$6fcx7qx%Df`rWu51=9G;PM{9|L@iLB7clAG$Yx!DI*UNp1T$ zMQpMrGC-o9C0l6t*d#IBcgg(Ud<|E@RyV=cQv&2JKug-`goglZkzFstQvhjKsg1dU z+`qs>yE|vwim!O-oz&46d%Xl2-U5RmzK?*qt!oa;K9g?`A~U$a5-Rdt$dcLXHBM~n$Nd`q0ybo z&k0bF00j#m`&Q1Vrj}o5;dx{J(d?YZejawEC~e?AblEc;pMRb?(dvxi+`HJD?5+?2 zIxm1z;sPvf1!YO_XJKN=pYrIlU3WR`doeame@}376_B&!(`MCgS%|p&G5T?yqdtTR zAP@Y8P3GP1{uCPA-8-~@xd5tzH;-jTM8igK zDQ>u_;!g767oIz(bnMmlGhk+x--{9G#|l*A1mb?|5;e?Wc-R0G%*n#^B*C16D?;L< zcPcYl7G94Rh!O-_69wA2^p99S9#4?}3{8%n@;v3>DL>!O6BcFcPZEfe1=}wRP>KL< zs+tk0z*k$FG~g;ox2=RUI=R#3psJHyRmy$TM@(!>7pPnjh#v93;SljyrMQ;P$ksOY z)4lCj_-cu6h5%g^K#N2sfc0;yIFN~`#CA&IlaHS%p{LgiZZ>P} zh?+eVGc8MivIUT!uccaw3^xrHA4z!}6j}4QWWuQoagG2&m|TEMYC}es?ft#$y!zG! zj%oEpuR0fA6Bt|UYz`U-srY<1ybg{ zk}!Wq+QyV3f$nXrj7Rb+md=PQ_%T!${@47OcZ;=(1)>sxVLG!Em?)Qk8Y?6=;HfO# z;dOP0pOL(FMNH_OR)ec$0)uja!5ttF$RFJhE@<8ZGD86gY6E+aVXekxjgl_wXI)1E z8yWWns6v2FoS|~S8YY`|&LZsR7^RQliIU3n9tcz`1qM}ut<{uB5)TEmQ!*#;6NN`o z-F-dgpVhUAD!%w@j7|;kNg%2f7(Ny#*9i=s2$Y`+4C)11&jh;R+(LQ-{9ucnlWe3D zxsehi2$CU^C7S;CYz~V*Wk3m$GyRgkhTeha-mi5AgI_7~p9_p%2vlAQMCt4x)+-n< zw;aAG@EQ=JZfYsWJ;GGeweL(OjSXZjeBfpKuvs8_BhYOTsJ#^!wFf(iH{+F*#_XPR{+9kbfl8Y|rIlz0a{kv<1-`h( z`UI$70IBHVL+R&9|G(!wANxV&%-|&c$~M0rf-OG<1_J^#D1Z_K1Sa*UD6v%MbPZ$??p7g;q{-|!V8KOr=gU8gD~9?K@znkW^_U1B`u zmpLnJz+b3S%MXD4tSzKwE@t4@R^316sGeUG$h?bm#VRET0 zG{xIl22uM-9L=m`u;_u;6{auAuX(~Ae02M?70FQyGASvAyyeGHReRy$jT=2m3>F%P z2=&hk(FGy=L_{c1fNJ)GMmVU;U%%y+;d2c?@nz-l)p6@oQp1Fzd^+5_y~xH5UNHBRicEdO`K?$1UGV`cpxUB>UhYp#Cd(&CQM0N#}4d{5dyCP3C_pG`uk^9 z{YJ6bGk1RwRmBPozIbQuE2WEK{%T;%OpGtIWuzaOWa+Uvek+dNsQby;YbB2-QliqeEz(}jjtgrW=~ zx+;YFL?*zeaIqz_fG$?xemxXeWeef5za7-KK@g~zfXIPw)ESctW2v9)aQ3tCG5h@} zr0<=q7Ajp-KohfjwMP)~hkRqP5ZL!VY6+S&o)}>rJ707k3X?napo} zzK*UYVr!h*8<=`5Pl)n`aGC2C2r2aO*pFn!0fom8qne-P@$5ZrMqauf5?);(gqk+I z?~T49^$s7qqj#F>ik+3?#uf^}!H4(s@eyYe=)1n{zn7EH@4}JZ7Mc_Z)sqE%xIaN! z6s=<3F4^O2RnDLHJ9xTPu~1whgr3e`9GqyiK>OrNYkM0vl;?$UACyln6{0dBbd3$G zpir1zCU5+!d-Q1UaN$nRQ{_T*M~LnUp+;j!rAy2|T)TA2K5=K2oV6pw_QzF`PC*S`4YKYGm(VDG`971hk_fIHj~iUS`{jW<6_Q&q=}>dT=bm3YJ7B1L#f+sx zZ(X_`3Q>&^oSNZt@yX^Nl?PbtCFtb*1NLf<5+4aw9&uhlYme{w%1r?mNkMk?)oB&8 z`)h@UkA=E*ln4<|D9N^^`d@c!pT51RZD(VZaNymW-Ql56g$C|ey$}u{Dt$>ho<23j z;d_S17o&Zj&TL4tdnOb&2-P|TjY6vO|1baG+P~{wwjrG(+v0e^t7SS`@u*3No(s{5 z;bP@3LBx$kCoYi(>b9nRN!71@Ar!q7s=N}4YWabDDt32!^VDWX>zw}6`;Wy7dop*u z78+CwoXCDBdYjgk*QJ~-y4mhI10Bsm^ad1&-U7mZSSoQE2^_dn=p}0=2WorynHs7z zjsEkkP`_2E`y4N%zXQ5bjT6*wSdfvK){#fQ+W9;Fom#i1-|JnQ5VZ@@dm$7AMlxZ$ zb4aF1dBNT_F;By)%74D<5JDjuxY;1&6rEW9Z1jZftXXBV7u0{C>>Ipy8pW4Jt^S?j zWA@x%AF_0_oshpalWn%sV&_=gaxHB<{a zY5vH6%|N(f!n4?{koJ6f(@&xLJ=Op)oN57ZAqDI9b$*GhThEA(V?ADsFB%lWO@|>6 z7r4tnHvGZ1Fl=+IURj?Z?rxfM`j-&>7DAAAjv|Q0*^{>ZE*EC3&k%f0TD@?Es}gck zf=d2rA$$z}nDJb`{oC|=rE}~$mwI%aQZjZ|Qtsmu9!iuTS&v-mBp0xcq)8L{vK@Xbm%S#>Tgkvj$@sJqTxKMEm4HGJ{ejVf zWB5q_HLK-MifR%x+Pv|3MbrJ1kiQZ%-vubaeS9cFP(2ZL)lqD2MoAp2q!p(m zx}>C%!G$&yss)~af8$|s_<;f!GQN1U)oW4(h`(Vq7qyKroyPDlYEYE zTpSdd*_2si6}ez%k`hW*LYI{w*)haSQKET6^Md(sY_v#MEx!LB(;r{&&NrXj^-prD zl6snw=nN-)7<;OTGqyy{bilIW_ETBed}meSU2 zC7t(p4n-)5ML$mc1`FtW%xEwBz|EaUV&xt$NNz@6u98X&9pVP1M$gd7CB2t`4W5*z6T=?LJA_g<{a3gF|z1 zp#BoD{TY^%zcX1}zu@)WON8F|YR|Vga3jHUn+Tq6GAol$V^!FK!j}V%c{sRI!t<$< z4Rr^fhO86!4HeptTvN)&$ra$3L(nhSw}bIL`_Wm~tJEJqIn}#c#0qg}5lj&Fu>yfY ztl9k%{vGDsK7Eas&mC_=JFH7^3X1PQ0{%yXXNqvyKJX#fhon9n9e-ip7t!+`hn8Y( zObWx#w`tsZJtJA2B)<<(64&N3WYjzcSO5Q<3^u7qVYzJCWZb7XaDLKmOUea+Qd zGW31G60gE3e890nxWjqC$9>#XYjG8wlG=KC9X)W$&Y>CyS`mH}J=!1V%fH+bUNpy5 znzEi;gF|a^fbFV-%>lxx`%htdd>U^*@awy=&HJ|fhj*VQ)#K0x9NLHj|Dy*_57tRO zQLaImeb3_YZxnXh73umk;m~Fr`VoijZh?{h2kyLgs}+{@rYW|Urfr2P_#JoCTO6-+ ze-lf3-G)Qkage{m=5N@fbmf89mD<`po#UqjxqUM`a1hc>5J6HDs?Hl`Y?JXnvGyxE zqO_(Hr}+sd(S=j*#%c86BzkemeK!_apeWaAuwp%qOAM!MvmzlXnjh{$>4PyQ%QVGJ9< zH<*ckaBFA-LU1Atr83v7-{sWEnXjd4s9Ar9t%a?LWO(^K;YR<0ae;%)cjkB^e&AGo z;$+8hCns>|Bo6(B1C-@&XbWTYxQ|gVE^`S_LFd@q61vkk4wwJ_0K_4#0LCids^+~_ zo1Sv@$!tcARfHr$?DPJ9;yGXH`-D%D0nzj`GdS5I>POKvUA z)e7!2Ucs^c;uNirQ(Xeh;6O^{MNT!?H;j0hW-$kQ*bbGgbY)w{W8EHyjz9`y+$XA;IWm$yfYRb~6^3fL?p?u39sgwD=4 z*QfLG;w3!Rah^{|`^M{xXt*E>Y5cATfN(J{k)t4@obBcE*PNgBGE>qjVVn`>hM?{U z1g1O?EXk4`w>5*NYF;zzqm;ajT|@;P{w&Itcp{J(I3$J)9KWx8XF_H0qM{4oBXQ@Z zSBPvSmX6aa{Zm6gQtHQfN_qEN#*ma3qU?=G_#i+T%z^sIJ zoDFaE-!!&i6|Ir#d!DfKR*pmkGa?bbeCJ?yC4qu#8LFcQZtHkFL9 zl7zsbpWI`xbN5V3QK1rXbu7;5X=cGof-hm7oD+}OG{H}T!s zDaqv>ncoNb5i=`hMh^YuT3ME<`qpbfLT?dBX}OIQRd_@whTRNJ4>P_j;xxXegcn(T zO_=3A?jU-Y&UYU2SIxgv=2dfH++UUfy@!$!~oSS`~|k^|NkFhVF0Z^GhU_$ zjOA~dzoG0jc>C(ySA^M*NX&}@e;krx5OhjoC+E*&l^@dn((0H4h)SIppzEsKhCS5y z{Va+1XG27zBl!jq#VAqGR^QY4BGbwbSIai@xm2jMUl~GJ!w72xQTE~<1@XNHK$8`b zG0-Ug2-nUWc;RV>E*HF#PP12_cY1t7(C^S|UT@4R@C-4I{=Hg{y6>SHHK%4ct^~3^ z?iq|QFWxr&?z<*m?Aj*M4+Oj;@am`g9G4gsdb}@!m(D+We%9$Hf{r8L)S7_7f^EwF z7`(=Z?hW(iKI>6xs}^UTZ5}&`$o&F#IbIjeSRrHwu{1|~_-F!RAQTb!^jg?&1f4>_ zkeG(vg0Y}y2@NRSsJ{Bzo8L~qCzJRjXO+?nqBV;s+j7pq6ti<3FoXNEC?Y+fa7x}= zWGe1`ga)9ecKc zv&+}yYMDD#(T?>FkUo<~xoXViDB|Em>V;U)fDiGVd8Fb#S( zcn()fK&rsy7l;B45yP9=`a0X3EOv14fBGmNK(@te_z4*!K6|-;UTCv<=OecE_@7pS zxE&riJYYTw7Ybt&q}K&yxZq;LZ1PL&@u&kH*bE%;*a>b4%rt;BhxgVh)<@oYG=5ez z?@8j%KZlc?@EXo|psmGV$(G*V{u->cIgo(LeA-;2zuN_`Tqov=2bLr-t1+k}=bgF76<-)K zUMqkzNQ@0tneH%p)8?|vK5&;Ukz-3+ia%Z>052DaXC?6m;W5r3AR#ile{Yc!jz^h> zGNRRsspoA!22QLIxOpfTFCT(G6N+bs;bp_|!1OZ7m&-HF6)GHo2hC)t2YHoxNV!`& zpZi-CuT2jg-0pgt!54`Kw>J#S9yhzGzn{y{{-@IPk^7a2PJD>0pOp3aP@?PZuHSOC zSFNtS#-nfW5c9I|JyhgK#FL$Ug*hu%}Mj|(^O|86`AplR$#|6%yjCh6Tq$XIj3>>^z>5c*$Z@x)woV>g zcYC-pRP$uEjYB#f&A`LW4(n{|10GG03&&7pqoavhqC+<`@p4&s%`SmlZrF&{ZY$MZ zPlukIdrH=w*{qzEjYo6vkjw3Xz%P%LM7kf7n?E7<%PwI2Nb}ZQ5Cc5iWb*JF9vDIN z|1o94%MbO%nnQp3_U&9Ju$Q;5ZXzGAm@WufYOFEmV)%w-N!nQlG+=2ozW|RG;=w+} zbZ>)d@TL3yPYLH;5;$8E9MK}YN-QV@gs_A^V3XYZbt&i!QDOA4POR>gy)%QI zc$IJbivoy+_|A2I=kNT!(Kb@JPG98XC%l$70>0?Vn(!I)Oi;UzWrD$K69=O%ylgjK z#R@XmdN6J9Ke}{NWcJ%FrG>qH5B8Dg2K6^COZ4JdBZ8n^Crn;g^Z6XPZxZ}o)%2?N zrarvxJ zb~J2P^!ylJ{u^HNJ0AUk2U5qM(DnZ%0K#2u91oG7Td<7)z4kHdk437&IoBgY-K{?o zRM$@6(Mdd{8?vKWk1c8ivYC(dGQPb~9gj!Tf8o*Jc=W~;hzpzM?4M$UrL<9&-+W$! z+v9OpCC{*%jp#H87N(jz1+B=wAMR1K&(73b`lI@H1}{I0htt7}?<*dutGGMjxKY>p z<2v4!Ya}<(IlSy2JZl~gxss3?x&WK~pA;d<-h>Jt74emi!c$lDZYyW(Z6^|=d&Vk z*yv!)743f-{Vu)lf0;9KI*KM%H};Z%S`$zk0(wc>mH>)|4Z4K)4xAMp^zbNh$*gqG?yTFL zhB2$3&Kc@7I1^A80_sWtN}k791Ljftv~3#FH|^*+uVwaY>7*OsOp}N^0VDVZ>IHC- z=AKgzb)W2ZBws#xE&5xKOBffjR95IWB93NHtQF{q{rH{XK~VQ3sK?^js`ZlSh}~E5 z%>w1yu0{S5*7bNrK)nb6VDpAHG1o9)G2pY)k$e0cJ=c6G>-{37%e~JffE&>-HtO@e zwdu&E`<~BauH8K7Lx3z$U-%VJCxP{1iu{N(JkvGncscLn8rOug*OL7Rs6PR2?EwT1 zcK~@{TyW8=0V~R(ZY&zsPy7k=qf01T=^MH$1k>P&swI*W%&j*sIFRTlp7< z4g?d>5CVXZLJ4d;iOmBEeM~rS-J!6jGQ3Z}H&d#8$9Nbv40t}grtD0^&wIyi{JC=e zC?V-%I6)&+1a3bMUN7KsDKCVJVj_JP%L`j02On z8Qk0dn!uVAd(VsXY=3%ZlZfAHG30&$vmip?4T0&-=`Mn#7jzxcE4e~{r!MCxasHQ1 z6akGUpfLpS$JB9Qhew9n>I0g^p-tw3VxeJXS0`c#XdD5Iy?7XezWF^ig&@3Ue&Wdk zbGHx3W?cP=>t^3d5(pZJ1ZKTx5&@Eq%yli0?T-u?q%WCL$%pb@I@&k#3r2pAg~MqP|vYbgFsUw`?q^;E-KW>G-=(i{Q9YhX(oZ0 zMPOy{wQ)`IA!pwnau;72*wq6O3Ss&Q$r5%gl))#yPr9`(T1&9o@GSx8eDg3NX1ljc5mwk+=3$o^SmfXefzvy{0+k{ZQTU4hX7%RURZbV!hrTNgQk@)d>@G5-xpN3zDF|V z(2=)&1X(N5&!B>h4Up0bf$t74#v9Hg)^-_2eAoX%kR2Dy5=62e+`>ujICf&Q)}F$J z_YaJ}5)}Ih%mD)HbU4_pU^zvNh*s}+GtTabvqEvFo%{v~z>)`6LZMsft`i|;57LEK zA5qiNwj3g`h6##Ikdu=ritN}Dca5_A)K6?7`uzCyfW{Gm;zvAeGG3`XjS<$i?)Q9o zN5`V6tWg4Uj3EDwAorc1Itqjz|GCEnOLw8>X&dU!&Slr-b?h1ZK|p_kHsBv8fK`Bj zf7$84Fyi6<{!J$qMRNLLo)_*Lev~^wKqo;>iv1#B#U(5sVnJNG4cS7*yNOR`vV&mf4?t=l0F+8=9A%C4kQto<|PSmsK}} z$glAe_nGF~Q#uEt1V6lU<1Tm$Zp=fkAR=I3@h_Y8*c!Dj*Y>&5aaX3YT}kaD3k11* zJb2bCGorkeT&4bATADv%l)id!5zZw7_@1zniSc!#cSf4qSM#uyg$Med$;$+E1vEY& zw&0KJ5)1iKA8kL;@Zxd#z5PmS{}NCuB6^9<>2~b&kE5?HQ)e1p*M1W*R6P8WsBBHt zv>`Hs1Vg|>3>O#|2w!95hhWY5frZn72%L8C7JRIE z{9KQE%srF+<~~La-8%&wiOdOJFFquB+s5!Y&y!ADF1x-cBgro~5m9F%5Gt{+st33> zeWpnHrH^k<(H54DeBeSvU5Th05fr#P5s2_i^|P>nwAz%>8lPWwI8>v!wD}|l&Vz`0 z5>ftFL=K0?H!LmnOuXP+Y;kq{~2@7qLB|q>cqCP~_mk6{NL~w3k zDJJ@W*US*`Cqlr`971=Hula1p?ZYp+@|@1_b^e(Zb`}mG$_5f8f{0*M_Hhaa!zeK$ z2k{(Oh&h+cS8?@KkXd??q;m)n9GcL-9pNP(D0wbOU$M!XtpVkyLy4+kMBvB@Cu079 zyL!5yBg~A)k6sx|GA*PvWlbD@QV~H^i6owUO+?=iQ4R2pMZrf*?wcC}yuFl$e(Ig_c9Dib=j65^-ts;sR^Ic>1diWRe-N{5&3Q;4Ks1U-F27NU$HhYu~ zYXrHS88DOJMuVx;K~!MW#y5}aD0iUhrsXP%nMB1bqKY36hR8kwicZQke)c(0u zW(Q8X*1jX6?}@OfNp5&NI3d~-{N&3~+Xy>b1B^K=;zEr3p2fyk^T zp8AfjA%eTbxSR{@{sz=@CS+S5y6yav7mdFbLTW)0h(Hro4>Qh=9I)-U5CyR~z2KUV zyv#t2g_*yn8;Gn%qJ$$6JDYXZ(qc4DZ?UJynXZuxHagQpRBk4!eI#o5inUiD(D5 zi=Eif{H-uW z`!6ObPsu$*w3mqX5y3S(D$Mq=UvaS8+FYl2ZY7O*Q^$X6{bwTU3sHFm8AY0fk(qrY zmE2uBZ$xD;(+VfbXTK7a0|jk~$d;wAzDb%ir&Px`8^sPpzV0Wg`|yJ05wm&N+i|vf z@Zfvj>WddUN`^%dTje7@z7rJ`<=tHs*Lu|a2Z+o;B02;rf_s?A;f57tflMwl4B;<4 z0{u3;VF1*4vJN^3rE*K;(4H?hTDRm0juHXa)`Lf~DG#S8YvbK@=G@)ytbTQQjEH^% z#mGk9zB(rmJ@gcZ7*HT7D;@KZuZ~`V%Id%`L!QxzZ0GS+_bbbZ^lb6BK)O zYjKs7Va=O6l|u4lPIME?>|D-wF?B?;_jjPh%rH3=hI{}0W99m~r160@5;%$}*g zlYDwg!C1hCq&Q3f6Jfo0Yk}fh8DsO;BE2S48Q!)e)Q$we1bY&P6D%sQz8hdy0^6eC ztQw!Hr!fycH|lo0opvCp_6mZ2M#!8V6Y>R14bv*WD^@-rjwCrJ63dyybRj{yFVHTH zA#fJQ>OH=%aciTVLZIxUTf@2`t|V1A5>V^7Lw~`{glGUXbv30q_xAMO*y#P=3m-~< z-=c*ak5g$qOjqfvjcA%57tt8>AfcWlFi>BSIP5G<4KW++x!Ly>owS->i={OJlBa@p zc#)ud13VX<__Ka?{B|fss&!WP^th5YNyUexnJnN-g5wK3{NPoDPa1lZ59g@iZ659N zexNY_deV;s&=2_aKIOeRdsy@B&#rCMeNccf{7K9Jl0+a0&gKwd;UKIHcG{#Va<4u5 z(x}3!kYCFh4XZ_`o&}T85E2j^U{*#%Qt@$X#GhL|w%z^c=f#LjU`8U;>xMnj-6q`L z8M|~Gg@RvL@NVFm@b?&eoix07DvqS`3J193_0L(t=XdSASD1EhF^d{u5Kq!fAjv0^B&;F3pQlg= zIqSW2{BmWi*`er`?3Utv+({(GWRhG831GVJBABNXvHV~&peajgeJ_dDJ--w;ol0V* zktEVd>NC6$YyS*BN}h>57d|Xm{^CBiD#XA|E&~>x1cV+{SnyDX;I|D?dHCz4M32LU zec}CCB>8NTdJai$k{5F!{vsl)1}l~4BHaxm4i@t%U3^uZOG4k0;0BRL;_w7-{Qs(- zVS5GI+vbr`V16Ruq}d8r$lY(R?&XuT3rHFz0)-%-dH{#l(L04)*7M!cU$EmvKXG=| zqsBmT5lNw#BpVA?Z~#cWOcPbqJSU?)yHQZRWwdE^2?>3NNh+HHzv*Las)_ygI$_Ga z8(M4QV&0R0@4l1-6wFu}?mwz~Q)H^hfRo4iozmj`2alYpqpQnE%H<@L3X()8Ubqqj z9;29on4}Bon@Y{bvXas*2`x%5*Ice5K}_NU^pl;SW{RkntT~ccy1ZENaNB&)!!g-v zl1dGUxgZcC40lqKk7&xJ3;9=6n2Ix#pu2FW^6s)VoL;T>{2g2r``Gdo<@T=b(yY*x6d;GZ(u_ z5Rd)H3&!%qG47C!d-GV|PVYOSTHZrqdJ96*yWAVxNXMx}8=sRoTXY#8qI*ea`bY|& zNwQx^;Hd(dzC|&20#d`bUerX(*(b30UCaZg;96W|T*N@%_fVvl9IsM_ooi zgODKY_ZtaIA-$)E1$g*`eNxX4**hKhSlQsZ`HRDI$QMzG(>!?InCY zVi9uUxQrz~ZHA;ZOOk8ior8V@L67vlKOmPFNDl1KT;sWTgC9-CwHyJvEDo)x%##2D z3vGLu{=NUI_`1qkvu|U6|GtP{ATbw7tR)y7OrL-(5J-Xc+kS9o%96N!<_p_Rulu67 zvQ|hce@QGWvicCd8hks@6-%kRzqi+3T`O{{r{vs)i#IFeB(GORe;f#EZ! z_j22XiXK<%tlDeo?{Lm!#Vi77zW1_T&M(g8^2%;s**RkuH|0V`UCD6BvrALl9&St% zPmuYgE)x?GyjjP|jSM&n=&2!>txm$9bFwW8TC3G^H{Nz9D|(RSJju*gWZ5MC4!&X@ zwpOkFr8?Vsl~WEmARu-6><(`)G6d1Q$rzzAq-$5LX?!}^sjAu7WzF~a`-GVf8TBPY z4zUh=;Ox!Yp9)p7jCqvximu0A`s_z$`jeRfWOWzPh(I72)C+i&O!Qz=X&0y47|gd` zzxexix#a}smLM`3OolurZ*0$K9W>!cUizFU5^>wCZYBRt2w5(atQbaSg_8kr^N(WU zSdyzJ&fbu|Re!)`X1QBEf(+0A`0eVF^!4u>WUhM3$jI0`oEDEHE50VH#)`fnb6A^} zh#+`<$?|cc8Dz*#!?NsGH-Gz_QGQ-yOShN<`8jiACK=5lgQFdr`_glE1rr`| zM~}&$=US_~*qTjN$sudxk|CSF{a=Xm{>hG;fszp)8&5oItJW(leM<(SIryby+4&Xv zUB`pRtQy&A&~-e=RlAK zUR>oa#WGA#-TnGS=K_h+=2ApfC?+#Y$g=OqKr$r^SZO#C((n2=zAMv}-f`5kT0{HN z@Ov_=l+2nD`pm|{yh$R4A?EppvRw8KTi@xIk=4t|nib?zm1MLEq?e5HR>S;ZXtNqJ z_$D5j3D?4;JT!}eq;!Nc-#<2Bk75X2O2}m5&xgr6GPb%xGDXC1j9)r;jVbDE zgS^p^iI!;~1ChNkQvQ@oNdB!pJ)1H_*RK6#w=9T=+ogIo?Rx4%?1);jXqnyINS19P zvzlS8$-u1B0^`PRDgS^g!ik~~g{^WJ;V`3%dTH}YN#mRAy<5p>8yS+F*!F)(X3x;} z=^ul*n%toNr8iaWWVC|}_Yfa!*6Ux$%LqRpYn>%eJo*H4NQSU#Kei-JRF>{ckH+IpP5(6Y&$W~_#bdJ!>r=zvaCB*0X zC|PBII0nlEMB`YnZ;zYhm@}nG^P9tUzhjXX#=emizLPb6keTm5fPRtz4#Q3{(bENC z8oYIc|Mi2O2UqPfj=oB`L;59(oW0`mzVA)Zw_**ByqyL6?v0bt2{K$k{4m|EXnXL9 zq;yWQmu2JAIz`W_N%F~GWC<^R@cbZgxr_X@icvXhPx7_o;+=`V$=Xw7^=Y!)3|R}3 zFQ9|qdImOa%qE0DBe`;<%HEH$p|kGY+Rni(?Q>-2AF|32&ph-H3#wzRLLtIP?RUvX zs)rRs)vgTa?0u1Ra)GR}NY+>aZOGXv!bU6l z!J4X^4uO<)rZyCoErn%Ak?6t;+r#^Mn7;Xy*E>wC>jwY2pkEHU26SfA(m|(&~Yi;XN=}d(Q=^x6OSte zkX8@DMRCk_W-7klg`w$OUN0};+SUMJcG60p#{;`Gi4h$ZKINUO8-?jkIpaYAstsXJ z=n$lq0qC6zvAMdXwk$+Z)-B`;4R5`h?-fPfi=ygHf!dx!Vz)yC5&O%uhPdyA77|fy z2fckCI`~jDd?{Lf6jqB^3$GUsbZ`ByklYF~2)Q`9o~Lnv4<=pXNc zDH1u(-^5r*OKrWsihS$G6zN*`BeiCt}{uQq0{=!8>P5fo-5 zh54F-zM%kLwI-xwH}U{_%jdB~pOW&QNs+S$KJ78lIu=Edi>5#tI!2dtaYyiLSAXRT zj0(ZCtA$qH#!wVvDa<$uOXWXzzCn8N{%cQfzN$(mO7F^(aF3^`Cr|(zGa&$IP2bCv zGNVO8ZY4=J`#uIgj`@p2oC14u*EHQTGUu+mBx*g;n@CYlqOg)F@)>-8c-WDlPl`cx z%S$Qui_(Ksz20@&7I7lqjCH?0miT~MYs>X;yT!_Z6pH#J7ud^{mIBYTx$lo3)iHSP zx1YEnm2xr-CLc)mfrDda$_4dMPanClFmzvu>x)-9MKgn<8pAb*A)O1?RqMEl{aPQe zM^{D4o~9TgfPB`q=cSvngfE%Didm!7t(8fU%K}M)=p@X;!g=QeMVV3Dz&_E#pYkF$ zW>b`ND9X7MwMl?}L6lz%8C`$wZ&<*tmEF5(+oGNpihniYYKNq{r9phT?r@pxAcHB0hj%=vln@&PbC64|cJS18BUdDOpW02jZB9H?L z1kW%JGQryf>u!=OXCB40=ot30)-%SC9BTZ`K_4A$|_-xquZC|F9!mhmQe%q z%KXUZ=&~*oW5>4AY6@CI0jsSRb|Tc6X2YNrugIpo_t7Q!Mzw0y(f6&dqsZ4&fB<_G z@exL@Z~VKPR^}15saHrx5%1F8K#^;tFq6sYne9K{bVhICfvE|sLOb$v^#|2I(&s&oCG`hi39dQRNm2SlQSYL#l6ZsotNFk* zdUE~r4dJvlge4#=+NytZM>hrSp`aI};VYtC7xS+^9yv0Qns~=UdLgryqS!}~`%F0# z&iw_Z9dHEL8O1hzWqZ0ld^i?UOXn=|Yv1lN`jsNrPth2ls1H&kW=O(Apl@&JV)#r) z(P3;^Z$mm4pcWCsZ#9d7m#mvMd>@#cn@IK_p`fD_K#7h~z)=9y{7{?aksceJjd{_& zzxH@(aZgUg=#p+huFsR4Zxog96sVok2W0GsV%l`uMQbjE|C*A(ZKIuyKPVbMDVpOH zjcmxXj1jUx_J)S6Cfm+mrHEyi*e~DNHbFrrVX$0Zuo;uHm9l5xUgPzDDHaoVM6_Sd}m_5PmZ)J|#DX$m?+!Q6wGH`!pvN9EhOT0Q|6 zjP+D&W}eMbROTq^e<HvG(~~T z!et7OTK*pv2%0`wa+H7P-79`u*1R1qf8wUKLeU-)hOEb(_?4dDYMeBUwb$Zsb^qP7(QgZz{hrI3stl$>r?(5 zx2B>tRES^MQZWE7hP{CgS8nC%3Ed^u^J?SF#SNFGpV(1Z_Ee~47$WRI1!8M(;~@b( z=XpKEO@_c<@4{y)bjgv5I#I#WjmK^y?(>g+xqA5l*eqf!sck;nnJVW(Wx7%|-Kg>( zDSvqWNj-1gZY4wBw!%hUp*Fn_VoUB+4G*e{CspZ{qax?6OFI!6N{jpwx_1>AT13} z0lSxJe6~HUzlFP=KZvBNw+p?dVxCKVta?1Mzu^YnxM=X8LOH($OaAGWH&lgm!6d{m*h6-#Iu~ax@|CiJZOuWFHrfJ@rTXQp+3J6&E z^5=B71Je8wua|8UjjBTj*QZb+#}90pInDm0hNaDptCe3o`&;X!^bpZZk3W{+$Q!(7 z|MTO-qfI@jR5XnWJ1?CrN2Yh7vG8Y17t5VTDf(NLewEtfJjtK}pbDOA*G=upU;3Qa zkd>mmnK7{=lM1=H@O*La1}VihgDVTmU&?J3To>^9IEmFXD+NZfCO&onXrNA z(La7!9B*lA^(zf|6?D33<6A142SUMHhTRK%KYa_ysGItp_DO2vb%QIK6TC>Vz_m#0 zvqxFwfj31aJuaNfr^*#j&rFIIQXy`5?-mGy_`GtaS=MuLIRz)T`)0ePi>SLoPdypWo67sYVuvO_eIpxQNEXR5=UKmc1@arHXd@L6q}a!AdvNgCx;U+^ z^>WSOG~ojk}}hD~w?A=X203%TO5#Z6WV74jLOeb-|u>v;ziHb2|XVfAG;=2t6K zv5hL%PE`u$?w|s)?;rXE%R6VE8Yei2hN~xS6wd~&e|Ke>=TIjVO1eNZ5A>SX2CY$E zlD*D->6D;E<0mSsi^}Szs`pUkviQq|{_}J$?zQpXX#PDp(kSWg;c017FIBUTs`{BK z(SZ~GLIvJOtRfhgQAjPMX$K6 z7s+|L-ot9BsbGML4q`$wPJ-@a$f#&{WL9_N$7KCD-z@rSh$=TsWgcZ8+B3SbS&|#y zy*_mQ{;bu(*6Slw`5FU*rsEAu=Irf$Q00D7ndvxo!s1T*4og=j z_fTDtb&g}7kxk=Nr3vckY>^b64hj-Go&GnVmSv`MEk|~7dz9cL6>KbMF-tgY7QGf= z@MNtBjiO@v@)uR{H&t$mdM1VRh4L>RAea5_M_X~%Z!zL4kv8g|D4-I&Wjb0Cb?>8# zafW>F4w>9(DmsI0e0J8V^thDO6`9?VpUvd8^6ZzwXQ}8MY)qaAEPSJPCO(I@clqjL z-RF0ulXFRbsOUVl+ZRBlA)p0s9O)@cT*yy2b7z&1?^&wW-9;+8gz0Iv=kE92p$xLf z)#FhM?hpM0&> z|3}Gw+_E&j_gsQK4RxTwy^ehca=hVM@%Pg{A>El#Yr_!!Pn(&4-#&}^h8K_Dy1VZc{1nrA zac{@VwW8P9U)(V1?zqb+-HQf+M|i$!4zBH&2PMX0zWN@P=GyTdI6}?MGq^f>bu@mu z9Jrk-JL*kCeP|G0^M%2KF=BTArnx@+@+qu~`O}yIG>t6& zNr7oGFc6O+yZ6U(6>J{W*CtfV9=8vqp+Pi&BeGLR$E*hY1Df0%Q=UH9de-4qV;~7h zjSqOUM^NDkMeQZ!z}0ilgK2084WjOv@Uu4_x)=9rSX!*tKo1EQ*O(s`T4f8{sz)Q0 zEE*bO2#LO|Z zsWaw!vPdjVHjW0KZaC+WfKlT=@roJYe!gW!^c@XJ@ia66CXG9h#^G?w!0fj9%_JJ! zbucgvJEnU*9TL z_HMJ5L$0sqAm0ki%%-6^G*GmTcxYcuCGhMX(T2G5aoZ=T7oXqFrOB=!Z)rf-#0Ecc z%o8_CKb3ky-MIc?b8GJJJQ}l%0$v08F5-2MXDOj_OLyeVhtBEe)3gd`5`{E%A7mUW zv5wSq-W;+?yzuOi=RWPS9eKBlXsX3DwJeB{Lc|t#aJDpT%-jEJmBA;5tZq#S4VcT` z!P5LkT88W$2){B@VYFTBgr;o11oxhrmI z3^{Pi_hvawy@JN9q)AlKm>*~-Kk-+?+ZaUIK&PHpxCSQuU)fm$xNX#8o6EoinJn{e zJ>Brrt$66~OtObNQeDxRV%@ zAYFV#deF&L|I@|0f!#F4&r}Hh$MXFc6r_)7e3=A z^?Zq;2gMG?_tMZl7#j`!LIe1`El)gw4WUncxLaD>=AgWowxXm+3ts*!O}3w=9sy<_ zq@4P%*?2klFa`1htA2Rx9IzOmp@THAld)Y`EkroCLH9uM(X5bzq8$EXLo{@l2J9Cf zFu9%4Id}ck)wyLM+OWhz#A>Y(n&JfSD5xgvvWwUqto?mlt!FNCt}V3RVZ{GA4B9^MykbtN|leF^zoWGzW zfMC4Mb_8DcUEisGjQB-CHciS!wDiMon#vSSewudfHIYp!h3s6~aKm+XhfZKkSWq`X zXLN=J5vExhhbshIZ<_!C&SSuen4^Wgasj_QjfZbn@aQD=&e1et`ToFnZrr=2hZOKk z2%Il&ImEqQSZ{!9|F(G=xa4%}etWuFuz&;n3WIGSyxrRrZ(a+@eh?>q`GUHUiz8jdi7xL;-PvPl{kG(d$UEVWZ#c597;7@0!@dVI;uG9#y`e2GKA8 z-m$!$97tyd(PeGvB~-Api>t=UvK3tlzD6HET4vFq5ljc#(h!(c0IDKU(T}^%MZMSb zI53^RgD*cflr9@aXNA*MBIsx|k8mU%bd0Gf1Zc+)*e~M#4a+Q?-u6pBoDY1>kX3$7 zKl6qTh(kwFh*7(X$lN_`{h8~s$QpxnH)?-I(V-{~EZf7`LzV-j6rkslIMgp)Np@qDV8GgODc zdM{4FWV&1mU80*L493n&^^<*O0&_hZz9k*5Qc>NIAcj~F9QHnV!_l;_bia9M%lUJu zuy$DPsmK0U%)9C;ZOXkghdHDwsM*MbY{=B@od2+u}lS#mi z_K8e7nng#m>0rjZ2Q>uENDkKvD~q^tZRlFPS0_;?IET*c7XSqJKEIPz<~{*<5xeV% zcPTzTmyW)rLs+~H!&#k)JX?eRlYkSjpx(QDgrg>pu9#2Pm=r+C=SBhON!0XP$o7 zGm0O6PuCpgDFxBP&^!j1=!pyzA9^~~)NF8|XKu>|;pQ^BLM#oOjB@R!7oMzP?R@+= z$h(JJJyK3rsGvhFpk@L1{AR|3;%-rgF^w$q;`fAM&&8 z+3z0Fq3F^Rc}ppomO*uNje0t(fiBxfSFaasqGMTC;9c{kHpB8k;XC-Z1rjFESg)2= zcjU>M6>`4hgv>{}atmF)m42#?j<(a$L4huA;NKnL{UU_e%yQfmD2dSZPnFmZa<l z2OaICL&dpI&@vSAf`YkFT3TDDGLT!&^h-hnxM3`_QbzSEK7HZnXFB?Y4#8jS1R{?fQXE9D-w-ITEa}%MKJ}HZ z*$R~Bi0h>`f$ZH*&zxKzevm!zild(n$!G)Eh6Yvq(4@8Q_4`#k)j=l=EfUQy4ANOc zblD1o`~g7(&Ln6x-hCUpf!fekd{cR9m@Yd)S01IKV|3s^tKbzL#WwlI4)?j^0nhh8 ziaGPew~*5GjgEe&0~N{-P)Vl$>JCBYYPhuTSg*BxSO4aT=~E2@_n&mtak^F(w-;84 zF8OzSe$V(TBzpC)t3H>dcwUo{=iC8Y+d4My)3@E$f8wsr?g=`CDxn?E;qQ$5YmTUM z1{tsAH+$hZNtgXam+j^n0l*4UB3onjLH5eemsK&xWV?Ab|E8-<(OD%zExaHi!8dLC z2TRrk6xDogrvIp1 z2uDLyqJIJBqoQ&7AG-QHowYz`Ez(&_bTI0}I8%9-L397BS`T8v4u$A$^^gC%X*qWI z>LuChLEoRPV4D?&K>fZW>t|Bu&o}d|^J@dw&ith-S}~MgGUTiosx}PNmI0G%$H3qw zaH0YktUUu`{AA<%MiB@21C)-3BdGbFZMD$Gv&9mRaYOr&hU<8Fr1Ej<9CZzRwF`yjCeI)bQmWdOYqS<;?YGaQ}>MwXR&ZG$xJ1N% zy;plSAekDxiS%^#UBPN!2I|LvU>+uziwkGiakui`dQ=s0;P2cP!8jAiP#EH`$3RnA-zbMm#+{|!*J?6T6mkx}W}t5v=p`FW zweR5mtV;Cvx?{KB$GG-V#*Zk5QZz#=h9S`{3ids?36#VaJKXyeL@FZg(@4Cvwy_NP zIL2vP&J-T-TNrV#80!w6c(ps@H@}cm)Ae|UYyv}l9zQ?_V0uJcC6A+!xbOZ9U+0}l zwdWHV8c7V`K#UbihWY(R@@Rsr`kiy|x$$%EC$9XBW*vIIDGXLBL#0_Hk`6hnXI@^> zoV(re#C=ixXln3qXc_}eXF%0JwrF=LbI#tE&ajTO6|#=?q4s9LEHS`ivW%sr@QQKd z)CHH%*Tt3MMt3{B%3?shV3;Vk73$;MD6unHMKJ6goRj+1|7o`9@|AgjJ_lSir7_UhB0CiB+R7c;a<80zmBP(FE{ubK~d z722Ory!iW!^v~|!bX3!PZ}vMOr1*)I^9CUm)n^?>&Vjn_d-Ra$u1mC4Yx*-Xw6$+m zU-3QJD1!K%szNsH4$aRx(mE60eB0tZL%Eb8U&cVo8E6Fq-6g9dT*=^Y#hCGopgJDh zqpBECaL^b|3RA@2KJdq(>w6_QiDCxpl)@vrh=^oMO>lPf;+4elV6TjFsmTd0MDA~s z`{4Z6>F4D?#P^+>{P}^QUCmI>fPO=4|CD%(bN=PmBf$c38Pw9Um>Py=EknbRy9n;G z$eobrCLNEVt$*({3SHn&jI3j@f{3==0eKu?;9<1;tG9U>w;Ny0k0-v3in6ea zXkp0yIQETe^OaU5*0H8Waoo_5*{W+r zpBQKt11_Cx;pG*m7}Q?%7P(^hdQ-%SJtf@?w1)wJAWW^an%+?FKX#-3oo4o63i{H& zmx1;%z$Y<}31pS8;mt(D`KlA*wL^z~m~$kNk&o+VJ&G>0pIya7xwdwX4}NB-d|_yO zWoQI&8ndrHvMN367+fl1BLAWnA_xcy0tyO(VxH(KYaYo zJ#%O7-MKSoPMeu!ySw)~cHF#fGB-iLj`@aZ zMwk*`SM%I zPGco^-rw-`>sB{SQ}To$p1sqY_IN-_W zoTFBL6q;Nd|K@@9O-Un6cTDEHCNLP?10Jyye61@js|d=*-Pj!aQP8Y;%lEkjKYS_t zzRBEbf?3BB$aY8L5!g||*Udk-{gW4+Z=Gs0*|(cMbTMMrXuaV1&G4qnuT+=MeK+iY zq_D#@qeKfo?7?!fai_D#v|n}%yz`kXbWNwp{(;Hvp5z!G!seEQrGE43`%7XzkVjwf z+$`|uGR^EZecWS$?F&wGaZha3-OqO)oqlQl`smQG48~uqX;* z=fDczIrm*FTcdH5WUu!ThjXvU9+~VOn;gT17$}s^Mt5G^qCM z_fyOrd*D}}C3P>4zdOKrVwxN$0UpbB=rzK@*ho{~Q2=u4jtnCu5lA3IUztrSFT zZH5Rfc%RidYwMKxFV;;Q_W}iPJPxYj+KMpeEcYrvf%T$=B28rRclvdM!QlUx>1hq z)XXbf4+>^!SP{N(2L%yDmX&27#(p*bv8U-B-`CC_3Pc#^gzm?-Rd|@ zW2)?5)?DwcJ*pIpewX@9U^oy&%`U;E+N%?W`Gjoz^y9gozqhKMvfi+Vni@>a3=#G4 z_fil>09_LVB9;2ZcE^91zRv$>^$S(h>EBXKs*l1PHf;SdCZnqV(rmWY*EfWkxsS3- zgF_PFL){MQ`{exEVbz&SIj<_VC&~9y(^3rH64jK_gr#Rjc3LNQqzU&AMm&FjGKW%d zNJ%0r^H%*Vz5H-8so{AS{d$nB7!wpm%?qdO4pI*Hv)y+{M|8jPx{@z>+NZ7bs9GB z5H+XW2qBo6wnblezMnb#bTswBha!)z<6z+{y+7vQx2?wSx64nr#eJ0!MVX_qa~-B& zhJZtkevjaR&oCmmn|RyKS~d3bkGx&;Cn#bl2t^0_#rRTO4?@)6zM#-KydjOHW*?#E z#!-{+3*#ve$2KggRDcd!D~Wh7^<`>XjP>}On>Q23CQuM*4#j(9v6n`sPd%&qVx{a= zuMzw`0@ac)F3G?0pE|hS!{0ASj8e>_CFPjPaa)#+W5rp zwI>^_sooR{;)I~OAHSGfsO!$&S+eb&YkME?d{QZM8vG<)It82btX~huT@7)ZieDCe zL)`C-UAyJs^MebsCm*He9-|z0NFJl+G5V3Cc7*-@)6btdpAor=la)ciX0cHD-shaB z+eE$p@wE}xL;;;nYmQUqObSi`z+O6#Qk`Dk8z?DxM-;)CMW>yhX4DBzVgqd6q&j1j z6Y2l**FTOvP_tzUugNEinwCw?b)up$9Ovq9Ii35SoblPp_%2aqzxP27H7S>x)-KPZ zz|oBxj;{~?>ezuX|9oT4S6P96zP69@sX3>pS^IeYQm`I>dGND^iylm$lr#U`pJQv} zj|(V>7l-#bv*FF3vwnHlKW2+e89Azd^gW&`V5c(ItME~Wv1qBpJ$9sirzhuR-HI{INwcm_CHFogf zE8jjhytJLm9?7y+jajGOJ9V#v=Q{u7l~JjfC%^T}^~}?LGcT?9_*}AVOS`;*n%^x33CU*8^0%*k zygfAZ z-&;b3H`*+;-?-NI{QfWA-8-?_`~91gxdjL9Iked>^KpHnr{=*MjeL5Y!{<*zZ&7n@ zQx3O`1(G|^Vz5v34@+P--!=bu>wepV`LBK6ca#nPNib=zMrGZR#QZ!be$jgm=Wk3Q zRh#Zo_V*~eKz=D|AaQa@bm?UIw`Xm3X?yf9-Mvpuicz$}fZS*~Gj90a*FBm-U3(U* zvWhgRGJYGdU&`Sk?*Rv#FfON#?zz8aq`>j>9~|@FeoxaunL8Mh;>oF23rsm?M_qP>n$tW{r3IP=(c`0+R>e!T_8^}LJzNWzck@}SN~5JzyG*?!Gl{u4;rF>LALp5 z?Ypts%SW$G>K%6djZ;g$+(A2d(sR9NINSUIoT&(Fh+eoaI!#rdD3o7i#*Nn4Z}Fz5 z`_S|HpPMoHaf(J1qkPL3{+o)SdQ-2=@^g9)L4FO8Cb<74vTnvztf-HJP3 zm0Y`hc5BaG+WafL*IH`z<)uRB@zeYFU#~c^FeHRF@1w!-xgS2rIyf>NKZwBi^ZTH8 zr)*j`nOAWz@Z|%vIg|#6x@85*)w$ZqM|ZQ|J)XBjkpHG96Gl6P(~bveh$&7GS>)-C zhA&<=R0scB-#Bi|&0BfvB4~3Y4Z-7H@juYi+2`3H>`|GTwNDKn`3F%wi8+7cbVtu#d`-7i&n?qT7Aj?<`EjyW1v^4 zuD^f&*k-#=UY2~_GJNWjINF?y)87jYpBT+k1+}CrFWZ?peh<Gb5I^lWcalW~_xb$MarEbYk4G4_p<4iCzH7Tf z&@DWm*MgSK~*AE#l~UIPK0E0N2mSdWx9JNBOuPB(9Et2Hjlq(8jKd8AMUY%7vo z`2K^4f_bYY{rm0WPSEC)G;A+{b{g#+n}Bf&RrHxwub-OtjM|(cHjwwg`cui$@YJ;2>63;<`sLA+@@dCY^qd0P z{xIy_bHRj4XHe52Nruy_zn=JF`p(T=*>9bu9nR3h`jvRJ@_~%w@d+37qu<}_=60^E zWK|(O=PW(Bi2k^kHlL$mQ;)e8iz^6b_3xbC`;YgQ|Kk42qr~TSzL{4-&nczn)(Og> zQv-wiZsB9>2IAALXT;ijz@XuFH_ zM~4j$l$Fql|JaCF)ge0Z)#B++A@b*Qzj%At)NiY3^CjB6om)*?R)oMtOwhQ;UZ>VJ zeZGFnu?d$1(oJ8yT|?W~(hiqt^A*}$N1N+uv+Y$J84y^ra^%@v*C78O4*CQ+@|O3 z72koLWI3b3vSfVNwZjKypT7R#jmEHr?W2-2@6vPb(I5G9iwt0y5nT)U=ae$h{TIoZ z@U);zzx%Ygm4@}II9OcAI##V8wWsgH`k)X||K6ZBdUiVv`~4QdHub?7;;2wJnr`mFN$9>eze=f;omuS($gN$!`vj&E@&Lw?-$RwS1CHa z81vJ*9mA6^yx`RK=36D*G@SGbj~o>|@6n0g1)-;Qt+{b?j(J!QZFWJrylim}zeMBp z@qz}$x=4w(xk6nb9wnI@$E^{UfSFTqt@yg+QI1Emv_vunK`gz zgzFM7IcH7{gvc&D81B4r%(j)Q`S+$y+&#OWp7)4`Ju@Fe!~U=yI^7faQkIp23l^yY z2jTeJ!mlSeCXbH)Y}@m31GIUNHirqE7_xl{oKyyn2pqBVuI~#o)(vBSn-o;sdt@sE zXJ`QZ+kZO0#e8*p-lxO%ywqCAD{*EZIs)h)Z)tX}&3g3yu#VpM8xD@yw2hhP1N+9R zwxzZ4#!VW1^Zcfy@ay%9?`3jS4ZhpH88?5{)Voh;^@zcrXSy(xwli~F8T(@jHwF*9 zUJM7o!`>8@Q%N=$cin6&8qwv_eDzxP_IEyZXW*D-7!&h<+WAA8=3hU?a(maAvN!TP zn8`bsNuJCwFJ`7UGt-AL?}R^j7hl@V@8QFViM@Q)Ue%~I=eietnfdzEK?i2XC|}0> zCA@mh>sNm&HmcLTrfn)drb!6!W6Zl4^H-LQ1(v2fV3y5T^MPH&w68hN*UtMhc8?Wc z>o4^vpX?L)`g2$IOh3`w^y<3-%#7X4e1Gmk5tuFRh`N}zBV($DZ7mI*x2ffHAY%?< zV28{-3~_@H9f*I2r`o=GPye1(jKda>IS#tZV`c<1=DiHW%AG}FDR|mvJyBIR1S1me zj^}z5XNNE|_c5RCXUqo}^AXEgUWY`gmBUS;Ge*8W!gf-z`sXKmY(ts3VGJC)UaAI3 zxZNuH1EojxwLs4|gj7Yusc^=8kbxj~i#L8p{0pldJ|Aj#yjuS9i5K>ajbO}?45(K} zu}2>LTGr#WaO#-N2i?9Nxuov1L(IG=W=b?Ovx(C)v=4CilFz*)+wMkZ1+I2%|Hr*s zhncyNa(L#=`xk|KC(V>_Uv+i=WHkvmX;2-{nV{}|^Pkn)xMtZamuHNRVH^@Au(iy% zlHTzj*p$7m?I^pkx$uX9SomEGxNYJX=%qs&`N6B~5RY10V7E>hob^`H`!klB;+feA z%)CTqW-q+TEas~9-+xCNJH?I42 z_Bs2=(LU0EHR+7~W7%<9#r$;ds@;T7)|k5;OFmomdh=0c?lA^V6kHmiRnd9J9GO>t zSoY7wh1*YA-;B**;8+Iu5ocHH=KtE$^Ua%{Wsx>J=h_`-9CAb;_MMW?x_|X%+E$k% z`CUGT-b&A8CPj&0E?Qb~(tFdk%Z*3oY^wcS{&ndIX6i|1W{#wX57w8TtJ*)vQ7^L@ zr}qG7uzQ1PtW&9RPkRkNYyQrKs+~ zM_2BAz{x&e%uGJVI3A_ffb=l)=8>TD=U>w~d!}6NG_06a!ptaThLthXOb0>HRH*9w zU9WYVx)D34^TF}Y-g>_DJmXN#*tJ>t>!IBqxhAYgYg&AL_h(bPXVbaf6^!ErX3j-s z>VBE!=vEc?w}ju``_<>|31>2{Ecvt`r;?e|2xqpdz8&_C_koFLXNG?}u`+3Z(N{6^ z_H*H5+Z8(ph57xg6p!5g(vsQlT)xCOR5K1W3>;A?eIN!Kp}oEFVCzao@15D}H0oA>Zl$AcM$^=(E)Cbc8-Q0}RMVnI`>*}f@TT|i zi77>#slHSrGcOe1H!R#~!AtCOR&$nLVo%$^rrHebwhFGC9g0~w_KQ4J|Jt{c9^?O&n&wGRslK3FsS9y9MI|337C)hl5?u9b^aug1z21@3bC znU0vM?wmCFOeGwZO8ozo5rZ(LZiZP`y5c!HeWr5Co; z$d_f0)4uwX__$5kcGj*=3*SfX_kj?Y_=D$< zFa5Hv(Ump3vF1}lkr;6$0nJ5sb_P6YS+*gsahTSf{m_H8-@!T@k!HbxXTZLucYpp} z$Qz{_bK8Pz_KZ$Q@?_0ktob`{7J`sAd!m9{#rUvOF5{AU z`5P0K^6!6g&MNM{lI(obdM9i4Wx>pL#ZcBEp7#WXSVxmlW_vRsKPY)t z$+%fN!dSa-7F?sZa6AdtIF9vud8U#+Hi6mNGwr2=EUc9d=Br-WQ{OkgYo5bRk&V~q zzuMPFu;xe>V(qZ;tT>-lZG3*%+lkid{!fZ`s4jG-j8?PoTmG6&7)%b zb+6UNu#U0pv?HuT96Ri=QR>24I^26R-w7Y(@#~EH8y@|->`D5|@vMCU>rf&0*Yk^sp}eFhbMtW zYM-WMON7jtK=d$2UJB{+q?nxIb z7Hp|oz5Ino-;Yn-emakZRZ>9rn=qeY`5$hwd-q0Z--~M;^RYUhM@6+QZM(QIG_fmO z{QSd+<)>hT0eRC4k@UlR5%AJ*eotP@`M25;}trRDzkVp8g|HIv^gVm~ZqhqddZ5lYpU;d$?0 z`*!l?`(}gJ@`KCXImgaEpao&4H2TYj8(*r}9hrWjkhgj6iW1gb3Js;lj`wP-Vsm%f z5xYs+EtUTw=?BZ;?OCwQTBKNtDOu;vyq%Trex^C#g_*0%S#t#o!r);FN`9HTtFL7E zlGju7mk)k>I=$xtJ0p|6$l~5#mQ97%t30WOlZSimTwL-X!E5umw)2&&xr&9gFP6aE zU&M=UEBtS!gm06DJRZ9+>k5s*`Hm+%1-!h$P^s$Z-5X~=jJddksP>=#-Y()=4QsAtVd=qc1JqN$cWUrpZ-4Ll zW0k!@Ctq1oyF9p#HP^FdSI$-FxeH+p>Cn!R z*PyF!`fk-qRjKf9@V7Y=?cNc;+#j5M`bGn5-^hZAZ%_rnDMcUOO1#>bWIgTM^K1Ry zOp3e?JqAYs+8?B6=FV7V@J(6&eA8TygY!-_v*sJnOI0^n*aBeH%As8l;J!TBo9{R_ zem~PAe$o1_{JgJQSo>S7-EDUA9o8;R5D9@<13d8cEE?u@I4Amx%EQ%T$4>az(#ef^-t(YdeMuN9YcI1qnXZ2{pTlZNwBe$Nb`s}2j)qcw_MN1Ru{O6tgpOgq- zG3VyRC98U7@}~7A3@`q|y_Ge$vA8J(4iMAr$@cr29h5GuYll~iYvr`Fb_pg>#3#J= z+ArL`V@|fuT~?Q?H%#har*yKzlEk=$@M7yX`5qZxk|~{2#zrld-g&@+>I)Lb70uaY zcfz}Gg?})5RFFemZ5M0qX5o-^?0EOibnVxre~ZcK}kGc3a~4hXwq5469p{eVYxhjDCa88#DgFqZoy&E!bRu z{^rDw_J29?YUq(caqKF`S55|~R3|SRF3tXO*C+nA@r#GGO!>skcCNeaWPfh00%psJ zt+B1+-p+}(J3n2~@a2Xg4_osNTeF`ej)BU8DovaGYTOd%v_)4;`abg;PunR)Ca}0J z8}ae^gmtcEYXrV4bpyQ5y=?8gZD;$~+9$(SVU|Gh&|~?>zq}RvT;9v8{2L83#_xpR zjfaERe6Vm}=F2V7RfCn22fhx!;A=bC&vur#$qg-jom*RXuKTpM{cZaZ7yQN_-@OZ8 z1YTp&f(nY>xM556zL_USw#R+pZ|itn2U1Yk>cgv+sQZ6;5+!mOP)z>KLs-G#5Kg_8 z)FS#wNduz0iF5#Rs}#;0(v7JYoexU}FmIQUcyj?GM8p@68z{)KBKwe1#gGU=*mo>c!8EfPGoa>o@*jh5>5c@Y9c@Mm)FlyY# zf%wBUw_NO@CVTPjJ&FuojFcQis-+)9@yXFY|Gw4hmYBhu3`ZuJVeJ{l$RfV8{HYg; z`*#(ISaG%LEa!rNq(Yh#sw5eh8>NYtlhYQ8iWK8rp*CK&aawW#(v~mUX#C@wl2-iw zZQODLX@p!sp0-$;W^$7Guz5Vv%zx(gx(}7Sa87er+(RFrljV2yPpkuU8KPRN2)avu zMqJList2sXnagY-FJ9j&t=07z{0u$fbhWe94yz)YN6K7HiguguxPtUSO`Pp|GJtql zP5i9@1FXma#QkCt3CNAMD$?dXD>bALv4Km90QpX`oC)w}Oe|kQk%{>q#O~GMOqh zIgOM)6*-4kW<$yZB=PV1Zh z5$|(JzTmH%(lVkTtYY1UvSXv zDdTVGNh~IObRE!&nB`?lQV`*bpFo6G&H@ytnW`noyQ>s2I^+h~)+86`y2J2o3*qZl zDN=2onDG0C%G22}>kgZAF@E8p@9WHQl997m-#4U0NRs~iN#M+srDilltv7@JbltK| z-#ztBDxf4cgvx>yK^$`O&xLW`_O6 zo}2iwqDDvR@HNMiYXHIy(exwYME(J*@!yapq|YNa5nxul1t`Gz%tkOBiO3s9OTJ0U;K?~}Xg zyy;4nllnNbTbgf8^6_rVtX2Ris~h?xX^9|24MXfKT=OzH=S`6uQVMBKy^>r+gqN)W z>b4+Q>#k|FYB9j5 zcf$Mzd5ZM0h#Z3SP-`B66lVlU0(d1#R3tlMlP`)_RZHS{DZKl}L*iglxV}!@CC*fz zh0~rQB^Bx_b(P|(y32G$TPaBtJdlJ?u@ZM-mLc6b+d5CzKsj?db)L3^x~-}mHY61v zT4U`+oe_|9e5gfk%feKY?yivRM!7AFL-K&aX^@k0L{}B5Lku>NLF~&%#H0nU>(%5w zq6 zB0izW1H?oD=|#-ol0HCQt}vSmg6LzUZIu#NDIm<`K7iUxZJsPklxMuhRH_238&%P) zi_TToPdlmet&iyY3k%o&__^dPBz_J=MAI!?A9${MZi3Ol4E8{egY zf+1dr`Or6tF~3TYD~!=Ob4VFniMDF$MSH}Jnqq#TAy$|uB;`QmRl&@CfJ+)-TuUmM zqsD8Z3&s{nr{S^4-RLAPvO}6`<3Zjv;~`!G z?}+A((L7SDUCDVgMU^YVv6J+H0AK~`Td%5{(#0sn`BBi z)$@;<9?ExWcWDE)I}{;WA4R0r%__+1pjD_MLXly0Oj~QJH(fF1TjgjA6lK~LQ=Qcv zQ>FHj_Ojx()jg{Q#cjn+#X~Dkfw!Ph>o2&Y*hV#LZ)pz-x)nZDhxVqxNx5C=ql}>f zmD_agx&$gp8L3R6ymf)XR4QGWAaua!q9x4Z^t#pu02)&o~P^F5}MTw%LqJ63Zs&G{deS|)! zilY$fuQdS@m;@5}fx zf%@(0B5@#dQ5?b4io?~3`s?CY=AgP+oT@*jc9Qr=GME$UTz#27SA9wyF3DoDne*yG zrbmBX(yM=@Z&P=uyVQ*mZ^KsW?bf>tuIx_Mll5c$4Iyl>A%gXm23qfw23sF8gjmNL zGTBJ$lWeqg7MsWBvsuzpYyn$hC}9hv^@d8e$#99iVYnc@EUjU08w#!O8d}-A(k^zu zaM8NT`jYi7nX|2j?Jis5Du=FArLc4+CGfB5(8C&G76&pfRr63C#*!dNBd6GdXdwZR#{hA`*uMfIY-uw=I>CR5{7`Gk^PE+%D}2Yqd0-ss3JLlifg7YdN(JNlf^mBRvQYX>AC=Qt09cjF7DTn zT)fjyMNT0;G>~FIUWqZ*+C@mtBQ01&t{?)>Y_MGG$qmE@EV%s2}Uu6#>7-oV2xz&m=iqItW&z0i`upA`;|F2mF))_EjEPJZ@5Ui$K zOTw_4dp2bp5{;Bt1xZJAVMvDJnSXIM7EPx~E+Qyw6;^-k8-K6y{6!NihAMcjs%k}( zio~I*Znq4kmvW%W8ku{%I>|}HdC^1J0dA|LUm2jvwYtkA75LbnNfj3DuyN)@7)Ujw zxvr{A4yl6_zeI4tz{Ilts?Ei#gC4+5m?H`(C8<2uMGm zm9OfIpih-02Knrv-j0uq`+%;R+eLGv}dfuftK&H_RElBq>MBxpY|)k9UgC0_66w z`8MPpQb2U=MoOqMN<;dP5^Y8Lkuo4XVI%{P0;RYbR27)nwyGc>L_HTkex};rk_-u^KGJA*xAcDqr(sw_h8%?JC`fT)R3siyA0;|s zQzHTksy=!CJ$G$chdtFjCS z`4z%EU7G2NL z>X`>@HP&;MLx9;ns};5hi&iU0GoY|a5klnx>x9n-+8nt7H10l`ACKgKWUfIgTD>xY zo6Q~6XQ=Rp25Zyh#|_!mx1bC*GyYW4jy0y4NH-wJ-f5cZFGE z5&_b-xXmwK2BLE4YLuxNw%`%N1beZO(x!cAt_tKf$XPx0zVtOuro!-&8_j;P6zKXd#Q zt2e;vGxN|P)K8U;hf-GY^c{H|h|@b@vcOurL?jbXR4qX!6l{Y22+Gbr9m&F6urucY z4o&`NkOC8b1)$=vaY%y3F_dkc3jH=wfNHyw46HJhcqh!bRfthwK>-9K>sb>Ti_)}% zdQuA%754rdLpHa|D%*NcpQlUKcFIukM>9S4cybx;;`*xKUF)$X=ww$BJ4NI=AU{f! z4klL^Yb|gkP7)1p)|MEr8w1!>@Zx}Ia~p3i)R1mKaJN7odWaPG36Bs%l;klWA8jlZ zpc)Z3Yq-Lx2ImIi4OiIM2cYM2_i@4dvlA)s8Tau1+U!q#x~G~w02I$>bZms;gW%VO z0dn(rFxel(l*PIffq9@|#3Gg$NjxAQ1w4y_nrKZ<{U6Ol|MAUOj%t1Coi8J+uUEn+ zNXEy2_wsSLtraHOHm>yZ$qlvkd0_S8!JJ^oMlM0 zP6s>D5X(hN5vXsuP@@<-FDh+A%B~+y4wy#oeid$+{R){Oe4N$s#MCLwd6? zL``ZSg;H}ZQjkHBtB^YX7cK3m?C^uVzShd-NCW?JghnH|PJ426r8FxGY7EHed1o)8qR8hbHGswP}a6xjyY* z^*K-7(;D4z>OVSN0rlTn-Fd3`e`t0c)YH11n~m?E^t+_L(eP6KOUJ9CFQ|5l|4z?) zNVnN^fv)#R_4nGIxBCC0?;Vi*Z;j8@@Q2Q~<1boY$e;AS6!yP0znrIZzcSGN%Kk?G zyAB%QP3d2Cz-o&Y7$Dnb8zOTBZ7|XZ`e4JekA+6;>C;Iw0(j+a09t%+N#YKUGk8pL zg_+=u15vUCa;&N)$c8NA?iO5g(ceTK!c+e|P5piftoc7jz&^!*`tflfQ*PBjC1`9T z?vUaIYrCw1v}C8|uMRO(Cx*^LH4hzz`c!@Xn!hR_s2lzJNK|lH|Mb22_ajlCD!K)3%QPWC#%R!)M;Ja5Y$J1?eCOCP+I8ki8+>ckxKPTuB>;gk=itvQ62F$;Yg!Q6ZV8Y!mP8GXK zBc)~1CaH&PpDa~&T$U@p0=CsVauofV6m^O=MZe;)!cFO`Y8LjY`cxk3UFslpyn3f~ zl%_`0sF_!!_0dJ?{A~7#D)nK8YJ;nBzwwN*-PmL7HAb2eOxdQ(no3il!Iko)!l=EP zyVMRkjZUWv>2kV*t^ptLB_@nL&7Nb6*avKh-pkh4*58)&U;_skuPMkjEqubEadzBT z4Zf3|wlLb~5>Cml$5QDWO z6+I^qqOc#XdAoGySP(2ivCKRV8xoGhL|Lxn3>a%6E&Oi>GW6LrFi3zgx85cdK2)XN zM+ea)hv7aM+GzsR?P9Rl{M%O3Y5*%u4CDgSAaQ`)MvJ=^DbT~x043d=BhdHI>e@h| zGH})u3aT&O8zco$J`3*!qe321EP)!QkOF}og-EdoctuF*6_Im@9VSwaITpF87E-)w zWglBBAy+URZ;a!C*ieUexG>wn!VW1;8HZFrIEj^u8bcQ9bmcs99q9aY+S63b_}Y>d zEW3~A0pSd!3rj#Vb^}V2K={Z8Spc1OXfsX$9S%N4Kjd+vY{2R^04csZ=yVSxKHx3a zJ+oNi`s_t^=-`LeBg>3FNaaP3sa3c5M~1*gLQ0mFq$7fUlZALkNAmCv6xqlrq(H|i(fxfW&C@oip>v|1;<{x} zfy`CazzvkdX!h~SX^b9mQ5RaB)83`X6Y*b_ry*M-tm1+*IN+?hzZkmCSHGCtnm@291Z{O<4!B+(KKpm<$D+{EPjn>y&r|8| zPNY9hEqbaM2caBH%E%-tV45b|Y@i-+(|aJ!BRc@BLMU{JN60~6F9UucNad{k@iY~t zfY0X*`P>sGn3()96)S8~kN_--$}A%IX+jY*aiTgHC52$p)0J@_1`<1oB}(gzK?`k}Tv!V4q9CdYok>5ljD=#OwrH3M4Hyp>%nS zF4czY1GQi3%tei_1tyLXQ2AVhuEt$P&^c4#UO~NbD5wF0JV^Rb>Ei}aMnL-{=b<#G zR73*NzN+55@1zLu8?a-5QG+Ufk!R%Ry6dxU_K?E(L9`EhY zgJ-D`DPWDg11Lb>`@cQ!_b>-ONe5z;g7hGcAOi^SBL)G7f)uvuA!T8C+aZOP`5lN5 zCF6rQpe4bGP*o@(w@v}2!!Xq+abih0rXYq&LLwk#h4x7=kuwKooWpR9zU(82;PZ{c zJ1s16EfBzVlmG-Ud^&S163LHHdToT@EN7=0cxoCJ0@rjKSg=6vKhF&LB=Of}TVrHF zn&~R={95Z^Eqt*|yc-5&7UDdT55PrZ94SIV2{a|3V28dyv|oGxjB3D=D)63QJ@{~I z_$u)RVYB z4?W~L|JnWjscLUP6)@wr0EmX7iiTo}FlLP0!^|ixX$2g5Vh5ynb&61Bq?$ycRSQj8 zZKf>!iY z6GJU3D3Xckp%6}z1!)=Dn!3dIjUm(t<5?3jFi+bEIeexZ$mOGKj8-I)2UlF2%Si#G zIE4mMjtK0f3eaM%bkjCc31G*)4+1^r0hhf3C>?5PSNV`VEK_~l7z5!bqz>-^3B3^z zwt7J`KWTxq;Fd60aD}Q@2BYQb4p8{}xCg*&1n<;}WuV?pK(3P*ny%aM%(MSPtOV>X zTaAG8$SJgOHp8~6aLEl8L2#8jW;D8F#Nl0!gd`p@K}BN0 zvjRd%GOPepkuAirlkf-ntiOE5fHIhUiytP96hF48O48a5L9SK*QD{>MI zD26CpaW`iu?h=EYYeAC0e6ZUd!BUy(5QUd0RZSA$N^rs0&UQ#!#PRa|Mv?{;V+W_m zh!LFSnrMj2y#%cCiK$zaE{3`;IPx~wXy=muDBk2UxgKB&>BD8!iiWqqkavnoE%4Er)M0#6ifuM}}(KNY?T3#4c zqakfvpa5Gs3pxA-DqiJj3u1IJUi}f$PfD;92ydl`;PgR&K+B7GQ#2i_+^d1m>q@x# zL+HAMcQo>0CrCi}nAh+c_|OeR;9>P3l*!QngTbF@gHJOhYlq@pa=74#amJS#;Ec0PaJ>gbM|=H86hiy>Of_q&bmN;t9wPRUTG{ z8Qf^{Gu(im5421#yaA-DU5MZ%-Hq6#B|(S~K(`0c)ks1Bt(sNns126S}IhGek*}H z_+2o>(#4OYqynylIExocQ!UYDAemgmIwH8F22cRDC{wz{Dh0jp3Q$0r|HFPouEI6% zmhiR!>TQ5D*tViXRS;<3CGOOLP|}Dsbc)c_(ZQ)QfKGi2OJu4$Y{0R<7l+Vgb%}}G z1u8_$k^6w$SOrWPZAjTIA>DxdKwS%aK>(WW6Sx9dB98~l3S4MN$LP@SMBE^a(On*Z zLo9L!rurGMCwOBXgnoqlk06&JeRd73P{-AOzlU+Ge~LE*Ko$G~(FqgEtRx3#HZ&=a zZy;e=ClZLy0LeZK5k~1DK;Ax)s}ZaY(J1CmC()P%k*x8E6<{_27=99Z80-F{HG zTXx<=DzG{T58jH7|HqQk6m+NyKof^)Fe37?DB92nF_HI_pcd3T`y(5%daz0~A$F_D zZ9s4Z?-QLCpzH6kqKzhZF)vU;+5ov2m_a%)m2HAx%}&g7laLzVZQN=ugl6*pz{CO&^C=Pn$Zckit4JuM<{ySx zt{aAzyQUOG-HWpAydtAFuUgUwMlGEC+)XjEbUDtUt(ps#^$UH#N6@KS1Vax@G>R^( z+k&A$hdshvVHOD4c{*J8(jn{?_6j?7L*Wq^GMTK+u{j{l;o@qDL7VLmF41O{ug7^5 zgBPx=n;ri>63>-+;gVZRo89kr|&Uc49SG@yeLr(Feq{Y(#YiV5a*Es1n`&_ zBZB+61Q8^>^N29cDi9%rpb}6tw0Z+Lk}*cmX}BXHRX|nLD`8>be|f}lKJElP5B=ff z5|)QBuUbUt8g)x|h+zLhhEHM4P z8;2#r8HA@l$F+3;`}%Vcl(BI2}nd&GN zIgJ#USc(u~4azw{ZoN$!pIkr+@Z)MgEv|d0Qsj%eOl>k;zY#(m5@#8Tr4?Wi!I{Mw z*e9;yAfdqFxd)`!71?JBI~ZCaZ^q^EPfd{x_(IN{LM>^*REz+|#a(>076ZA@lFUDM zmm!m{Wl`o+iv#`=L|B5-Re|W7fV5-97LBw6Qqn(6qmN`mAr$CafnW9j@_5;%4jLwm z9!URpaH=x~Ayz5CLe>j8vXdHr{vVM-bvjp7pagYa5CKcTG=pmm``|7PI341_9xRKK z&qH%+ogzzjM^_-iSb}oBn>E>L3lGVH=R!!W14%U(!E0AkEA{%i9-nC1=yN*+s+NNwGXnLy~p;AVB0tL z+P)ED`-V^?mPoa7g|7_m;^_C;n)lnzJz#4eYCC0*t?Umv39~ha+s-{`YZqZVJJQzv S5EhqewK|)ja-c)NzyAkIH>rRC diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 936334e..40275eb 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -53,9 +53,6 @@ public class Member implements UserDetails { @UpdateTimestamp private LocalDateTime updatedAt; - @OneToOne(mappedBy = "member", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private RefreshToken refreshToken; - @ElementCollection(fetch = FetchType.EAGER) private Set roles = new HashSet<>(); From 114c83d74046c1cb0e195a31bc5572de35e2a06d Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 04:54:35 +0900 Subject: [PATCH 53/60] fixed untracked files --- .gitignore | 8 ++ gradlew | 248 ------------------------------------------------ gradlew.bat | 92 ------------------ settings.gradle | 1 - 4 files changed, 8 insertions(+), 341 deletions(-) delete mode 100755 gradlew delete mode 100644 gradlew.bat delete mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore index 1ee6ed5..951869b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,14 @@ bin/ out/ !**/src/main/**/out/ !**/src/test/**/out/ +settings.gradle +/build/** +/.gradle/** +gradlew +gradlew.bat + + + ### NetBeans ### /nbproject/private/ diff --git a/gradlew b/gradlew deleted file mode 100755 index fcb6fca..0000000 --- a/gradlew +++ /dev/null @@ -1,248 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 6689b85..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 1d250d3..0000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'coke-poke' From f9047d290bb1684529dd244415d9412c1014f363 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 05:22:55 +0900 Subject: [PATCH 54/60] fix --- .../gdscys/cokepoke/friendship/service/FriendshipService.java | 2 ++ src/main/resources/application.yml | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java index 98b98cd..15862af 100644 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java @@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.NoSuchElementException; @@ -22,6 +23,7 @@ public class FriendshipService implements IFriendshipService { private static final int PAGE_SIZE = 15; @Override + @Transactional public void createFriendship(String username, String recipientUsername) { Member member = memberService.findMemberByUsername(username); Member to = memberService.findMemberByUsername(recipientUsername); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e937f50..20cf506 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,12 +2,14 @@ server: port: 8080 spring: datasource: - url: jdbc:h2:mem:testdb + url: jdbc:h2:tcp://localhost/~/testdb username: sa password: password driver-class-name: org.h2.Driver jpa: database-platform: org.hibernate.dialect.H2Dialect + hibernate: + ddl-auto: create h2: console: enabled: true From 6d218b25690ec1c6da2f658d4616debe5abc87e6 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 20:50:53 +0900 Subject: [PATCH 55/60] fix: rebased due to errors in this branch --- .../controller/FriendshipController.java | 49 ------------- .../friendship/domain/Friendship.java | 39 ---------- .../friendship/dto/FriendshipRequest.java | 15 ---- .../friendship/dto/FriendshipResponse.java | 21 ------ .../repository/FriendshipRepository.java | 19 ----- .../friendship/service/FriendshipService.java | 72 ------------------- .../service/IFriendshipService.java | 15 ---- .../gdscys/cokepoke/member/domain/Member.java | 15 ---- 8 files changed, 245 deletions(-) delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java delete mode 100644 src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java diff --git a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java b/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java deleted file mode 100644 index 00fcc32..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/controller/FriendshipController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.gdscys.cokepoke.friendship.controller; - -import com.gdscys.cokepoke.friendship.dto.FriendshipRequest; -import com.gdscys.cokepoke.friendship.dto.FriendshipResponse; -import com.gdscys.cokepoke.friendship.service.FriendshipService; -import com.gdscys.cokepoke.member.domain.Member; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; -import java.util.stream.Collectors; - -import static com.gdscys.cokepoke.auth.SecurityUtil.getLoginUsername; - - -@Controller -@RequestMapping("/friendship") -@RequiredArgsConstructor -public class FriendshipController { - - private final FriendshipService friendshipService; - - // 친구관계 만들기 - @PostMapping("/create") - public ResponseEntity createFriendship(@RequestBody @Valid FriendshipRequest request) { - String username = getLoginUsername(); - friendshipService.createFriendship(username, request.getToUsername()); - return ResponseEntity.status(HttpStatus.CREATED).build(); - } - - // 내 친구관계 전체조회 - @GetMapping("/my") - public ResponseEntity> findFriendshipsByMember(@RequestParam(defaultValue = "0") int page) { - String username = getLoginUsername(); - List responses = friendshipService.findFriendshipsByMember(username, page) - .stream() - .map(FriendshipResponse::of) - .collect(Collectors.toList()); - - return ResponseEntity.ok(responses); - } - - -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java b/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java deleted file mode 100644 index 77fa95e..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/domain/Friendship.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gdscys.cokepoke.friendship.domain; - -import com.gdscys.cokepoke.member.domain.Member; -import lombok.Getter; - -import javax.persistence.*; - -@Entity(name = "Friendship") -@Getter -@SequenceGenerator(name = "FRIENDS_SEQ_GEN", sequenceName = "FRIENDS_SEQ", allocationSize = 1) -public class Friendship { - - @Id @GeneratedValue(generator = "FRIENDS_SEQ_GEN") - private Long id; - - @ManyToOne - @JoinColumn(name="from_member_id") - private Member from; - - @ManyToOne - @JoinColumn(name="to_member_id") - private Member to; - - @Column(name = "is_accepted", columnDefinition = "boolean default false") - private boolean isAccepted; - - protected Friendship() {} - - public Friendship(Member from, Member to) { - this.from = from; - this.to = to; - this.isAccepted = false; - } - - public void accept() { - this.isAccepted = true; - } - -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java deleted file mode 100644 index 7873205..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.gdscys.cokepoke.friendship.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -import javax.validation.constraints.NotBlank; - -@Getter -@AllArgsConstructor -public class FriendshipRequest { - @NotBlank - private String toUsername; - - protected FriendshipRequest() {} -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java b/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java deleted file mode 100644 index 3d877c1..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/dto/FriendshipResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gdscys.cokepoke.friendship.dto; - -import com.gdscys.cokepoke.friendship.domain.Friendship; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public class FriendshipResponse { - private String username1; - private String username2; - - protected FriendshipResponse() {} - - public static FriendshipResponse of(Friendship friendship) { - String username1 = friendship.getFrom().getUsername(); - String username2 = friendship.getTo().getUsername(); - return new FriendshipResponse(username1, username2); - } - -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java b/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java deleted file mode 100644 index b0edd81..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/repository/FriendshipRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.gdscys.cokepoke.friendship.repository; - -import com.gdscys.cokepoke.friendship.domain.Friendship; -import com.gdscys.cokepoke.member.domain.Member; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface FriendshipRepository extends JpaRepository { - - Page findAllByFrom(Member from, Pageable pageable); - Page findAllByTo(Member to, Pageable pageable); - Optional findByFromAndTo(Member from, Member to); - Optional findByFrom(Member from); -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java deleted file mode 100644 index 15862af..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/FriendshipService.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.gdscys.cokepoke.friendship.service; - -import com.gdscys.cokepoke.friendship.domain.Friendship; -import com.gdscys.cokepoke.friendship.repository.FriendshipRepository; -import com.gdscys.cokepoke.member.domain.Member; -import com.gdscys.cokepoke.member.service.MemberService; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.PageRequest; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Optional; -import java.util.stream.Collectors; - -@Service -@RequiredArgsConstructor -public class FriendshipService implements IFriendshipService { - private final FriendshipRepository friendshipRepository; - private final MemberService memberService; - - private static final int PAGE_SIZE = 15; - - @Override - @Transactional - public void createFriendship(String username, String recipientUsername) { - Member member = memberService.findMemberByUsername(username); - Member to = memberService.findMemberByUsername(recipientUsername); - if (member.equals(to)) throw new IllegalArgumentException("You cannot be friends with yourself"); - if (friendshipRepository.findByFromAndTo(member, to).isPresent()) { - throw new IllegalArgumentException("You already sent a friend request"); - } - - Friendship friendship = new Friendship(member, to); - friendshipRepository.save(friendship); - member.addRequested(friendship); - to.addReceived(friendship); - checkIfFriendshipExists(friendship); - } - - @Override - public Friendship findFriendshipByMembers(String username, String username2) { - Member member = memberService.findMemberByUsername(username); - Member to = memberService.findMemberByUsername(username2); - - Optional friendship = friendshipRepository.findByFromAndTo(member, to); - Optional friendship2 = friendshipRepository.findByFromAndTo(to, member); - - if (friendship.isEmpty() && friendship2.isEmpty()) throw new NoSuchElementException("No friendship found between " + to.getUsername() + " and " + username2); - else return friendship.orElseGet(friendship2::get); - } - - @Override - public List findFriendshipsByMember(String username, int page) { - Member member = memberService.findMemberByUsername(username); - PageRequest pageRequest = PageRequest.of(page, PAGE_SIZE); - return friendshipRepository.findAllByFrom(member, pageRequest) - .stream() - .filter(Friendship::isAccepted) - .collect(Collectors.toList()); - } - - private void checkIfFriendshipExists(Friendship friendship) { - Optional friendshipOptional = friendshipRepository.findByFromAndTo(friendship.getTo(), friendship.getFrom()); - if (friendshipOptional.isPresent()) { - friendship.accept(); - friendshipOptional.get().accept(); - } - } - -} diff --git a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java b/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java deleted file mode 100644 index 90ae20c..0000000 --- a/src/main/java/com/gdscys/cokepoke/friendship/service/IFriendshipService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.gdscys.cokepoke.friendship.service; - -import com.gdscys.cokepoke.friendship.domain.Friendship; -import com.gdscys.cokepoke.member.domain.Member; - -import java.util.List; - -public interface IFriendshipService { - - void createFriendship(String username, String recipientUsername); - - Friendship findFriendshipByMembers(String username, String username2); - - List findFriendshipsByMember(String username, int page); -} diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 40275eb..6a3ef26 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -1,6 +1,5 @@ package com.gdscys.cokepoke.member.domain; -import com.gdscys.cokepoke.friendship.domain.Friendship; import com.gdscys.cokepoke.validation.declaration.ValidEmail; import javax.persistence.*; import lombok.Getter; @@ -41,12 +40,6 @@ public class Member implements UserDetails { @Column(name = "password_hash", nullable = false) private String passwordHash; - @OneToMany(mappedBy = "from") - private Set requested = new HashSet<>(); - - @OneToMany(mappedBy = "to") - private Set received = new HashSet<>(); - @CreationTimestamp private LocalDateTime createdAt; @@ -69,14 +62,6 @@ public Member(String email, String username, String passwordHash, Set ro this.roles = roles; } - public void addRequested(Friendship friendship) { - this.requested.add(friendship); - } - - public void addReceived(Friendship friendship) { - this.received.add(friendship); - } - public void updatePassword(String passwordHash) { this.passwordHash = passwordHash; } From 53c4e50678decd0389cdf15414f727163ff68084 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 21:09:16 +0900 Subject: [PATCH 56/60] feat: added email as index for query performance --- src/main/java/com/gdscys/cokepoke/member/domain/Member.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java index 6a3ef26..bad2e74 100644 --- a/src/main/java/com/gdscys/cokepoke/member/domain/Member.java +++ b/src/main/java/com/gdscys/cokepoke/member/domain/Member.java @@ -22,6 +22,9 @@ @Entity(name = "Member") @Getter @EntityListeners(AuditingEntityListener.class) +@Table(indexes = { + @Index(name = "idx_member_email", columnList = "email", unique = true) +}) public class Member implements UserDetails { @Id @Column(name = "id", updatable = false, nullable = false, unique = true) From cdb5b0aaa5dd4a85b6d819a09cd55ee13d555789 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 21:10:14 +0900 Subject: [PATCH 57/60] refactor: reorganized files --- .../{member => auth}/service/CustomUserDetailsService.java | 2 +- .../auth/{ => util}/DelegatingSecurityContextRepository.java | 2 +- .../java/com/gdscys/cokepoke/auth/{ => util}/SecurityUtil.java | 2 +- .../java/com/gdscys/cokepoke/configuration/SecurityConfig.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/com/gdscys/cokepoke/{member => auth}/service/CustomUserDetailsService.java (96%) rename src/main/java/com/gdscys/cokepoke/auth/{ => util}/DelegatingSecurityContextRepository.java (98%) rename src/main/java/com/gdscys/cokepoke/auth/{ => util}/SecurityUtil.java (90%) diff --git a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java b/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java similarity index 96% rename from src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java rename to src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java index b82fb07..ec2c089 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/CustomUserDetailsService.java +++ b/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java @@ -1,4 +1,4 @@ -package com.gdscys.cokepoke.member.service; +package com.gdscys.cokepoke.auth.service; import com.gdscys.cokepoke.member.repository.MemberRepository; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/gdscys/cokepoke/auth/DelegatingSecurityContextRepository.java b/src/main/java/com/gdscys/cokepoke/auth/util/DelegatingSecurityContextRepository.java similarity index 98% rename from src/main/java/com/gdscys/cokepoke/auth/DelegatingSecurityContextRepository.java rename to src/main/java/com/gdscys/cokepoke/auth/util/DelegatingSecurityContextRepository.java index fc395e0..8ea0957 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/DelegatingSecurityContextRepository.java +++ b/src/main/java/com/gdscys/cokepoke/auth/util/DelegatingSecurityContextRepository.java @@ -1,4 +1,4 @@ -package com.gdscys.cokepoke.auth; +package com.gdscys.cokepoke.auth.util; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.web.context.HttpRequestResponseHolder; diff --git a/src/main/java/com/gdscys/cokepoke/auth/SecurityUtil.java b/src/main/java/com/gdscys/cokepoke/auth/util/SecurityUtil.java similarity index 90% rename from src/main/java/com/gdscys/cokepoke/auth/SecurityUtil.java rename to src/main/java/com/gdscys/cokepoke/auth/util/SecurityUtil.java index b35fa15..20f2006 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/SecurityUtil.java +++ b/src/main/java/com/gdscys/cokepoke/auth/util/SecurityUtil.java @@ -1,4 +1,4 @@ -package com.gdscys.cokepoke.auth; +package com.gdscys.cokepoke.auth.util; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java index 44794bd..20eb766 100644 --- a/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java +++ b/src/main/java/com/gdscys/cokepoke/configuration/SecurityConfig.java @@ -1,6 +1,6 @@ package com.gdscys.cokepoke.configuration; -import com.gdscys.cokepoke.auth.DelegatingSecurityContextRepository; +import com.gdscys.cokepoke.auth.util.DelegatingSecurityContextRepository; import com.gdscys.cokepoke.auth.jwt.JwtAuthFilter; import com.gdscys.cokepoke.auth.jwt.JwtTokenProvider; import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; From 340532d52a4e70c0ca2de536a7658368422e2393 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 21:11:50 +0900 Subject: [PATCH 58/60] fix: separated auth from member logic --- .../auth/controller/AuthController.java | 4 +- .../service/CustomUserDetailsService.java | 42 +++++++++++++++++++ .../member/service/MemberService.java | 29 ------------- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java index 601599e..2facca7 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java +++ b/src/main/java/com/gdscys/cokepoke/auth/controller/AuthController.java @@ -2,6 +2,7 @@ import com.gdscys.cokepoke.auth.domain.TokenInfo; import com.gdscys.cokepoke.auth.dto.LoginRequest; +import com.gdscys.cokepoke.auth.service.CustomUserDetailsService; import com.gdscys.cokepoke.member.domain.Member; import com.gdscys.cokepoke.member.dto.SignupRequest; import com.gdscys.cokepoke.member.dto.MemberResponse; @@ -24,6 +25,7 @@ @RequiredArgsConstructor public class AuthController { private final MemberService memberService; + private final CustomUserDetailsService userDetailsService; @PostMapping("/signup") public ResponseEntity signup(@RequestBody @Valid SignupRequest request) { @@ -34,7 +36,7 @@ public ResponseEntity signup(@RequestBody @Valid SignupRequest r @PostMapping(value = "/login") public ResponseEntity login(@RequestBody @Valid LoginRequest loginRequest) { - TokenInfo tokenInfo = memberService.login(loginRequest.getEmail(), loginRequest.getPassword()); + TokenInfo tokenInfo = userDetailsService.login(loginRequest.getEmail(), loginRequest.getPassword()); return ResponseEntity.ok() .header(SET_COOKIE, generateCookie("accessToken", tokenInfo.getAccessToken()).toString()) .header(SET_COOKIE, generateCookie("refreshToken", tokenInfo.getRefreshToken()).toString()) diff --git a/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java b/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java index ec2c089..2aa12d4 100644 --- a/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java +++ b/src/main/java/com/gdscys/cokepoke/auth/service/CustomUserDetailsService.java @@ -1,20 +1,35 @@ package com.gdscys.cokepoke.auth.service; +import com.gdscys.cokepoke.auth.domain.TokenInfo; +import com.gdscys.cokepoke.auth.jwt.JwtTokenProvider; +import com.gdscys.cokepoke.member.domain.Member; +import com.gdscys.cokepoke.member.domain.RefreshToken; import com.gdscys.cokepoke.member.repository.MemberRepository; +import com.gdscys.cokepoke.member.repository.RefreshTokenRepository; import lombok.RequiredArgsConstructor; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; +import java.util.Optional; @Service @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final MemberRepository memberRepository; + private final PasswordEncoder passwordEncoder; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + private final RefreshTokenRepository refreshTokenRepository; @Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { @@ -27,4 +42,31 @@ public UserDetails loadUserByUsername(String email) throws UsernameNotFoundExcep .orElseThrow(() -> new UsernameNotFoundException("User not found with email: " + email)); } + @Transactional + public TokenInfo login(String email, String password) { + + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, password); + + Authentication authentication = authenticationManagerBuilder + .getObject().authenticate(authenticationToken); + Optional member = memberRepository.findByEmail(email); + + if (member.isEmpty()) { + throw new UsernameNotFoundException("User not found with email: " + email); + } + + //토큰 생성 + TokenInfo tokenInfo = jwtTokenProvider.generateToken(authentication, email); + + // refresh token 없으면 생성, 있으면 업데이트 + refreshTokenRepository.findByMember_Email(member.get().getEmail()) + .ifPresentOrElse(refreshToken -> { + refreshToken.setRefreshToken(tokenInfo.getRefreshToken()); + refreshTokenRepository.save(refreshToken); + }, () -> refreshTokenRepository.save(new RefreshToken(tokenInfo.getRefreshToken(), member.get()))); + return tokenInfo; + } + + } diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java index 500fa68..5ce6265 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -30,9 +30,6 @@ public class MemberService implements IMemberService { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; - private final RefreshTokenRepository refreshTokenRepository; private final static int PAGE_SIZE = 15; @@ -48,32 +45,6 @@ public Member findMemberByUsername(String username) { .orElseThrow(() -> new UsernameNotFoundException("User not found with username: " + username)); } - @Transactional - public TokenInfo login(String email, String password) { - - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, password); - - Authentication authentication = authenticationManagerBuilder - .getObject().authenticate(authenticationToken); - Optional member = memberRepository.findByEmail(email); - - if (member.isEmpty()) { - throw new UsernameNotFoundException("User not found with email: " + email); - } - - //토큰 생성 - TokenInfo tokenInfo = jwtTokenProvider.generateToken(authentication, email); - - // refresh token 없으면 생성, 있으면 업데이트 - refreshTokenRepository.findByMember_Email(member.get().getEmail()) - .ifPresentOrElse(refreshToken -> { - refreshToken.setRefreshToken(tokenInfo.getRefreshToken()); - refreshTokenRepository.save(refreshToken); - }, () -> refreshTokenRepository.save(new RefreshToken(tokenInfo.getRefreshToken(), member.get()))); - return tokenInfo; - } - @Override public void updateMember(Member member, UpdateMemberRequest request) { member.updatePassword(passwordEncoder.encode(request.getNewPassword())); From 971b37f69df5b6629239c1322f16fa1cdaeafa00 Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 21:12:27 +0900 Subject: [PATCH 59/60] fix: removed unused methods --- .../cokepoke/member/repository/MemberRepository.java | 2 -- .../com/gdscys/cokepoke/member/service/IMemberService.java | 1 - .../com/gdscys/cokepoke/member/service/MemberService.java | 7 ------- 3 files changed, 10 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java index 75ee26d..44f4a87 100644 --- a/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java +++ b/src/main/java/com/gdscys/cokepoke/member/repository/MemberRepository.java @@ -14,6 +14,4 @@ public interface MemberRepository extends JpaRepository { Optional findByEmail(String email); Optional findByUsername(String username); - Boolean existsByEmail(String email); - Page findAll(Pageable pageable); } diff --git a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java index 68e95fd..a5a7070 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/IMemberService.java @@ -10,5 +10,4 @@ public interface IMemberService { Member findMemberByUsername(String username); void updateMember(Member member, UpdateMemberRequest request); void deleteMember(Member member); - List findAll(int page); } diff --git a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java index 5ce6265..f2687ac 100644 --- a/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java +++ b/src/main/java/com/gdscys/cokepoke/member/service/MemberService.java @@ -55,11 +55,4 @@ public void deleteMember(Member member) { memberRepository.delete(member); } - @Override - public List findAll(int page) { - PageRequest pr = PageRequest.of(page, PAGE_SIZE); - return memberRepository.findAll(pr).stream() - .sorted(Comparator.comparing(Member::getUsername)) - .collect(Collectors.toList()); - } } From 7bfbd562dfc6141eadb283bf734d12d4ad58f45f Mon Sep 17 00:00:00 2001 From: becooq81 Date: Wed, 11 Oct 2023 21:25:12 +0900 Subject: [PATCH 60/60] fix: remove unused methods --- .../cokepoke/member/controller/MemberController.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java index 5e7790a..6071bfc 100644 --- a/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java +++ b/src/main/java/com/gdscys/cokepoke/member/controller/MemberController.java @@ -27,14 +27,4 @@ public ResponseEntity viewMy(@AuthenticationPrincipal Member mem return ResponseEntity.ok(MemberResponse.of(member)); } - @GetMapping("/all") - public ResponseEntity> viewAll(@AuthenticationPrincipal Member member, - @RequestParam @Min(0) int page) { - List responses = memberService.findAll(page) - .stream() - .map(MemberResponse::of) - .collect(Collectors.toList()); - return ResponseEntity.ok(responses); - } - }