Commit da1259d7 authored by Tomas Madeja's avatar Tomas Madeja
Browse files

feat: add usermanipulation to userauth facade

parent 9e515eaa
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.icehockeymanager.exceptions;

public class UnknownUserException extends RuntimeException {

    public UnknownUserException(String message) {
        super(message);
    }

    public UnknownUserException() {
    }
}
+15 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.icehockeymanager.facades;

import cz.muni.fi.pa165.icehockeymanager.dto.TeamDto;
import cz.muni.fi.pa165.icehockeymanager.dto.UserDto;
import cz.muni.fi.pa165.icehockeymanager.exceptions.UsernameTakenException;

@@ -37,4 +38,18 @@ public interface UserAuthFacade {
     * @throws UsernameTakenException if username is already taken by another user
     */
    UserDto createTeamManager(String username, String password, int teamId);

    /**
     * Find team associated with the manager
     * @param username username
     * @return associated team
     */
    Optional<TeamDto> fetchTeamForManager(String username);

    /**
     * Find user by username
     * @param username username
     * @return empty optional if user was not found
     */
    Optional<UserDto> fetchUser(String username);
}
+20 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.icehockeymanager.dao;

import cz.muni.fi.pa165.icehockeymanager.model.Team;
import cz.muni.fi.pa165.icehockeymanager.model.User;
import org.springframework.stereotype.Repository;

import javax.persistence.NoResultException;
import java.util.Optional;

@Repository
public class TeamDao extends AbstractDao<Team> {

    public TeamDao() {
        super(Team.class);
    }

    public Optional<Team> findByManager(User manager) {
        Team team = null;
        try {
            team = (Team) entityManager
                    .createNativeQuery(
                            "SELECT t FROM Team t WHERE t.managerId = :managerId",
                            Team.class
                    )
                    .setParameter("managerId", manager.getId())
                    .getSingleResult();
        } catch(NoResultException ignored) {

        }
        return Optional.ofNullable(team);
    }
}
+21 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.icehockeymanager.facades;

import cz.muni.fi.pa165.icehockeymanager.dto.TeamDto;
import cz.muni.fi.pa165.icehockeymanager.dto.UserDto;
import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownTeamException;
import cz.muni.fi.pa165.icehockeymanager.exceptions.UnknownUserException;
import cz.muni.fi.pa165.icehockeymanager.security.Roles;
import cz.muni.fi.pa165.icehockeymanager.services.BeanMappingService;
import cz.muni.fi.pa165.icehockeymanager.services.TeamService;
import cz.muni.fi.pa165.icehockeymanager.services.UserAuthService;
@@ -49,4 +52,22 @@ public class UserAuthFacadeImpl implements UserAuthFacade {
        teamService.updateTeamManager(team, user);
        return beanMapper.mapTo(user, UserDto.class);
    }

    @Override
    public Optional<TeamDto> fetchTeamForManager(String username) {
        var user = authService.findUser(username).orElseThrow(UnknownUserException::new);
        if (!user.getRole().equals(Roles.TEAM_MANAGER.toString())) {
            return Optional.empty();
        }
        return teamService
                .findTeamByManager(user)
                .flatMap(team -> Optional.of(beanMapper.mapTo(team, TeamDto.class)));
    }

    @Override
    public Optional<UserDto> fetchUser(String username) {
        return authService
                .findUser(username)
                .flatMap(user -> Optional.of(beanMapper.mapTo(user, UserDto.class)));
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -28,6 +28,14 @@ public interface TeamService {
     */
    Optional<Team> findTeam(long id);

    /**
     * Retrieve team by manager.
     *
     * @param manager Unique identifier of a team
     * @return Team, or null iff no team for such ID was found
     */
    Optional<Team> findTeamByManager(User manager);

    /**
     * Adds the player to a team.
     *
Loading