UserResponseDTO.java
package org.petify.backend.dto;
import org.petify.backend.models.ApplicationUser;
import org.petify.backend.models.Role;
import org.petify.backend.models.UserAchievement;
import org.petify.backend.models.VolunteerStatus;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@Getter
@Setter
public class UserResponseDTO {
private Integer userId;
private String username;
private String firstName;
private String lastName;
private LocalDate birthDate;
private String gender;
private String phoneNumber;
private String email;
private VolunteerStatus volunteerStatus;
private boolean active;
private LocalDateTime createdAt;
private Integer xpPoints;
private Integer level;
private Integer likesCount;
private Integer supportCount;
private Integer badgesCount;
private Integer adoptionCount;
private String city;
private Double latitude;
private Double longitude;
private Double preferredSearchDistanceKm;
private Boolean autoLocationEnabled;
private LocalDateTime locationUpdatedAt;
private boolean hasProfileImage;
private Set<Role> authorities;
private Integer version;
private Set<UserAchievement> achievements;
private Integer xpToNextLevel;
private boolean hasLocation;
private boolean hasCompleteLocationProfile;
public UserResponseDTO() {}
public UserResponseDTO(ApplicationUser user) {
this.userId = user.getUserId();
this.username = user.getUsername();
this.firstName = user.getFirstName();
this.lastName = user.getLastName();
this.birthDate = user.getBirthDate();
this.gender = user.getGender();
this.phoneNumber = user.getPhoneNumber();
this.email = user.getEmail();
this.volunteerStatus = user.getVolunteerStatus();
this.active = user.isActive();
this.createdAt = user.getCreatedAt();
this.xpPoints = user.getXpPoints();
this.level = user.getLevel();
this.likesCount = user.getLikesCount();
this.supportCount = user.getSupportCount();
this.badgesCount = user.getBadgesCount();
this.adoptionCount = user.getAdoptionCount();
this.city = user.getCity();
this.latitude = user.getLatitude();
this.longitude = user.getLongitude();
this.preferredSearchDistanceKm = user.getPreferredSearchDistanceKm();
this.autoLocationEnabled = user.getAutoLocationEnabled();
this.locationUpdatedAt = user.getLocationUpdatedAt();
this.hasProfileImage = user.hasProfileImage();
this.authorities = user.getAuthorities() != null
? user.getAuthorities().stream()
.filter(Role.class::isInstance)
.map(Role.class::cast)
.collect(Collectors.toSet()) :
new HashSet<>();
this.achievements = user.getAchievements() != null
? user.getAchievements() : new HashSet<>();
this.version = user.getVersion();
this.xpToNextLevel = user.getXpToNextLevel();
this.hasLocation = user.hasLocation();
this.hasCompleteLocationProfile = user.hasCompleteLocationProfile();
}
public static UserResponseDTO fromUser(ApplicationUser user) {
return new UserResponseDTO(user);
}
}