JobEnricher.java

package com.wilzwert.myjobs.core.domain.model.job.service;

import com.wilzwert.myjobs.core.domain.model.job.EnrichedJob;
import com.wilzwert.myjobs.core.domain.model.job.Job;
import com.wilzwert.myjobs.core.domain.model.job.JobStatus;
import com.wilzwert.myjobs.core.domain.shared.pagination.DomainPage;
import com.wilzwert.myjobs.core.domain.model.user.User;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;

public class JobEnricher {

    public DomainPage<EnrichedJob> enrich(DomainPage<Job> domainPage, User user) {
        return DomainPage.builder(domainPage, enrich(domainPage.getContent(), user)).build();
    }

    public List<EnrichedJob> enrich(List<Job> jobs, User user) {
        Instant threshold = Instant.now().minus(user.getJobFollowUpReminderDays(), ChronoUnit.DAYS);
        return jobs.stream()
                .map(job -> enrich(job, threshold))
                .toList();
    }

    public EnrichedJob enrich(Job job, User user) {
        Instant threshold = Instant.now().minus(user.getJobFollowUpReminderDays(), ChronoUnit.DAYS);
        return enrich(job, threshold);
    }

    private EnrichedJob enrich(Job job, Instant threshold) {
        boolean isFollowUpLate = JobStatus.activeStatuses().contains(job.getStatus())
                && job.getStatusUpdatedAt().isBefore(threshold);
        return new EnrichedJob(job, isFollowUpLate);
    }
}