ForkliftMapper.java

package com.v1rex.liftnexus.forklift.mapper;

import com.v1rex.liftnexus.forklift.domain.Forklift;
import com.v1rex.liftnexus.forklift.domain.OperationalStatus;
import com.v1rex.liftnexus.forklift.dto.ForkliftRequest;
import com.v1rex.liftnexus.forklift.dto.ForkliftResponse;
import com.v1rex.liftnexus.transportorder.domain.TransportOrder;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class ForkliftMapper {

  public Forklift toEntity(ForkliftRequest request) {
    if (request == null) return null;
    return Forklift.builder()
        .fleetNumber(request.fleetNumber())
        .status(request.status() != null ? request.status() : OperationalStatus.OFFLINE)
        .currentBatteryPercentage(
            request.currentBatteryPercentage() != null ? request.currentBatteryPercentage() : 100.0)
        .build();
  }

  public ForkliftResponse toResponse(Forklift entity) {
    if (entity == null) return null;
    return new ForkliftResponse(
        entity.getId(),
        entity.getFleetNumber(),
        entity.getForkliftType() != null ? entity.getForkliftType().getId() : null,
        entity.getForkliftType() != null ? entity.getForkliftType().getModelName() : null,
        entity.getForkliftType() != null ? entity.getForkliftType().getEquipmentType() : null,
        entity.getForkliftType() != null ? entity.getForkliftType().getMaxCapacityKg() : null,
        entity.getCurrentStorageBin() != null ? entity.getCurrentStorageBin().getId() : null,
        entity.getStatus(),
        entity.getCurrentBatteryPercentage(),
        entity.getTransportOrders() != null
            ? entity.getTransportOrders().stream().map(TransportOrder::getId).toList()
            : List.of() // TODO: fix later as this can cause the N+1 Query Problem
        );
  }
}