diff --git a/src/main/java/com/faforever/api/data/domain/Avatar.java b/src/main/java/com/faforever/api/data/domain/Avatar.java index 17d029680..34b79bf83 100644 --- a/src/main/java/com/faforever/api/data/domain/Avatar.java +++ b/src/main/java/com/faforever/api/data/domain/Avatar.java @@ -1,11 +1,15 @@ package com.faforever.api.data.domain; import com.yahoo.elide.annotation.Include; +import com.yahoo.elide.annotation.UpdatePermission; import lombok.Setter; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.OneToMany; import javax.persistence.Table; +import java.util.List; @Entity @Table(name = "avatars_list") @@ -15,6 +19,7 @@ public class Avatar extends AbstractEntity { private String url; private String tooltip; + private List assignments; @Column(name = "url") public String getUrl() { @@ -25,4 +30,12 @@ public String getUrl() { public String getTooltip() { return tooltip; } + + // Cascading is needed for Create & Delete + @OneToMany(mappedBy = "avatar", cascade = CascadeType.ALL, orphanRemoval = true) + // Permission is managed by AvatarAssignment class + @UpdatePermission(expression = "Prefab.Role.All") + public List getAssignments() { + return this.assignments; + } } diff --git a/src/main/java/com/faforever/api/data/domain/AvatarAssignment.java b/src/main/java/com/faforever/api/data/domain/AvatarAssignment.java new file mode 100644 index 000000000..e28b7853d --- /dev/null +++ b/src/main/java/com/faforever/api/data/domain/AvatarAssignment.java @@ -0,0 +1,68 @@ +package com.faforever.api.data.domain; + +import com.yahoo.elide.annotation.Include; +import lombok.Setter; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import java.time.OffsetDateTime; + +@Entity +@Table(name = "avatars") +@Include(rootLevel = true, type = "avatarAssignment") +@Setter +public class AvatarAssignment { + private int id; + private OffsetDateTime createTime; + private OffsetDateTime updateTime; + private boolean selected; + private OffsetDateTime expiresAt; + private Player player; + private Avatar avatar; + + @Column(name = "selected") + public boolean isSelected() { + return selected; + } + + @Column(name = "expires_at") + public OffsetDateTime getExpiresAt() { + return expiresAt; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "idAvatar") + public Avatar getAvatar() { + return avatar; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "idUser") + public Player getPlayer() { + return player; + } + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + public int getId() { + return id; + } + + @Column(name = "create_time") + public OffsetDateTime getCreateTime() { + return createTime; + } + + @Column(name = "update_time") + public OffsetDateTime getUpdateTime() { + return updateTime; + } +} diff --git a/src/main/java/com/faforever/api/data/domain/Player.java b/src/main/java/com/faforever/api/data/domain/Player.java index 4dfffa99e..4f61c057d 100644 --- a/src/main/java/com/faforever/api/data/domain/Player.java +++ b/src/main/java/com/faforever/api/data/domain/Player.java @@ -24,6 +24,7 @@ public class Player extends Login { private Ladder1v1Rating ladder1v1Rating; private GlobalRating globalRating; private List clanMemberships; + private List avatarAssignments; @OneToOne(mappedBy = "player", fetch = FetchType.LAZY) public Ladder1v1Rating getLadder1v1Rating() { @@ -50,6 +51,13 @@ public Clan getClan() { return null; } + // Permission is managed by AvatarAssignment class + @UpdatePermission(expression = "Prefab.Role.All") + @OneToMany(mappedBy = "player") + public List getAvatarAssignments() { + return avatarAssignments; + } + @Override public String toString() { return "Player(" + getId() + ", " + getLogin() + ")";