Skip to content

Commit

Permalink
[feat] logic for get user hearted stores view
Browse files Browse the repository at this point in the history
  • Loading branch information
kgy1008 committed Jul 15, 2024
1 parent 5414ba6 commit 20aa729
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 6 deletions.
2 changes: 1 addition & 1 deletion server-yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.hankki.hankkiserver.domain.user.model.User;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Optional;

@Component
Expand All @@ -18,4 +19,8 @@ public class HeartFinder {
public boolean existsByUserAndStore(final User user, final Store store) {
return heartRepository.existsByUserAndStore(user, store);
}

public List<Heart> findHeartedStoresByUserId(final Long userId) {
return heartRepository.findHeartedStoresByUserId(userId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import lombok.RequiredArgsConstructor;
import org.hankki.hankkiserver.common.code.StoreErrorCode;
import org.hankki.hankkiserver.common.exception.NotFoundException;
import org.hankki.hankkiserver.domain.heart.repository.HeartRepository;
import org.hankki.hankkiserver.domain.store.model.Store;
import org.hankki.hankkiserver.domain.store.repository.StoreRepository;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@RequiredArgsConstructor
public class StoreFinder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.hankki.hankkiserver.api.user.service.UserQueryService;
import org.hankki.hankkiserver.api.user.service.command.UserUniversityPostCommand;
import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse;
import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse;
import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse;
import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse;
import org.hankki.hankkiserver.auth.UserId;
Expand All @@ -24,7 +25,7 @@ public class UserController {

@PostMapping("/users/me/university")
public HankkiResponse<Void> postUserUniversity(@UserId final Long userId,
@Valid @RequestBody final UserUniversityPostRequest request) {
@Valid @RequestBody final UserUniversityPostRequest request) {
userCommandService.saveUserUniversity(new UserUniversityPostCommand(userId, request));
return HankkiResponse.success(CommonSuccessCode.CREATED);
}
Expand All @@ -36,11 +37,16 @@ public HankkiResponse<UserUniversityFindResponse> findUserUniversity(@UserId fin

@GetMapping("/users/me")
public HankkiResponse<UserProfileAndNicknameResponse> getUserProfileAndNickname(@UserId final Long userId) {
return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.getUserProfileAndNickname(userId));
return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.getUserProfileAndNickname(userId));
}

@GetMapping("/users/me/favorites")
public HankkiResponse<UserFavoritesGetResponse> findUserFavorites(@UserId final Long userId) {
return HankkiResponse.success(CommonSuccessCode.OK,userQueryService.findUserFavorites(userId));
return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserFavorites(userId));
}

@GetMapping("/users/me/stores/hearts")
public HankkiResponse<UserHeartedStoreListResponse> getUserHeartedStores(@UserId final Long userId) {
return HankkiResponse.success(CommonSuccessCode.OK, userQueryService.findUserHeartedStoresView(userId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,27 @@
import lombok.RequiredArgsConstructor;
import org.hankki.hankkiserver.api.auth.service.UserInfoFinder;
import org.hankki.hankkiserver.api.favorite.service.FavoriteFinder;
import org.hankki.hankkiserver.api.store.service.HeartFinder;
import org.hankki.hankkiserver.api.user.service.response.UserFavoritesGetResponse;
import org.hankki.hankkiserver.api.user.service.response.UserProfileAndNicknameResponse;
import org.hankki.hankkiserver.api.user.service.response.UserHeartedStoreListResponse;
import org.hankki.hankkiserver.api.user.service.response.UserUniversityFindResponse;
import org.hankki.hankkiserver.common.code.UserUniversityErrorCode;
import org.hankki.hankkiserver.common.exception.NotFoundException;
import org.hankki.hankkiserver.domain.heart.model.Heart;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@RequiredArgsConstructor
public class UserQueryService {

private final UserUniversityFinder userUniversityFinder;
private final FavoriteFinder favoriteFinder;
private final UserInfoFinder userInfoFinder;
private final HeartFinder heartFinder;

@Transactional(readOnly = true)
public UserUniversityFindResponse findUserUniversity(Long userId) {
Expand All @@ -27,11 +33,17 @@ public UserUniversityFindResponse findUserUniversity(Long userId) {

@Transactional(readOnly = true)
public UserFavoritesGetResponse findUserFavorites(final Long userId) {
return UserFavoritesGetResponse.of(favoriteFinder.findAllByUserId(userId));
return UserFavoritesGetResponse.of(favoriteFinder.findAllByUserId(userId));
}

@Transactional(readOnly = true)
public UserProfileAndNicknameResponse getUserProfileAndNickname(final Long userId) {
return UserProfileAndNicknameResponse.of(userInfoFinder.getUserInfo(userId));
return UserProfileAndNicknameResponse.of(userInfoFinder.getUserInfo(userId));
}

@Transactional(readOnly = true)
public UserHeartedStoreListResponse findUserHeartedStoresView(final Long userId) {
List<Heart> hearts = heartFinder.findHeartedStoresByUserId(userId);
return UserHeartedStoreListResponse.of(hearts);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,20 @@
import org.hankki.hankkiserver.domain.store.model.Store;
import org.hankki.hankkiserver.domain.user.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface HeartRepository extends JpaRepository<Heart, Long> {

boolean existsByUserAndStore(User user, Store store);
void deleteByUserAndStore(User user, Store store);

@Query("SELECT h FROM Heart h " +
"JOIN FETCH h.store s " +
"JOIN FETCH s.storeImages " +
"WHERE h.user.id = :userId AND s.isDeleted = false")
List<Heart> findHeartedStoresByUserId(Long userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface StoreRepository extends JpaRepository<Store, Long> {
Expand Down

0 comments on commit 20aa729

Please sign in to comment.