Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: 게시글 목록 조회 응답에 is_reported 필드 추가 #1238

Merged
merged 1 commit into from
Feb 13, 2025
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 @@ -63,7 +63,8 @@ ResponseEntity<ArticleResponse> getArticle(
ResponseEntity<ArticlesResponse> getArticles(
@RequestParam(required = false) Integer boardId,
@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer limit
@RequestParam(required = false) Integer limit,
@UserId Integer userId
);

@ApiResponses(
Expand All @@ -89,7 +90,8 @@ ResponseEntity<ArticlesResponse> searchArticles(
@RequestParam(required = false) Integer boardId,
@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer limit,
@IpAddress String ipAddress
@IpAddress String ipAddress,
@UserId Integer userId
);

@ApiResponses(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,10 @@ public ResponseEntity<ArticleResponse> getArticle(
public ResponseEntity<ArticlesResponse> getArticles(
@RequestParam(required = false) Integer boardId,
@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer limit
@RequestParam(required = false) Integer limit,
@UserId Integer userId
) {
ArticlesResponse foundArticles = articleService.getArticles(boardId, page, limit);
ArticlesResponse foundArticles = articleService.getArticles(boardId, page, limit, userId);
return ResponseEntity.ok().body(foundArticles);
}

Expand All @@ -69,9 +70,10 @@ public ResponseEntity<ArticlesResponse> searchArticles(
@RequestParam(required = false) Integer boardId,
@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer limit,
@IpAddress String ipAddress
@IpAddress String ipAddress,
@UserId Integer userId
) {
ArticlesResponse foundArticles = articleService.searchArticles(query, boardId, page, limit, ipAddress);
ArticlesResponse foundArticles = articleService.searchArticles(query, boardId, page, limit, ipAddress, userId);
return ResponseEntity.ok().body(foundArticles);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import org.springframework.data.domain.Page;

Expand All @@ -13,6 +14,7 @@
import com.fasterxml.jackson.databind.annotation.JsonNaming;

import in.koreatech.koin.domain.community.article.model.Article;
import in.koreatech.koin.domain.community.article.model.LostItemArticle;
import in.koreatech.koin.global.model.Criteria;
import io.swagger.v3.oas.annotations.media.Schema;

Expand All @@ -34,10 +36,10 @@ public record ArticlesResponse(
Integer currentPage
) {

public static ArticlesResponse of(Page<Article> pagedResult, Criteria criteria) {
public static ArticlesResponse of(Page<Article> pagedResult, Criteria criteria, Integer userId) {
return new ArticlesResponse(
pagedResult.stream()
.map(InnerArticleResponse::from)
.map(article -> InnerArticleResponse.of(article, userId))
.toList(),
pagedResult.getTotalElements(),
pagedResult.getContent().size(),
Expand Down Expand Up @@ -68,18 +70,23 @@ private record InnerArticleResponse(
@JsonFormat(pattern = "yyyy-MM-dd") LocalDate registeredAt,

@Schema(description = "수정 일자", example = "2023-01-04 12:00:01", requiredMode = REQUIRED)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatedAt
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatedAt,

@Schema(description = "처리되지 않은 자신의 신고 존재 여부", example = "true", requiredMode = REQUIRED)
Boolean isReported
) {

public static InnerArticleResponse from(Article article) {
public static InnerArticleResponse of(Article article, Integer userId) {
Optional<LostItemArticle> lostItemArticle = Optional.ofNullable(article.getLostItemArticle());
return new InnerArticleResponse(
article.getId(),
article.getBoard().getId(),
article.getTitle(),
article.getAuthor(),
article.getTotalHit(),
article.getRegisteredAt(),
article.getUpdatedAt()
article.getUpdatedAt(),
lostItemArticle.map(lostItem -> lostItem.isReportedByUserId(userId)).orElse(false)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import in.koreatech.koin.domain.community.article.model.LostItemArticle;
import in.koreatech.koin.global.model.Criteria;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

@JsonNaming(value = SnakeCaseStrategy.class)
public record LostItemArticlesResponse(
Expand Down Expand Up @@ -76,7 +75,7 @@ private record InnerLostItemArticleResponse(
@Schema(description = "등록일", example = "2025-01-10", requiredMode = REQUIRED)
LocalDate registeredAt,

@Schema(description = "처리되지 않은 신고 존재 여부", example = "true", requiredMode = REQUIRED)
@Schema(description = "처리되지 않은 자신의 신고 존재 여부", example = "true", requiredMode = REQUIRED)
Boolean isReported
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import in.koreatech.koin.domain.community.article.repository.ArticleSearchKeywordIpMapRepository;
import in.koreatech.koin.domain.community.article.repository.ArticleSearchKeywordRepository;
import in.koreatech.koin.domain.community.article.repository.BoardRepository;
import in.koreatech.koin.domain.community.article.repository.LostItemArticleRepository;
import in.koreatech.koin.domain.community.article.repository.redis.ArticleHitRepository;
import in.koreatech.koin.domain.community.article.repository.redis.ArticleHitUserRepository;
import in.koreatech.koin.domain.community.article.repository.redis.BusArticleRepository;
Expand Down Expand Up @@ -72,7 +71,6 @@ public class ArticleService {

private final ApplicationEventPublisher eventPublisher;
private final ArticleRepository articleRepository;
private final LostItemArticleRepository lostItemArticleRepository;
private final BoardRepository boardRepository;
private final ArticleSearchKeywordIpMapRepository articleSearchKeywordIpMapRepository;
private final ArticleSearchKeywordRepository articleSearchKeywordRepository;
Expand All @@ -95,20 +93,20 @@ public ArticleResponse getArticle(Integer boardId, Integer articleId, String pub
return ArticleResponse.of(article);
}

public ArticlesResponse getArticles(Integer boardId, Integer page, Integer limit) {
public ArticlesResponse getArticles(Integer boardId, Integer page, Integer limit, Integer userId) {
Long total = articleRepository.countBy();
Criteria criteria = Criteria.of(page, limit, total.intValue());
PageRequest pageRequest = PageRequest.of(criteria.getPage(), criteria.getLimit(), ARTICLES_SORT);
if (boardId == null) {
Page<Article> articles = articleRepository.findAll(pageRequest);
return ArticlesResponse.of(articles, criteria);
return ArticlesResponse.of(articles, criteria, userId);
}
if (boardId == NOTICE_BOARD_ID) {
Page<Article> articles = articleRepository.findAllByIsNoticeIsTrue(pageRequest);
return ArticlesResponse.of(articles, criteria);
return ArticlesResponse.of(articles, criteria, userId);
}
Page<Article> articles = articleRepository.findAllByBoardId(boardId, pageRequest);
return ArticlesResponse.of(articles, criteria);
return ArticlesResponse.of(articles, criteria, userId);
}

public List<HotArticleItemResponse> getHotArticles() {
Expand All @@ -128,7 +126,7 @@ public List<HotArticleItemResponse> getHotArticles() {

@Transactional
public ArticlesResponse searchArticles(String query, Integer boardId, Integer page, Integer limit,
String ipAddress) {
String ipAddress, Integer userId) {
if (query.length() >= MAXIMUM_SEARCH_LENGTH) {
throw new KoinIllegalArgumentException("검색어의 최대 길이를 초과했습니다.");
}
Expand All @@ -146,7 +144,7 @@ public ArticlesResponse searchArticles(String query, Integer boardId, Integer pa

saveOrUpdateSearchLog(query, ipAddress);

return ArticlesResponse.of(articles, criteria);
return ArticlesResponse.of(articles, criteria, userId);
}

public ArticleHotKeywordResponse getArticlesHotKeyword(Integer count) {
Expand Down Expand Up @@ -283,11 +281,15 @@ public void updateBusNoticeArticle() {
int secondWeight = 0;

// 제목(title)에 "사과"가 들어가면 후순위, "긴급"이 포함되면 우선순위
if (first.getTitle().contains("사과")) firstWeight++;
if (first.getTitle().contains("긴급")) firstWeight--;

if (second.getTitle().contains("사과")) secondWeight++;
if (second.getTitle().contains("긴급")) secondWeight--;
if (first.getTitle().contains("사과"))
firstWeight++;
if (first.getTitle().contains("긴급"))
firstWeight--;

if (second.getTitle().contains("사과"))
secondWeight++;
if (second.getTitle().contains("긴급"))
secondWeight--;

return Integer.compare(firstWeight, secondWeight);
})
Expand Down
Loading