ListResponse.java

package com.oliwier.listmebackend.api.dto;

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

import java.time.Instant;
import java.util.UUID;

public record ListResponse(
        UUID id,
        String name,
        String emoji,
        String shareToken,
        int itemCount,
        int checkedCount,
        int participantCount,
        Instant createdAt,
        Instant updatedAt
) {
    public static ListResponse from(ShoppingList list) {
        return new ListResponse(
                list.getId(),
                list.getName(),
                list.getEmoji(),
                list.getShareToken(),
                list.getItems().size(),
                (int) list.getItems().stream().filter(i -> i.isChecked()).count(),
                list.getListDevices().size(),
                list.getCreatedAt(),
                list.getUpdatedAt()
        );
    }

    public static ListResponse fromWithCount(ShoppingList list, int itemCount) {
        return new ListResponse(
                list.getId(),
                list.getName(),
                list.getEmoji(),
                list.getShareToken(),
                itemCount,
                0,
                list.getListDevices().size(),
                list.getCreatedAt(),
                list.getUpdatedAt()
        );
    }
}