UserCryptoRequest.kt
package com.distasilucas.cryptobalancetracker.model.request.crypto
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_NAME_NOT_BLANK
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_NAME_SIZE
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_QUANTITY_DECIMAL_MAX
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_QUANTITY_DIGITS
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_QUANTITY_NOT_NULL
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_QUANTITY_POSITIVE
import com.distasilucas.cryptobalancetracker.constants.PLATFORM_ID_NOT_BLANK
import com.distasilucas.cryptobalancetracker.constants.PLATFORM_ID_UUID
import com.distasilucas.cryptobalancetracker.entity.UserCrypto
import com.distasilucas.cryptobalancetracker.validation.ValidCryptoName
import jakarta.validation.constraints.DecimalMax
import jakarta.validation.constraints.Digits
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Positive
import jakarta.validation.constraints.Size
import org.hibernate.validator.constraints.UUID
import java.math.BigDecimal
data class UserCryptoRequest(
@field: NotBlank(message = CRYPTO_NAME_NOT_BLANK)
@field: Size(min = 1, max = 64, message = CRYPTO_NAME_SIZE)
@field: ValidCryptoName
val cryptoName: String?,
@field: NotNull(message = CRYPTO_QUANTITY_NOT_NULL)
@field: Digits(
integer = 16,
fraction = 12,
message = CRYPTO_QUANTITY_DIGITS
)
@field: DecimalMax(
value = "9999999999999999.999999999999",
message = CRYPTO_QUANTITY_DECIMAL_MAX
)
@field: Positive(message = CRYPTO_QUANTITY_POSITIVE)
val quantity: BigDecimal?,
@field: NotBlank(message = PLATFORM_ID_NOT_BLANK)
@field: UUID(message = PLATFORM_ID_UUID)
val platformId: String?
) {
fun toEntity(coingeckoCryptoId: String) = UserCrypto(
coingeckoCryptoId = coingeckoCryptoId,
quantity = quantity!!,
platformId = platformId!!
)
}