View Javadoc
1   package org.petify.backend.models;
2   
3   import com.fasterxml.jackson.annotation.JsonBackReference;
4   import jakarta.persistence.Column;
5   import jakarta.persistence.Entity;
6   import jakarta.persistence.GeneratedValue;
7   import jakarta.persistence.GenerationType;
8   import jakarta.persistence.Id;
9   import jakarta.persistence.JoinColumn;
10  import jakarta.persistence.ManyToOne;
11  import jakarta.persistence.Table;
12  import jakarta.persistence.Transient;
13  import lombok.Getter;
14  import lombok.Setter;
15  
16  import java.time.LocalDateTime;
17  
18  @Entity
19  @Table(name = "user_achievements")
20  @Getter
21  @Setter
22  public class UserAchievement {
23      @Id
24      @GeneratedValue(strategy = GenerationType.IDENTITY)
25      private Long id;
26  
27      @ManyToOne
28      @JoinColumn(name = "user_id", nullable = false)
29      @JsonBackReference
30      private ApplicationUser user;
31  
32      @ManyToOne
33      @JoinColumn(name = "achievement_id", nullable = false)
34      private Achievement achievement;
35  
36      @Column(name = "current_progress")
37      private Integer currentProgress = 0;
38  
39      @Column(name = "completed")
40      private Boolean completed = false;
41  
42      @Column(name = "completion_date")
43      private LocalDateTime completionDate;
44  
45      @Transient
46      public Integer getProgressPercentage() {
47          if (achievement != null && achievement.getRequiredActions() > 0) {
48              return (int) ((double) currentProgress / achievement.getRequiredActions() * 100);
49          }
50          return 0;
51      }
52  }