nclazz-mail-relay/src/main/java/de/nclazz/service/mailrelay/domain/Account.java

65 lines
1.8 KiB
Java

package de.nclazz.service.mailrelay.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "accounts", indexes = @Index(columnList = "token"))
@Data
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class Account {
@Id
@Column(name = "guid", columnDefinition = "char(36)")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy ="org.hibernate.id.UUIDGenerator")
@Type(type = "uuid-char")
private UUID guid;
private String name;
@Column(length = Relay.TOKEN_NUM_CHARS)
private String token;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "accounts_receivers")
private List<String> receivers;
@JsonIgnore
@OneToMany
@JoinColumn(name = "message_guid", referencedColumnName = "guid")
private final List<Message> sentMessages = new ArrayList<>();
public static Account of(@NonNull String name, @NonNull List<String> receivers) {
Account account = new Account();
account.setName(name);
account.setReceivers(receivers);
return account;
}
}