Skip to content

Commit cedfa95

Browse files
authored
Merge pull request #169 from Modagbul/feat/block
feat/block : 차단하기 api
2 parents fc6de04 + 204d75d commit cedfa95

File tree

25 files changed

+661
-4
lines changed

25 files changed

+661
-4
lines changed

src/docs/asciidoc/Block-API.adoc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
3+
[[Block-API]]
4+
= Block API
5+
6+
[[Block-차단하기]]
7+
=== 차단하기
8+
operation::block-controller-test/차단_하기[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
9+
10+
---
11+
=== 차단 해제 하기
12+
operation::block-controller-test/차단_해제_하기[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
13+
14+
---
15+
16+
=== 차단한 유저 조회 List<Long>
17+
operation::block-controller-test/차단한_유저_목록[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
18+
19+
---
20+
21+
=== 차단한 유저 정보 조회
22+
operation::block-controller-test/차단한_유저_정보_목록[snippets='http-request,path-parameters,request-fields,http-response,response-fields']
23+
24+
---
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.moing.backend.domain.block.application.mapper;
2+
3+
import com.moing.backend.domain.block.domain.entity.Block;
4+
import com.moing.backend.global.annotation.Mapper;
5+
6+
@Mapper
7+
public class BlockMapper {
8+
9+
public static Block mapToBlock(Long memberId, Long targetId) {
10+
return Block.builder()
11+
.blockMemberId(memberId)
12+
.targetId(targetId)
13+
.build();
14+
}
15+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.moing.backend.domain.block.application.service;
2+
3+
import com.moing.backend.domain.block.application.mapper.BlockMapper;
4+
import com.moing.backend.domain.block.domain.service.BlockDeleteService;
5+
import com.moing.backend.domain.block.domain.service.BlockQueryService;
6+
import com.moing.backend.domain.block.domain.service.BlockSaveService;
7+
import com.moing.backend.domain.board.domain.service.BoardGetService;
8+
import com.moing.backend.domain.member.domain.service.MemberGetService;
9+
import com.moing.backend.domain.missionArchive.domain.service.MissionArchiveQueryService;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.List;
14+
15+
@Service
16+
@RequiredArgsConstructor
17+
public class BlockCreateUseCase {
18+
19+
private final MemberGetService memberGetService;
20+
private final BoardGetService boardGetService;
21+
private final MissionArchiveQueryService missionArchiveQueryService;
22+
23+
private final BlockSaveService blockSaveService;
24+
25+
26+
/**
27+
* 차단 하기
28+
*/
29+
30+
public Long createBlock(String socialId, Long targetId) {
31+
Long memberId = memberGetService.getMemberBySocialId(socialId).getMemberId();
32+
33+
blockSaveService.save(BlockMapper.mapToBlock(memberId, targetId));
34+
35+
return targetId;
36+
}
37+
38+
39+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.moing.backend.domain.block.application.service;
2+
3+
import com.moing.backend.domain.block.application.mapper.BlockMapper;
4+
import com.moing.backend.domain.block.domain.service.BlockDeleteService;
5+
import com.moing.backend.domain.block.domain.service.BlockQueryService;
6+
import com.moing.backend.domain.block.domain.service.BlockSaveService;
7+
import com.moing.backend.domain.board.domain.service.BoardGetService;
8+
import com.moing.backend.domain.member.domain.service.MemberGetService;
9+
import com.moing.backend.domain.missionArchive.domain.service.MissionArchiveQueryService;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.List;
14+
15+
@Service
16+
@RequiredArgsConstructor
17+
public class BlockDeleteUseCase {
18+
19+
private final MemberGetService memberGetService;
20+
private final BoardGetService boardGetService;
21+
private final MissionArchiveQueryService missionArchiveQueryService;
22+
23+
private final BlockDeleteService blockDeleteService;
24+
25+
26+
/**
27+
* 차단 철회하기
28+
*/
29+
30+
public Long deleteBlock(String socialId, Long targetId) {
31+
Long memberId = memberGetService.getMemberBySocialId(socialId).getMemberId();
32+
blockDeleteService.delete(memberId, targetId);
33+
34+
return targetId;
35+
}
36+
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.moing.backend.domain.block.application.service;
2+
3+
import com.moing.backend.domain.block.application.mapper.BlockMapper;
4+
import com.moing.backend.domain.block.domain.service.BlockDeleteService;
5+
import com.moing.backend.domain.block.domain.service.BlockQueryService;
6+
import com.moing.backend.domain.block.domain.service.BlockSaveService;
7+
import com.moing.backend.domain.board.domain.service.BoardGetService;
8+
import com.moing.backend.domain.member.domain.service.MemberGetService;
9+
import com.moing.backend.domain.missionArchive.domain.service.MissionArchiveQueryService;
10+
import com.moing.backend.domain.report.application.dto.BlockMemberRes;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.stereotype.Service;
13+
14+
import java.util.List;
15+
16+
@Service
17+
@RequiredArgsConstructor
18+
public class BlockReadUseCase {
19+
20+
private final MemberGetService memberGetService;
21+
private final BoardGetService boardGetService;
22+
private final MissionArchiveQueryService missionArchiveQueryService;
23+
24+
private final BlockQueryService blockQueryService;
25+
26+
/**
27+
* 차단한 리스트 조회하기
28+
*/
29+
public List<Long> getMyBlockList(String socialId) {
30+
Long memberId = memberGetService.getMemberBySocialId(socialId).getMemberId();
31+
32+
return blockQueryService.getBlockLists(memberId);
33+
}
34+
public List<BlockMemberRes> getMyBlockInfoList(String socialId) {
35+
Long memberId = memberGetService.getMemberBySocialId(socialId).getMemberId();
36+
37+
return blockQueryService.getBlockInfoLists(memberId);
38+
}
39+
40+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.moing.backend.domain.block.domain.entity;
2+
3+
import com.moing.backend.global.entity.BaseTimeEntity;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
import javax.persistence.*;
10+
11+
@Entity
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Getter
15+
@Builder
16+
public class Block extends BaseTimeEntity {
17+
18+
19+
@Id
20+
@GeneratedValue(strategy = GenerationType.IDENTITY)
21+
@Column(name = "block_id")
22+
private Long id;
23+
24+
private Long blockMemberId;
25+
private Long targetId;
26+
27+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.moing.backend.domain.block.domain.repository;
2+
3+
import com.moing.backend.domain.block.domain.entity.Block;
4+
import com.moing.backend.domain.report.application.dto.BlockMemberRes;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Repository;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
12+
public interface BlockCustomRepository{
13+
14+
Optional<List<Long>> getMyBlockList(Long memberId);
15+
Optional<List<BlockMemberRes>> getMyBlockInfoList(Long memberId);
16+
Optional<Block> getBlockById(Long memberId, Long targetId);
17+
18+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.moing.backend.domain.block.domain.repository;
2+
3+
import com.moing.backend.domain.block.domain.entity.Block;
4+
import com.moing.backend.domain.block.domain.entity.QBlock;
5+
import com.moing.backend.domain.member.domain.entity.QMember;
6+
import com.moing.backend.domain.report.application.dto.BlockMemberRes;
7+
import com.querydsl.core.types.Projections;
8+
import com.querydsl.jpa.impl.JPAQueryFactory;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.stereotype.Repository;
11+
12+
import javax.persistence.EntityManager;
13+
import java.util.List;
14+
import java.util.Optional;
15+
16+
import static com.moing.backend.domain.block.domain.entity.QBlock.block;
17+
import static com.moing.backend.domain.member.domain.entity.QMember.member;
18+
19+
public class BlockCustomRepositoryImpl implements BlockCustomRepository {
20+
21+
private final JPAQueryFactory queryFactory;
22+
23+
public BlockCustomRepositoryImpl(EntityManager em) {
24+
this.queryFactory = new JPAQueryFactory(em);
25+
}
26+
27+
28+
@Override
29+
public Optional<List<Long>> getMyBlockList(Long memberId) {
30+
return Optional.ofNullable(queryFactory
31+
.select(block.targetId)
32+
.from(block)
33+
.where(block.blockMemberId.eq(memberId))
34+
.fetch());
35+
}
36+
@Override
37+
public Optional<List<BlockMemberRes>> getMyBlockInfoList(Long memberId) {
38+
return Optional.ofNullable(queryFactory
39+
.select(Projections.constructor(BlockMemberRes.class,
40+
block.targetId,
41+
member.nickName,
42+
member.introduction,
43+
member.profileImage
44+
))
45+
.from(block)
46+
.join(member)
47+
.on(member.memberId.eq(block.targetId))
48+
.where(block.blockMemberId.eq(memberId))
49+
.fetch());
50+
}
51+
52+
@Override
53+
public Optional<Block> getBlockById(Long memberId, Long targetId) {
54+
return Optional.ofNullable(queryFactory
55+
.selectFrom(block)
56+
.where(
57+
block.blockMemberId.eq(memberId),
58+
block.targetId.eq(targetId)).fetchFirst());
59+
60+
}
61+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.moing.backend.domain.block.domain.repository;
2+
3+
import com.moing.backend.domain.block.domain.entity.Block;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface BlockRepository extends JpaRepository<Block, Long>,BlockCustomRepository {
7+
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.moing.backend.domain.block.domain.service;
2+
3+
import com.moing.backend.domain.block.domain.entity.Block;
4+
import com.moing.backend.domain.block.domain.repository.BlockRepository;
5+
import com.moing.backend.domain.block.exception.NotFoundBlockException;
6+
import com.moing.backend.global.annotation.DomainService;
7+
import lombok.RequiredArgsConstructor;
8+
9+
@DomainService
10+
@RequiredArgsConstructor
11+
public class BlockDeleteService {
12+
private final BlockRepository blockRepository;
13+
14+
public void delete(Long memberId, Long targetId) {
15+
Block block = blockRepository.getBlockById(memberId, targetId).orElseThrow(NotFoundBlockException::new);
16+
blockRepository.delete(block);
17+
}
18+
}

0 commit comments

Comments
 (0)