Profile.java
package com.deusto.deuspotify.model;
import jakarta.persistence.*;
import java.util.List;
/**
* @class Profile
* @brief Represents a user profile in the Deuspotify application.
*
* A profile includes personal information, friend list, favorite songs,
* associated playlists, and admin privileges.
*/
@Entity
@Table(name = "profiles")
public class Profile {
/** Unique identifier for the profile. */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** Username used for login. */
private String username;
/** Encrypted password. */
private String password;
/** Email address associated with the profile. */
private String email;
/** List of friends' usernames. */
@ElementCollection
@CollectionTable(name = "profile_friends", joinColumns = @JoinColumn(name = "profile_id"))
@Column(name = "friend")
private List<String> friendsList;
/** List of songs marked as favorites by the user. */
@ManyToMany
@JoinTable(
name = "profile_favourite_song",
joinColumns = @JoinColumn(name = "profile_id"),
inverseJoinColumns = @JoinColumn(name = "song_id")
)
private List<Song> favouriteSongs;
/** List of playlists owned by the user. */
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "profile_id")
private List<Playlist> playlists;
/** Indicates if the user has administrative privileges. */
private boolean isAdmin;
/**
* Default constructor.
*/
public Profile() {}
/**
* Full constructor.
*
* @param username Username for the profile.
* @param password Encrypted password.
* @param email Email address.
* @param friendsList List of friends.
* @param favouriteSongs Favorite songs.
* @param playlists User's playlists.
* @param isAdmin Whether the user is an admin.
*/
public Profile(String username, String password, String email, List<String> friendsList, List<Song> favouriteSongs, List<Playlist> playlists, boolean isAdmin) {
this.username = username;
this.password = password;
this.email = email;
this.friendsList = friendsList;
this.favouriteSongs = favouriteSongs;
this.playlists = playlists;
this.isAdmin = isAdmin;
}
/// @name Getters and Setters
/// @{
/** @return Profile ID. */
public Long getId() { return id; }
/** @param id Profile ID. */
public void setId(Long id) { this.id = id; }
/** @return Username. */
public String getUsername() { return username; }
/** @param username Username. */
public void setUsername(String username) { this.username = username; }
/** @return Password. */
public String getPassword() { return password; }
/** @param password Encrypted password. */
public void setPassword(String password) { this.password = password; }
/** @return Email. */
public String getEmail() { return email; }
/** @param email Email address. */
public void setEmail(String email) { this.email = email; }
/** @return List of friends. */
public List<String> getFriendsList() { return friendsList; }
/** @param friendsList List of friends. */
public void setFriendsList(List<String> friendsList) { this.friendsList = friendsList; }
/** @return Favorite songs. */
public List<Song> getFavouriteSongs() { return favouriteSongs; }
/** @param favouriteSongs List of favorite songs. */
public void setFavouriteSongs(List<Song> favouriteSongs) { this.favouriteSongs = favouriteSongs; }
/** @return Playlists. */
public List<Playlist> getPlaylists() { return playlists; }
/** @param playlists List of playlists. */
public void setPlaylists(List<Playlist> playlists) { this.playlists = playlists; }
/** @return True if the profile is admin. */
public boolean isAdmin() { return isAdmin; }
/** @param isAdmin Set admin status. */
public void setAdmin(boolean isAdmin) { this.isAdmin = isAdmin; }
/// @}
/**
* @brief String representation of the profile.
* @return A summary of the profile including username and email.
*/
@Override
public String toString() {
return "Profile{" +
"username='" + username + '\'' +
", email='" + email + '\'' +
", isAdmin=" + isAdmin +
'}';
}
}