ProductRequest.java

package cz.vsb.crm.dto;

import cz.vsb.crm.model.Product;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.math.BigDecimal;
import java.time.LocalDate;

public record ProductRequest(
        @NotBlank @Size(min = 2, max = 255) String name,
        @Size(max = 1000) String description,
        @NotNull @DecimalMin(value = "0.0", message = "price must not be negative") BigDecimal price,
        @Min(value = 0, message = "stock must not be negative") Integer stock,
        LocalDate deactivatedAt) {

    public Product toEntity() {
        Product product = new Product();
        applyTo(product);
        return product;
    }

    public void applyTo(Product product) {
        product.setName(name);
        product.setDescription(description);
        product.setPrice(price);
        product.setStock(stock);
        product.setDeactivatedAt(deactivatedAt);
    }
}