ItemResponse.java

package com.oliwier.listmebackend.api.dto;

import com.oliwier.listmebackend.domain.model.Item;

import java.math.BigDecimal;
import java.time.Instant;
import java.util.List;
import java.util.UUID;

public record ItemResponse(
        UUID id,
        UUID listId,
        String name,
        boolean checked,
        int position,
        UUID categoryId,
        String categoryName,
        String categoryColor,
        BigDecimal quantity,
        String quantityUnit,
        BigDecimal price,
        String imageUrl,
        List<LabelResponse> labels,
        Instant createdAt,
        Instant updatedAt,
        Instant deletedAt,
        UUID createdByDeviceId
) {
    public static ItemResponse from(Item item) {
        return new ItemResponse(
                item.getId(),
                item.getList().getId(),
                item.getName(),
                item.isChecked(),
                item.getPosition(),
                item.getCategory() != null ? item.getCategory().getId() : null,
                item.getCategory() != null ? item.getCategory().getName() : null,
                item.getCategory() != null ? item.getCategory().getColor() : null,
                item.getQuantity(),
                item.getQuantityUnit(),
                item.getPrice(),
                item.getImageUrl(),
                item.getLabels().stream().map(LabelResponse::from).toList(),
                item.getCreatedAt(),
                item.getUpdatedAt(),
                item.getDeletedAt(),
                item.getCreatedByDevice() != null ? item.getCreatedByDevice().getId() : null
        );
    }
}