CalculationBreakdownMapper.java
package com.github.jenkaby.bikerental.tariff.web.query.mapper;
import com.github.jenkaby.bikerental.shared.mapper.DurationMapper;
import com.github.jenkaby.bikerental.shared.mapper.MoneyMapper;
import com.github.jenkaby.bikerental.tariff.EquipmentCostBreakdown;
import com.github.jenkaby.bikerental.tariff.web.query.dto.CostCalculationResponse;
import org.mapstruct.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Mapper
public abstract class CalculationBreakdownMapper {
private MoneyMapper moneyMapper;
private DurationMapper durationMapper;
@Autowired
public void setMoneyMapper(MoneyMapper moneyMapper) {
this.moneyMapper = moneyMapper;
}
@Autowired
public void setDurationMapper(DurationMapper durationMapper) {
this.durationMapper = durationMapper;
}
public List<CostCalculationResponse.EquipmentCostBreakdownResponse> toBreakdownResponses(List<EquipmentCostBreakdown> source) {
if (source == null) {
return List.of();
}
return source.stream()
.map(this::toBreakdownResponse)
.toList();
}
public CostCalculationResponse.EquipmentCostBreakdownResponse toBreakdownResponse(EquipmentCostBreakdown source) {
return new CostCalculationResponse.EquipmentCostBreakdownResponse(
source.equipmentType(),
source.tariffId(),
source.tariffName(),
source.pricingType(),
moneyMapper.toBigDecimal(source.itemCost()),
durationMapper.toMinutes(source.billedDuration()),
durationMapper.toMinutes(source.overtime()),
durationMapper.toMinutes(source.forgiven()),
source.calculationBreakdown()
);
}
}