Contract.java
package access.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.Hibernate;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
@Entity(name = "contracts")
@NoArgsConstructor
@Getter
@Setter
public class Contract {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "provider_name")
@NotNull
private String providerName;
@Column(name = "application_name")
@NotNull
private String applicationName;
@Column(name = "signee_name")
@NotNull
private String signeeName;
@Column(name = "signee_title")
private String signeeTitle;
@Column
private String address;
@Column
private String country;
@Column
private String telephone;
@Column
@NotNull
private String email;
@Column(name = "signed_contract")
private boolean signedContract;
@Column(name = "ticket_key")
private String ticketKey;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private Application application;
//We need application info, but we don't want cyclic JSON deserialization
@JsonProperty(access = JsonProperty.Access.READ_ONLY, value = "application")
public Map<String, Serializable> getApplicationInfo() {
Application app = getApplication();
Map<String, Serializable> applicationInfo = new HashMap<>();
if (app != null && Hibernate.isInitialized(app)) {
applicationInfo.put("id", app.getId());
applicationInfo.put("name", app.getName());
}
return applicationInfo;
}
}