ImportExportService.java
package com.seebie.server.service;
import com.seebie.server.dto.ChallengeDetailDto;
import com.seebie.server.dto.SleepData;
import com.seebie.server.dto.SleepDetails;
import com.seebie.server.dto.UserData;
import com.seebie.server.mapper.dtotoentity.UnsavedChallengeListMapper;
import com.seebie.server.mapper.dtotoentity.UnsavedSleepListMapper;
import com.seebie.server.repository.ChallengeRepository;
import com.seebie.server.repository.SleepRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
@Service
public class ImportExportService {
private SleepRepository sleepRepository;
private ChallengeRepository challengeRepository;
private UnsavedSleepListMapper toUnsavedSleepEntity;
private UnsavedChallengeListMapper toUnsavedChallengeEntity;
public ImportExportService(SleepRepository sleepRepository, ChallengeRepository challengeRepository,
UnsavedSleepListMapper entityMapper, UnsavedChallengeListMapper challengeMapper) {
this.sleepRepository = sleepRepository;
this.challengeRepository = challengeRepository;
this.toUnsavedSleepEntity = entityMapper;
this.toUnsavedChallengeEntity = challengeMapper;
}
@Transactional(readOnly = true)
public UserData retrieveUserData(UUID publicId) {
var sleepData = sleepRepository.findAllByUser(publicId).stream()
.map(SleepDetails::sleepData)
.toList();
var challengeData = challengeRepository.findAllByUser(publicId).stream()
.map(ChallengeDetailDto::challenge)
.toList();
return new UserData(sleepData, challengeData);
}
@Transactional
public long saveUserData(UUID publicId, UserData parsedData) {
var sleepEntities = toUnsavedSleepEntity.apply(publicId, parsedData.sleepData());
var challengeEntities = toUnsavedChallengeEntity.apply(publicId, parsedData.challengeData());
challengeRepository.saveAll(challengeEntities);
return sleepRepository.saveAll(sleepEntities).size();
}
@Transactional(readOnly = true)
public List<SleepDetails> retrieveSleepDetails(UUID publicId) {
return sleepRepository.findAllByUser(publicId);
}
@Transactional
public long saveSleepData(UUID publicId, List<SleepData> parsedData) {
var entityList = toUnsavedSleepEntity.apply(publicId, parsedData);
return sleepRepository.saveAll(entityList).size();
}
}