Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -285,11 +285,9 @@ ORDER BY COUNT(rl.user.id) DESC, r.createdAt DESC
* @return ReviewLikeCountResponse 응답
*/
@Query("""
SELECT COUNT(DISTINCT r.id) AS reviewCount,
COUNT(rl.id) AS likeCount
FROM Review r
LEFT JOIN ReviewLike rl ON rl.review.id = r.id
WHERE r.user.id = :userId
SELECT
(SELECT COUNT(r) FROM Review r WHERE r.user.id = :userId) AS reviewCount,
(SELECT COUNT(rl) FROM ReviewLike rl WHERE rl.user.id = :userId) AS likeCount
""")
Optional<ReviewLikeCount> findReviewAndLikeCountByUserId(@Param("userId") Long userId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public Optional<User> getUserBySocialAndSocialId(UserSocial social, String socia
* @param request 회원가입을 위한 추가 정보
*/
@Override
public void createUser(TempUserInfo tempUserInfo, UserSignUpRequest request) throws IOException {
public User createUser(TempUserInfo tempUserInfo, UserSignUpRequest request) throws IOException {

String thumbnailImage = "thumbnail";

Expand All @@ -123,6 +123,8 @@ public void createUser(TempUserInfo tempUserInfo, UserSignUpRequest request) thr
userAuditoriumRepository.save(userAuditorium);
}
}

return user;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface UserUseCase {
Optional<User> getUserBySocialAndSocialId(UserSocial social, String socialId);

// 사용자 생성
void createUser(TempUserInfo tempUserInfo, UserSignUpRequest request) throws IOException;
User createUser(TempUserInfo tempUserInfo, UserSignUpRequest request) throws IOException;

// redis, cookie - refreshToken 삭제 (로그아웃)
void logout(HttpServletRequest request, HttpServletResponse response);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.seeat.server.domain.user.domain.repository;

import com.seeat.server.domain.theater.domain.entity.Auditorium;
import com.seeat.server.domain.user.domain.entity.User;
import com.seeat.server.domain.user.domain.entity.UserAuditorium;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -19,4 +20,6 @@ public interface UserAuditoriumRepository extends JpaRepository<UserAuditorium,
List<Auditorium> findAuditoriumsByUserId(@Param("userId") Long userId);

void deleteByUserId(Long userId);

boolean existsByUserAndAuditorium(User user, Auditorium auditorium);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.seeat.server.domain.user.application.dto.response.UserNicknameResponse;
import com.seeat.server.domain.user.application.usecase.UserUseCase;
import com.seeat.server.domain.user.application.dto.request.UserSignUpRequest;
import com.seeat.server.domain.user.domain.entity.User;
import com.seeat.server.domain.user.domain.entity.UserRole;
import com.seeat.server.domain.user.presentation.swagger.UserControllerSpec;
import com.seeat.server.global.response.ApiResponse;
Expand Down Expand Up @@ -39,6 +40,7 @@ public class UserController implements UserControllerSpec {
*/
@PostMapping()
public ApiResponse<Void> userSignUp(
HttpServletResponse response,
@RequestBody @Valid UserSignUpRequest request,
@RequestHeader("Temp-User-Key") String tempUserKey) throws IOException {

Expand All @@ -48,7 +50,12 @@ public ApiResponse<Void> userSignUp(

throw new CustomException(ErrorCode.NOT_TEMP_USER, null);
}
userService.createUser(tempUserInfo, request);
User user = userService.createUser(tempUserInfo, request);

// 토큰 발급
tokenService.generateTokensAndSetHeaders(response, user);

// 임시유저 정보 삭제
redisService.deleteValues(tempUserKey);

return ApiResponse.created();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.seeat.server.domain.user.application.dto.response.UserNicknameResponse;
import com.seeat.server.global.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
Expand All @@ -18,6 +19,7 @@ public interface UserControllerSpec {
/**
* 회원가입 API
*
* @param response 토큰을 헤더 및 쿠키에 설정하기 위한 HTTP 응답 객체
* @param request 추가 정보 요청값
* @param tempUserKey 임시유저정보
* @return 회원가입 완료 응답
Expand All @@ -28,6 +30,7 @@ public interface UserControllerSpec {
description = "최초 로그인 추가 회원가입입니다."
)
ApiResponse<Void> userSignUp(
@Parameter(hidden = true) HttpServletResponse response,
@RequestBody @Valid UserSignUpRequest request,
@RequestHeader String tempUserKey
) throws IOException;
Expand Down
17 changes: 12 additions & 5 deletions src/main/java/com/seeat/server/security/jwt/JwtProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,23 +113,30 @@ public String generateToken(User user, long tokenValidTime) {
public String generateDevTokenWithMockUser(Long userId, String username, UserRole role) {

/// 개발용 유저 실제 DB에 저장
// 개발용 유저 SocialId 구성
String cleanedId = ("dev-" + userId).trim();
User user = userRepository.findBySocialAndSocialId(KAKAO, cleanedId)
.orElseGet(() -> userRepository.save(createMockUser(userId, username, role)));

// 상영관 저장
Auditorium auditorium = auditoriumRepository.findById("1001")
// 상영관 ID로 조회
Auditorium auditorium = auditoriumRepository.findById("13018")
.orElseThrow(() -> new NoSuchElementException(ErrorCode.NOT_AUDITORIUM.getMessage()));
UserAuditorium userAuditorium = UserAuditorium.of(user, auditorium);
userAuditoriumRepository.save(userAuditorium);

// 유저-상영관 매핑이 존재하지 않을 때만 저장
boolean alreadyMapped = userAuditoriumRepository.existsByUserAndAuditorium(user, auditorium);
if (!alreadyMapped) {
UserAuditorium userAuditorium = UserAuditorium.of(user, auditorium);
userAuditoriumRepository.save(userAuditorium);
}

// 권한 설정
Collection<GrantedAuthority> authorities = Collections.singletonList(
new SimpleGrantedAuthority(role.getRole())
);

// 인증 객체 설정
Authentication mockAuthentication = new UsernamePasswordAuthenticationToken(
user, null, authorities);

SecurityContextHolder.getContext().setAuthentication(mockAuthentication);

return generateToken(mockAuthentication, devTokenExpiration);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public class UserProfileServiceTest {
private User user2;
private User user3;
private User user4;
private User user5;
private HashTag hashTag1;
private HashTag hashTag2;
private HashTag hashTag3;
Expand All @@ -111,6 +112,7 @@ void setUp() throws IOException {
user2 = repository.save(UserFixtures.createUser("[email protected]"));
user3 = repository.save(UserFixtures.createUser("[email protected]"));
user4 = repository.save(UserFixtures.createUser("[email protected]"));
user5 = repository.save(UserFixtures.createUser("[email protected]"));
hashTag1 = hashTagRepository.save(HashTagFixtures.createHashTag(HashTagType.SOUND, "해시태그 1"));
hashTag2 = hashTagRepository.save(HashTagFixtures.createHashTag(HashTagType.COMPANION, "해시태그 2"));
hashTag3 = hashTagRepository.save(HashTagFixtures.createHashTag(HashTagType.ENVIRONMENT, "해시태그 3"));
Expand All @@ -126,16 +128,20 @@ void getUserInfo_Success() throws IOException {
// given
userAuditoriumRepository.save(UserAuditorium.of(user1, auditorium));

Review review1 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 5, "test-1"), user1.getId());
Review review2 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 5, "test-1"), user1.getId());
Review review1 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 1, "test-1"), user1.getId());
Review review2 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 2, "test-2"), user2.getId());
Review review3 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 3, "test-3"), user3.getId());
Review review4 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 4, "test-4"), user4.getId());
Review review5 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 5, "test-5"), user5.getId());
Review review6 = reviewService.createReview(getReviewRequest(List.of(seat1, seat2), 5, "test-1"), user1.getId());

/// 좋아요
reviewLikeRepository.saveAll(List.of(
ReviewLikeFixtures.stub(user2, review1),
ReviewLikeFixtures.stub(user3, review1),
ReviewLikeFixtures.stub(user2, review1),
ReviewLikeFixtures.stub(user3, review2),
ReviewLikeFixtures.stub(user4, review2)
ReviewLikeFixtures.stub(user1, review1),
ReviewLikeFixtures.stub(user1, review2),
ReviewLikeFixtures.stub(user1, review3),
ReviewLikeFixtures.stub(user1, review4),
ReviewLikeFixtures.stub(user1, review5)
));


Expand Down
Loading