Commit e02a3aa9 authored by Jiri Novotny's avatar Jiri Novotny
Browse files

Add User Entity

parent cf95dea6
Pipeline #140834 passed with stage
in 2 minutes and 5 seconds
package cz.muni.fi.pa165.dto;
import cz.muni.fi.pa165.enums.UserRole;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserProfileDto {
private Long id;
private String email;
private String passwordHash;
private String nickName;
private AgentNameDto agent;
private UserRole role;
}
package cz.muni.fi.pa165.enums;
public enum UserRole {
ADMIN,
AGENT
}
package cz.muni.fi.pa165.facade;
import cz.muni.fi.pa165.dto.UserProfileDto;
public interface AppUserFacade {
UserProfileDto getUser(long userId);
UserProfileDto getUserByNickname(String nickname);
}
package cz.muni.fi.pa165.entity;
import cz.muni.fi.pa165.enums.UserRole;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.Objects;
/**
* @author Jiri Novotny, 485486
*/
@Entity
@Getter
@Setter
public class AppUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String passwordHash;
@Column(nullable = false, unique = true)
private String nickname;
@JoinColumn(name="agent_id")
@ManyToOne
private Agent agent;
@Enumerated
private UserRole role;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AppUser)) return false;
AppUser appUser = (AppUser) o;
return getEmail().equals(appUser.getEmail()) &&
this.getNickname().equals(appUser.getNickname()) && getRole() == appUser.getRole();
}
@Override
public int hashCode() {
return Objects.hash(getEmail(), this.getNickname(), getRole());
}
}
package cz.muni.fi.pa165.enums;
public enum UserRole {
ADMIN,
AGENT
}
package cz.muni.fi.pa165.repository;
import cz.muni.fi.pa165.entity.AppUser;
import cz.muni.fi.pa165.entity.Skill;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
/**
* @author Jiri Novotny, 485486
*/
public interface AppUserRepository extends JpaRepository<AppUser, Long> {
@Query("SELECT au FROM AppUser au WHERE au.nickname = :nickname")
AppUser findByNickname(String nickname);
}
package cz.muni.fi.pa165.config;
import cz.muni.fi.pa165.dto.UserProfileDto;
import cz.muni.fi.pa165.entity.AppUser;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface UserProfileMapper {
AppUser map(UserProfileDto source);
UserProfileDto map(AppUser destination);
}
package cz.muni.fi.pa165.facade;
import cz.muni.fi.pa165.config.UserProfileMapper;
import cz.muni.fi.pa165.dto.UserProfileDto;
import cz.muni.fi.pa165.entity.AppUser;
import cz.muni.fi.pa165.service.AppUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author Jiri Novotny, 485476
*/
@Service
public class AppUserFacadeImpl implements AppUserFacade {
private final AppUserService appUserService;
private final UserProfileMapper userProfileMapper;
@Autowired
public AppUserFacadeImpl(AppUserService appUserService, UserProfileMapper userProfileMapper) {
this.appUserService = appUserService;
this.userProfileMapper = userProfileMapper;
}
@Override
public UserProfileDto getUser(long userId) {
AppUser appUser = appUserService.findById(userId);
return userProfileMapper.map(appUser);
}
@Override
public UserProfileDto getUserByNickname(String nickname) {
AppUser appUser = appUserService.findByNickname(nickname);
return userProfileMapper.map(appUser);
}
}
package cz.muni.fi.pa165.service;
import cz.muni.fi.pa165.entity.Agent;
import cz.muni.fi.pa165.entity.AppUser;
import cz.muni.fi.pa165.entity.Skill;
import cz.muni.fi.pa165.entity.Training;
import cz.muni.fi.pa165.repository.AppUserRepository;
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;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Jiri Novotny, 485486
*/
@Service
public class AppUserService {
private final AppUserRepository appUserRepository;
@Autowired
public AppUserService(AppUserRepository appUserRepository) { this.appUserRepository = appUserRepository; }
public AppUser findById(Long id) {
return appUserRepository.findById(id).orElse(null);
}
public AppUser findByNickname(String nickname) { return appUserRepository.findByNickname(nickname); }
public Page<AppUser> findAll(Pageable page) {
return appUserRepository.findAll(page);
}
public List<AppUser> findAll() {
return appUserRepository.findAll();
}
public Page<AppUser> findAllByAgent(Agent agent, Pageable page) {
List<AppUser> agents = appUserRepository.findAll();
List<AppUser> filtered =
agents.stream()
.filter(appUser -> appUser.getAgent().equals(agent))
.collect(Collectors.toList());
return createPage(filtered, page);
}
public Long create(AppUser appUser) {
return appUserRepository.save(appUser).getId();
}
public void update(AppUser appUser) {
appUserRepository.save(appUser);
}
public void delete(AppUser appUser) {
appUserRepository.delete(appUser);
}
public void delete(Long id) {
appUserRepository.deleteById(id);
}
private Page<AppUser> createPage(List<AppUser> appUsers, Pageable pageable) {
final int start = (int) pageable.getOffset();
final int end = Math.min((start + pageable.getPageSize()), appUsers.size());
return new PageImpl<>(appUsers.subList(start, end), pageable, appUsers.size());
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment