package com.plannaplan.services; import java.util.List; import java.util.Optional; import java.util.UUID; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; import com.plannaplan.repositories.UserRepository; import com.plannaplan.types.UserRoles; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * Service of UserService which can get(By Email), login, save user. */ @Service public class UserService { @Autowired private UserRepository repo; public UserService() { super(); } public User checkForUser(String email, String usosId) { return this.checkForUser(email, usosId, UserRoles.STUDENT); } public User checkForUser(String email, String usosId, UserRoles roleIfNotExist) { if (usosId == null) { Optional user = this.repo.getByEmail(email.replace("\n", "").trim()); if (user.isPresent()) { return user.get(); } else { final User newUser = new User(null, null, email.replace("\n", "").trim(), roleIfNotExist); return this.repo.save(newUser); } } else { Optional user = this.repo.getByUsosId(usosId.replace("\n", "").trim()); if (user.isPresent()) { return user.get(); } else { final User newUser = new User(null, null, email.replace("\n", "").trim(), usosId, roleIfNotExist); return this.repo.save(newUser); } } } public User login(User authority) throws UserNotFoundException { final String token = UUID.randomUUID().toString(); try { authority.setToken(token); this.repo.save(authority); } catch (Exception e) { throw new UserNotFoundException(e.getMessage()); } return authority; } public User save(User user) { return this.repo.save(user); } public User getUserByEmail(String email) throws UserNotFoundException { return this.repo.getByEmail(email.replace("\n", "").trim()) .orElseThrow(() -> new UserNotFoundException("Cannot find user with given authority")); } public Optional getByAuthority(String authority) { return this.repo.getByAuthority(authority); } public Optional getByToken(String token) { return this.repo.getByToken(token); } public List searchForStudents(String query) { return this.repo.searchForUsers(query, UserRoles.STUDENT); } public Optional getById(Long userId) { return this.repo.findById(userId); } public List getAllStudents() { return this.repo.getAllByRole(UserRoles.STUDENT); } public Optional getUserByRefreshToken(String refreshToken) { return this.repo.getByRefreshToken(refreshToken); } public boolean adminExists(){ return this.repo.getAllByRole(UserRoles.ADMIN).size() > 0; } }