UserAchievement.java
package org.petify.backend.models;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Entity
@Table(name = "user_achievements")
@Getter
@Setter
public class UserAchievement {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference
private ApplicationUser user;
@ManyToOne
@JoinColumn(name = "achievement_id", nullable = false)
private Achievement achievement;
@Column(name = "current_progress")
private Integer currentProgress = 0;
@Column(name = "completed")
private Boolean completed = false;
@Column(name = "completion_date")
private LocalDateTime completionDate;
@Transient
public Integer getProgressPercentage() {
if (achievement != null && achievement.getRequiredActions() > 0) {
return (int) ((double) currentProgress / achievement.getRequiredActions() * 100);
}
return 0;
}
}