UnsavedSleepListMapper.java

package com.seebie.server.mapper.dtotoentity;

import com.seebie.server.dto.SleepData;
import com.seebie.server.entity.SleepSession;
import com.seebie.server.entity.User;
import com.seebie.server.repository.UserRepository;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.UUID;
import java.util.function.BiFunction;


@Component
public class UnsavedSleepListMapper implements BiFunction<UUID, List<SleepData>, List<SleepSession>> {

    private UserRepository userRepository;

    public UnsavedSleepListMapper(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public List<SleepSession> apply(UUID publicId, List<SleepData> dtos) {

        User user = userRepository.findByPublicId(publicId)
                .orElseThrow(() -> new IllegalArgumentException("user not found: " + publicId));

        return dtos.stream()
                    .map(dto -> toUnsavedEntity(user, dto))
                    .toList();
    }

    public SleepSession toUnsavedEntity(UUID publicId, SleepData dto) {
        return apply(publicId, List.of(dto)).getFirst();
    }

    private SleepSession toUnsavedEntity(User user, SleepData dto) {
        SleepSession entity = new SleepSession();
        entity.setUser(user);
        entity.setSleepData(dto.minutesAwake(), dto.notes(), dto.startTime(), dto.stopTime(), dto.minutesAsleep(), dto.zoneId());
        return entity;
    }

}