UserDataDTOService.java
package edu.ucsb.cs156.frontiers.services;
import com.google.common.collect.Lists;
import edu.ucsb.cs156.frontiers.entities.Admin;
import edu.ucsb.cs156.frontiers.entities.Instructor;
import edu.ucsb.cs156.frontiers.entities.User;
import edu.ucsb.cs156.frontiers.models.UserDataDTO;
import edu.ucsb.cs156.frontiers.repositories.AdminRepository;
import edu.ucsb.cs156.frontiers.repositories.InstructorRepository;
import edu.ucsb.cs156.frontiers.repositories.UserRepository;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
@Service
public class UserDataDTOService {
private final UserRepository userRepository;
private final AdminRepository adminRepository;
private final InstructorRepository instructorRepository;
@Autowired
public UserDataDTOService(
UserRepository userRepository,
AdminRepository adminRepository,
InstructorRepository instructorRepository) {
this.userRepository = userRepository;
this.adminRepository = adminRepository;
this.instructorRepository = instructorRepository;
}
public Page<UserDataDTO> getUserDataDTOs(Pageable pageable) {
Page<User> users = userRepository.findAll(pageable);
List<Admin> admins = Lists.newArrayList(adminRepository.findAll());
List<Instructor> instructors = Lists.newArrayList(instructorRepository.findAll());
List<UserDataDTO> userDTOs = new ArrayList<>();
for (User user : users) {
boolean isAdmin = admins.stream().anyMatch(a -> a.getEmail().equals(user.getEmail()));
boolean isInstructor =
instructors.stream().anyMatch(i -> i.getEmail().equals(user.getEmail()));
userDTOs.add(UserDataDTO.from(user, isAdmin, isInstructor));
}
return new PageImpl<UserDataDTO>(userDTOs, pageable, users.getTotalElements());
}
}