package com.devjob.health;

import com.devjob.repository.JobRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.health.contributor.Health;
import org.springframework.boot.health.contributor.HealthIndicator;
import org.springframework.stereotype.Component;

/**
 * EP36: Actuator 커스텀 Health Indicator.
 * - /actuator/health 응답에 "jobService" 컴포넌트로 노출된다.
 * - 단순히 "서버가 떠 있다"가 아니라 "핵심 비즈니스 데이터(공고)에 접근 가능한가"를 확인한다.
 * - DB 조회 중 예외가 나면 DOWN으로 보고하되, 예외 자체로 헬스체크가 죽지 않도록 try-catch로 감싼다.
 */
@Component
@RequiredArgsConstructor
public class JobServiceHealthIndicator implements HealthIndicator {

    private final JobRepository jobRepository;

    @Override
    public Health health() {
        try {
            long count = jobRepository.count();
            return Health.up()
                    .withDetail("totalJobs", count)
                    .build();
        } catch (Exception e) {
            return Health.down()
                    .withException(e)
                    .build();
        }
    }
}
