SleepDetailsToCsvRow.java

package com.seebie.server.mapper.entitytodto;

import com.seebie.server.dto.SleepDetails;

import java.util.List;
import java.util.function.Function;

import static com.seebie.server.mapper.entitytodto.LocalDateTimeConverter.format;

/**
 * Convert a SleepDetails object to a CSV row.
 * Use SleepDetails not just SleepData because the details is what carries the duration in minutes.
 */
public class SleepDetailsToCsvRow implements Function<SleepDetails, List<String>> {

    @Override
    public List<String> apply(SleepDetails details) {

        var data = details.sleepData();

        return List.of(
                        format(data.startTime()),
                        format(data.stopTime()),
                        data.zoneId(),
                        Integer.toString(details.minutesAsleep()),
                        Integer.toString(data.minutesAwake()),
                        data.notes()
                    );
    }
}