allfree-springboot-backend / src / main / java / com / allfree / allfreespringbackend / user / User.java
User.java
Raw
package com.allfree.allfreespringbackend.user;

import com.allfree.allfreespringbackend.auth.model.Role;
import com.allfree.allfreespringbackend.model.Article;
import com.allfree.allfreespringbackend.model.EStatus;
import com.allfree.allfreespringbackend.user.dto.NewUserDTO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Entity
@Builder
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "users")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@Column(name = "first_name")
	private String firstName;

	@Column(name = "last_name")
	private String lastName;

	@Column(name = "email")
	private String email;

	@Getter
	@Setter
	private String username;
	@Column(name = "password")
	@JsonIgnore
	private String password;

	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinTable(name = "user_roles",
			joinColumns = @JoinColumn(name = "user_id"),
			inverseJoinColumns = @JoinColumn(name = "role_id"))
	private Set<Role> roles = new HashSet<>();

	@OneToMany(targetEntity = Article.class, cascade = CascadeType.ALL, orphanRemoval = true)
	@JoinColumn(name = "ua_fk", referencedColumnName = "id")
	private List<Article> articles = new ArrayList<>();

	@ManyToMany()
	private
	@Getter
	@Setter
	List<Article> favArticles = new ArrayList<>();

	public static User loadFromUserDTO(NewUserDTO newUser) {
		return User.builder()
				.firstName(newUser.getFirsName())
				.lastName(newUser.getLastName())
				.email(newUser.getEmail())
				.username(newUser.getUsername())
				.password(newUser.getPassword())
				.roles(newUser.getRoles())
				.build();
	}

	public void addArticle(Article article) {
		articles.add(article);
	}

	public void setUserDetails(String firstName, String lastName, String email,String username, String password, Set<Role> roles) {
		setFirstName(firstName);
		setLastName(lastName);
		setEmail(email);
		setUsername(username);
		setPassword(password);
		setRoles(roles);
	}

	public List<Article> getArticlesByStatus(String status){
		return this.articles.stream().filter(article -> article.getStatus().equals(EStatus.valueOf(status))).collect(Collectors.toList());
}
}