package net.frozenorb.apiv3.model; import com.mongodb.async.SingleResultCallback; import lombok.Getter; import net.frozenorb.apiv3.APIv3; import org.bson.types.ObjectId; import org.mongodb.morphia.annotations.Entity; import org.mongodb.morphia.annotations.Id; import java.time.Instant; import java.util.Date; import java.util.UUID; @Entity(value = "punishments", noClassnameStored = true) public final class Punishment { @Id private ObjectId id; @Getter private UUID target; @Getter private String reason; @Getter private PunishmentType type; @Getter private Date expiresAt; @Getter private UUID addedBy; @Getter private Date addedAt; @Getter private String addedOn; @Getter private UUID removedBy; @Getter private Date removedAt; @Getter private String removalReason; public Punishment() {} // For Morphia public Punishment(UUID target, String reason, PunishmentType type, Date expiresAt, UUID addedBy, String addedOn) { this.target = target; this.reason = reason; this.type = type; this.expiresAt = expiresAt; this.addedBy = addedBy; this.addedAt = new Date(); this.addedOn = addedOn; } public void delete(UUID removedBy, String reason) { this.removedBy = removedBy; this.removedAt = new Date(); this.removalReason = reason; APIv3.getDatastore().save(this); } public boolean isActive() { return !(isExpired() || isRemoved()); } public boolean isExpired() { if (expiresAt == null) { return false; // Never expires } else { return expiresAt.after(new Date()); } } public boolean isRemoved() { return removedBy != null; } public enum PunishmentType { BAN, MUTE, WARN } }