UserService.java 1.84 KB
package fr.plil.sio.persistence.api;

public interface UserService {

    /**
     * Create an user with a specific name in the database and affected to an existing group.
     * There is no two users with the same name in the database.
     * Only references at one level are loaded (i.e. the group where the user belong).
     *
     * @param name the name of the user
     * @param groupName the name of the group
     * @return an instance of the user
     * @throws IllegalArgumentException if name or groupName is null, or if group does not exist.
     * @throws IllegalStateException    if an user with the same name is already present
     */
    User create(String name, String groupName);

    /**
     * Delete an user in the database.
     *
     * @param name the name of the user to remove
     * @return true if user has been deleted, false if user is not found in the database.
     * @throws IllegalArgumentException if name is null
     */
    boolean delete(String name);

    /**
     * Find an user in the database based on its name.
     *
     * @param name the name of the user to search for.
     * @return an instance of the user if found, else null.
     * @throws IllegalArgumentException if name is null
     */
    User findByName(String name);

    /**
     * Check method to control if an user has a specific right. The following rule is used: an user has a specific
     * right if the group where the user is contains the specific right or one of its parents.
     *
     * @param userName the name of the user
     * @param right    the specific right
     * @return true if the group where the user is contains the specific right or one of its parents, false else.
     * @throws IllegalArgumentException if userName or right is null, or if the user or right does not exist in the db.
     */
    boolean isUserHasRight(String userName, Right right);
}