LeadResponse.java

package cz.vsb.crm.dto;

import cz.vsb.crm.model.Account;
import cz.vsb.crm.model.Lead;
import cz.vsb.crm.model.User;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

public record LeadResponse(
        Long id,
        Long accountId,
        String accountName,
        Long assignedToId,
        String assignedToName,
        String source,
        String status,
        BigDecimal value,
        LocalDate createdDate,
        List<LeadLineResponse> products) {

    public static LeadResponse from(Lead lead) {
        Account account = lead.getAccount();
        User assignedTo = lead.getAssignedTo();
        List<LeadLineResponse> products = lead.getLeadProducts().stream()
                .map(LeadLineResponse::from)
                .toList();
        return new LeadResponse(
                lead.getId(),
                account != null ? account.getId() : null,
                account != null ? account.getCompanyName() : null,
                assignedTo != null ? assignedTo.getId() : null,
                assignedTo != null ? assignedTo.getUsername() : null,
                lead.getSource(),
                lead.getStatus(),
                lead.getValue(),
                lead.getCreatedDate(),
                products);
    }
}