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
@@ -1,7 +1,6 @@
package org.controlcenter.alarm.application;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

Expand All @@ -14,7 +13,6 @@
import org.controlcenter.alarm.domain.SendAlarm;
import org.controlcenter.alarm.infrastructure.jpa.AlarmJpaRepository;
import org.controlcenter.alarm.infrastructure.jpa.entity.AlarmEntity;
import org.controlcenter.alarm.presentation.dto.AlarmStatusStatsResponse;
import org.controlcenter.common.exception.BusinessException;
import org.controlcenter.common.response.code.ErrorCode;
import org.controlcenter.company.application.port.ManagerRepository;
Expand Down Expand Up @@ -154,9 +152,7 @@ public void sendAll(SendAlarm sendAlarm) {
}

@Transactional(readOnly = true)
public List<AlarmStatusStatsResponse> getAlarmStatusCounts() {
List<AlarmStatusStats> rawData = alarmJpaRepository.findStatusCounts();
return rawData.stream()
.map(AlarmStatusStatsResponse::from).toList();
public AlarmStatusStats getAlarmStatusCounts() {
return alarmJpaRepository.findStatusCounts();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
@Getter
@AllArgsConstructor
public class AlarmStatusStats {
private AlarmStatus status;
private long count;
private Long required;
private Long scheduled;
private Long inProgress;
private Long completed;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ public interface AlarmJpaRepository extends JpaRepository<AlarmEntity, Long> {
Page<AlarmInfo> findAlarmListByStatus(@Param("status") AlarmStatus status,
Pageable pageable);

@Query("SELECT new org.controlcenter.alarm.domain.AlarmStatusStats(a.status, COUNT(a)) " +
"FROM alarm a " +
"WHERE a.deletedAt IS NULL " +
" AND a.isChecked = FALSE " +
"GROUP BY a.status"
)
List<AlarmStatusStats> findStatusCounts();

@Query("""
SELECT new org.controlcenter.alarm.domain.AlarmStatusStats(
SUM(CASE WHEN a.status = 'REQUIRED' THEN 1 ELSE 0 END),
SUM(CASE WHEN a.status = 'SCHEDULED' THEN 1 ELSE 0 END),
SUM(CASE WHEN a.status = 'INPROGRESS' THEN 1 ELSE 0 END),
SUM(CASE WHEN a.status = 'COMPLETED' THEN 1 ELSE 0 END)
)
FROM alarm a
""")
AlarmStatusStats findStatusCounts();
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package org.controlcenter.alarm.presentation;

import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

import org.controlcenter.alarm.application.AlarmService;
import org.controlcenter.alarm.domain.AlarmStatus;
import org.controlcenter.alarm.presentation.dto.AlarmResponse;
Expand All @@ -17,7 +13,6 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -30,6 +25,7 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

Expand Down Expand Up @@ -85,9 +81,10 @@ public BaseResponse<PageResponse<AlarmResponse>> list(
}

@GetMapping("/status/stats")
public BaseResponse<List<AlarmStatusStatsResponse>> getAlarmStatusStats() {
public BaseResponse<AlarmStatusStatsResponse> getAlarmStatusStats() {
var alarmStatusStats = alarmService.getAlarmStatusCounts();
return BaseResponse.success(
alarmService.getAlarmStatusCounts()
AlarmStatusStatsResponse.from(alarmStatusStats)
);
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package org.controlcenter.alarm.presentation.dto;

import org.controlcenter.alarm.domain.AlarmStatus;
import org.controlcenter.alarm.domain.AlarmStatusStats;

import lombok.Builder;

@Builder
public record AlarmStatusStatsResponse(
AlarmStatus status,
long count
Long required,
Long scheduled,
Long inProgress,
Long completed
) {
public static AlarmStatusStatsResponse from(AlarmStatusStats alarmStatusStats) {
return AlarmStatusStatsResponse.builder()
.status(alarmStatusStats.getStatus())
.count(alarmStatusStats.getCount())
.required(alarmStatusStats.getRequired())
.scheduled(alarmStatusStats.getScheduled())
.inProgress(alarmStatusStats.getInProgress())
.completed(alarmStatusStats.getCompleted())
.build();
}
}