TariffV2QueryMapper.java
package com.github.jenkaby.bikerental.tariff.web.query.mapper;
import com.github.jenkaby.bikerental.shared.mapper.MoneyMapper;
import com.github.jenkaby.bikerental.tariff.domain.model.*;
import com.github.jenkaby.bikerental.tariff.domain.model.vo.PricingTypeInfo;
import com.github.jenkaby.bikerental.tariff.web.query.dto.PricingParams;
import com.github.jenkaby.bikerental.tariff.web.query.dto.PricingTypeResponse;
import com.github.jenkaby.bikerental.tariff.web.query.dto.TariffV2Response;
import org.mapstruct.Mapper;
import java.math.BigDecimal;
@Mapper(uses = {MoneyMapper.class})
public interface TariffV2QueryMapper {
default TariffV2Response toResponse(TariffV2 tariff) {
return new TariffV2Response(
tariff.getId(),
tariff.getName(),
tariff.getDescription(),
tariff.getEquipmentType(),
tariff.getPricingType(),
toParamsDto(tariff),
tariff.getValidFrom(),
tariff.getValidTo(),
tariff.getVersion(),
tariff.getStatus()
);
}
private static PricingParams toParamsDto(TariffV2 tariff) {
return switch (tariff) {
case DegressiveHourlyTariffV2 t -> new PricingParams(
t.getFirstHourPrice().amount(),
t.getHourlyDiscount().amount(),
t.getMinimumHourlyPrice().amount(),
null, null, null, null,
t.getMinimumDuration().toMinutesPart(),
t.getMinimumDurationSurcharge().amount(),
null
);
case FlatHourlyTariffV2 t -> new PricingParams(
null, null, null,
t.getHourlyPrice().amount(),
null, null, null,
t.getMinimumDuration().toMinutesPart(),
t.getMinimumDurationSurcharge().amount(),
null
);
case DailyTariffV2 t -> new PricingParams(
null, null, null, null,
t.getDailyPrice().amount(),
t.getOvertimeHourlyPrice().amount(),
null, null, null, null
);
case FlatFeeTariffV2 t -> new PricingParams(
null, null, null, null, null, null,
t.getIssuanceFee().amount(),
null, null, null
);
case SpecialTariffV2 t -> new PricingParams(
null, null, null, null, null, null, null, null, null,
BigDecimal.ZERO
);
};
}
PricingTypeResponse toResponse(PricingTypeInfo info);
}