Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

Commit

Permalink
[#25] 사용자 차단 목록 불러오기 기능 구현
Browse files Browse the repository at this point in the history
Model 관련

* BlockUserListRequest 클래스 추가

- 현재 사용자 아이디, 차단 목록 페이지 위치, 그리고 한 페이지에
  출력할 아이디 개수의 제한 숫자를 멤버 변수로 갖는 인스턴스를 생성할
  클래스 추가

Controller 계층 관련

* BlockUserController

- 현재 로그인 중인 사용자의 차단 사용자 목록을 불러오는 요청을 받을
  `getBlockUserList` 메소드 추가

Service 계층 관련

* BlockUserService

- 현재 사용자의 차단 목록을 불러오는 비즈니스 로직을 처리할
  `getBlockUserList` 메소드 추가

- `@Transactional(readOnly=true)를 붙여서 Slave DB에서 내용을 읽어오도록
  설정

Mapper 계층 관련

* BlockUserMapper

- DB에서 차단 사용자 목록을 불러 올 `getBlockUserList` 메소드 추가

* BlockUserMapper.xml

- 위의 내용을 처리할 쿼리문 추가

Util 관련

* Pagination

- 차단 목록에 대한 max per page 멤버변수 추가

테스트 관련

- 포스트맨을 사용해 위의 로직 테스트
  • Loading branch information
msugo1 committed Mar 14, 2021
1 parent 6234157 commit d84e4dc
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import me.soo.helloworld.service.BlockUserService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/block-users")
Expand All @@ -24,4 +26,11 @@ public void blockUser(@CurrentUser String userId, @PathVariable String targetId)
public void unBlockUser(@CurrentUser String userId, @PathVariable String targetId) {
blockUserService.unblockUser(userId, targetId);
}

@LoginRequired
@GetMapping
public List<String> getBlockUserList(@CurrentUser String userId,
@RequestParam(defaultValue = "1") Integer pageNumber) {
return blockUserService.getBlockUserList(userId, pageNumber);
}
}
5 changes: 5 additions & 0 deletions src/main/java/me/soo/helloworld/mapper/BlockUserMapper.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package me.soo.helloworld.mapper;

import me.soo.helloworld.model.blockuser.BlockUserListRequest;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface BlockUserMapper {

Expand All @@ -10,4 +13,6 @@ public interface BlockUserMapper {
public boolean isUserBlocked(String userId, String targetId);

public void deleteBlockUser(String userId, String targetId);

public List<String> getBlockUserList(BlockUserListRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package me.soo.helloworld.model.blockuser;

import lombok.AllArgsConstructor;
import lombok.Builder;
import me.soo.helloworld.util.Pagination;

@Builder
@AllArgsConstructor
public class BlockUserListRequest {

private final String userId;

private final int offset;

private final int limit;

static public BlockUserListRequest create(String userId, int pageNumber, Pagination pagination) {

return BlockUserListRequest.builder()
.userId(userId)
.offset(pagination.getMaxPageBlockUser() * (Math.max(pageNumber, 1) - 1))
.limit(pagination.getMaxPageBlockUser())
.build();
}
}
13 changes: 13 additions & 0 deletions src/main/java/me/soo/helloworld/service/BlockUserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@
import me.soo.helloworld.exception.InvalidRequestException;
import me.soo.helloworld.mapper.BlockUserMapper;
import me.soo.helloworld.mapper.FriendMapper;
import me.soo.helloworld.model.blockuser.BlockUserListRequest;
import me.soo.helloworld.util.Pagination;
import me.soo.helloworld.util.TargetValidator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@RequiredArgsConstructor
Expand All @@ -18,6 +23,8 @@ public class BlockUserService {

private final BlockUserMapper blockUserMapper;

private final Pagination pagination;

public void blockUser(String userId, String targetId) {
TargetValidator.targetNotSelf(userId, targetId);
TargetValidator.targetExistence(userService.isUserIdExist(targetId));
Expand Down Expand Up @@ -51,4 +58,10 @@ public void unblockUser(String userId, String targetId) {

blockUserMapper.deleteBlockUser(userId, targetId);
}

@Transactional(readOnly = true)
public List<String> getBlockUserList(String userId, int pageNumber) {
BlockUserListRequest request = BlockUserListRequest.create(userId, pageNumber, pagination);
return blockUserMapper.getBlockUserList(request);
}
}
6 changes: 5 additions & 1 deletion src/main/java/me/soo/helloworld/util/Pagination.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ public class Pagination {

private final int maxPageFriend;

public Pagination(@Value("${friend.max.page:30}") int maxPageFriend) {
private final int maxPageBlockUser;

public Pagination(@Value("${friend.max.page:30}") int maxPageFriend,
@Value("${block_user.max.page:30}") int maxPageBlockUser) {
this.maxPageFriend = maxPageFriend;
this.maxPageBlockUser = maxPageBlockUser;
}
}
12 changes: 8 additions & 4 deletions src/main/resources/mappers/BlockUserMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,21 @@
<mapper namespace="me.soo.helloworld.mapper.BlockUserMapper">

<insert id="insertBlockUser" parameterType="String">

INSERT INTO block (userId, blockId)
VALUES (#{userId}, #{targetId})
INSERT INTO block (userId, blockId) VALUES (#{userId}, #{targetId})
</insert>

<select id="isUserBlocked" parameterType="String" resultType="boolean">
SELECT EXISTS (SELECT blockId FROM block WHERE userId = #{userId} AND blockId = #{targetId})
</select>

<delete id="deleteBlockUser" parameterType="String">

DELETE FROM block WHERE userId = #{userId} AND blockId = #{targetId}
</delete>

<select id="getBlockUserList" parameterType="me.soo.helloworld.model.blockuser.BlockUserListRequest" resultType="String">

SELECT blockId FROM block WHERE userId = #{userId}
ORDER BY id DESC
LIMIT #{offset}, #{limit}
</select>
</mapper>

0 comments on commit d84e4dc

Please sign in to comment.