UnsavedChallengeListMapper.java

package com.seebie.server.mapper.dtotoentity;

import com.seebie.server.dto.ChallengeDto;
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 UnsavedChallengeListMapper implements BiFunction<UUID, List<ChallengeDto>, List<com.seebie.server.entity.Challenge>> {

    private UserRepository userRepository;

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

    @Override
    public List<com.seebie.server.entity.Challenge> apply(UUID publicId, List<ChallengeDto> dtos) {
        User user = userRepository.findByPublicId(publicId)
                .orElseThrow(() -> new IllegalArgumentException("user not found: " + publicId));

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

    public com.seebie.server.entity.Challenge toUnsavedEntity(UUID username, ChallengeDto dto) {
        return apply(username, List.of(dto)).getFirst();
    }

    private com.seebie.server.entity.Challenge toUnsavedEntity(User user, ChallengeDto dto) {
        return new com.seebie.server.entity.Challenge(dto.name(), dto.description(), dto.start(), dto.finish(), user);
    }

}