package de.flower.rmt.service;
import de.flower.rmt.model.db.entity.Team;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.model.dto.Password;
import javax.mail.internet.InternetAddress;
import javax.persistence.metamodel.Attribute;
import java.util.List;
/**
* @author flowerrrr
*/
public interface IUserManager {
User loadById(Long id, final Attribute... attributes);
User findByUsername(String username, final Attribute... attributes);
void save(User user);
/**
* Saves user and assigns or removes manager role.
* User object passed into this method should be
* refreshed after this method call to reflect changes.
* @param user
* @param isManager
*/
void save(User user, boolean isManager);
void delete(Long id);
List<User> findAll(Attribute... attributes);
List<User> findAllFetchTeams(final Attribute... attributes);
List<User> findAllByTeam(Team team);
/**
* Returns all players of the club that are not assigned to the given team.
*
* @param team
* @return
*/
List<User> findAllUnassignedPlayers(Team team);
/**
* Returns all players of the club that are not invited to the given event.
*
* @param event
* @return
*/
List<User> findAllUninvitedPlayers(Event event);
/**
* Returns all players of the given team that are not invited to the given event.
* @param event
* @param team
* @return
*/
List<User> findAllUninvitedPlayersByTeam(Event event, Team team);
/**
* Initialized the password fields with a
* fresh password.
*
* @return
*/
User newInstance();
void resetPassword(User user, final boolean sendMail);
void updatePassword(Long userId, Password password);
void sendInvitation(Long userId);
List<InternetAddress> getAddressesForfAllUsers();
void onLoginSuccess(User user);
}