QuoteDto.java

package cl.prgm.portaltrip.infrastructure.web.dto;

import java.math.BigDecimal;

import cl.prgm.portaltrip.domain.model.Quote;
import cl.prgm.portaltrip.domain.model.RiskLevel;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "Server-calculated price breakdown and destination risk")
public record QuoteDto(
		@Schema(description = "Base price in credits", example = "1200")
		BigDecimal basePrice,
		@Schema(description = "Location surcharge", example = "300")
		BigDecimal locationSurcharge,
		@Schema(description = "Additional passenger surcharge", example = "216")
		BigDecimal passengerSurcharge,
		@Schema(description = "Trip type surcharge", example = "360")
		BigDecimal tripSurcharge,
		@Schema(description = "Insurance cost", example = "380")
		BigDecimal insuranceCost,
		@Schema(description = "Final price in credits", example = "2456")
		BigDecimal total,
		@Schema(description = "Destination risk", example = "MEDIUM", allowableValues = {"LOW", "MEDIUM", "HIGH"})
		RiskLevel risk) {

	public static QuoteDto from(Quote quote) {
		return new QuoteDto(
				quote.basePrice(),
				quote.locationSurcharge(),
				quote.passengerSurcharge(),
				quote.tripSurcharge(),
				quote.insuranceCost(),
				quote.total(),
				quote.risk());
	}

}