package de.iwomm.propify_api.entity; import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; @Entity public class Property { @Id @GeneratedValue private UUID id; @Column(nullable = false) private String name; private String owner; @Column(nullable = false) private String street; @Column(nullable = false) private String houseNumber; @Column(nullable = false) private String zipCode; @Column(nullable = false) private String city; @ManyToOne @JoinColumn(name = "federal_state_id") private FederalState federalState; private String notes; @Column(nullable = false) private int yearOfConstruction; // baujahr @Column(nullable = false) private int unitCount; // anzahl einheiten @OneToMany(mappedBy = "property", orphanRemoval = true) @OrderBy("fileName") private List attachments; @Column(nullable = false) private LocalDateTime createdAt; private LocalDateTime updatedAt; @OneToMany(mappedBy = "property", cascade = CascadeType.PERSIST, orphanRemoval = true) @OrderBy("createdAt") @JsonBackReference private List projects = new ArrayList<>(); @ManyToOne(optional = false) @JoinColumn(name = "property_status_id", nullable = false) private PropertyStatus propertyStatus; public PropertyStatus getPropertyStatus() { return propertyStatus; } public void setPropertyStatus(PropertyStatus propertyStatus) { this.propertyStatus = propertyStatus; } public List getProjects() { return projects; } public void setProjects(List projects) { this.projects = projects; } public List getAttachments() { return attachments; } public void setAttachments(List attachment) { this.attachments = attachment; } public Property() {} public Property( String name, String street, String houseNumber, String zipCode, String city, FederalState federalState, String notes, PropertyStatus propertyStatus) { this.name = name; this.street = street; this.houseNumber = houseNumber; this.zipCode = zipCode; this.city = city; this.federalState = federalState; this.notes = notes; this.propertyStatus = propertyStatus; } @PrePersist protected void onCreate() { this.createdAt = LocalDateTime.now(); this.updatedAt = LocalDateTime.now(); } @PreUpdate protected void onUpdate() { this.updatedAt = LocalDateTime.now(); } public LocalDateTime getCreatedAt() { return createdAt; } public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } public LocalDateTime getUpdatedAt() { return updatedAt; } public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; } public void setId(UUID id) { this.id = id; } public UUID getId() { return id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getHouseNumber() { return houseNumber; } public void setHouseNumber(String houseNumber) { this.houseNumber = houseNumber; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getNotes() { return this.notes; } public void setNotes(String notes) { this.notes = notes; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public int getYearOfConstruction() { return yearOfConstruction; } public void setYearOfConstruction(int yearOfConstruction) { this.yearOfConstruction = yearOfConstruction; } public int getUnitCount() { return unitCount; } public void setUnitCount(int unitCount) { this.unitCount = unitCount; } public FederalState getFederalState() { return federalState; } public void setFederalState(FederalState federalState) { this.federalState = federalState; } public String getAddress() { return this.street + " " + this.houseNumber + ", " + this.zipCode + " " + this.city; } }