package app.mealsmadeeasy.api.recipe; import app.mealsmadeeasy.api.image.S3ImageEntity; import app.mealsmadeeasy.api.recipe.comment.RecipeComment; import app.mealsmadeeasy.api.recipe.comment.RecipeCommentEntity; import app.mealsmadeeasy.api.recipe.star.RecipeStar; import app.mealsmadeeasy.api.recipe.star.RecipeStarEntity; import app.mealsmadeeasy.api.user.User; import app.mealsmadeeasy.api.user.UserEntity; import jakarta.persistence.*; import org.jetbrains.annotations.Nullable; import java.time.LocalDateTime; import java.util.HashSet; import java.util.Set; @Entity(name = "Recipe") public final class RecipeEntity implements Recipe { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(nullable = false, updatable = false) private Long id; @Column(nullable = false) private LocalDateTime created; private LocalDateTime modified; @Column(nullable = false, unique = true) private String slug; @Column(nullable = false) private String title; @Nullable private Integer preparationTime; @Nullable private Integer cookingTime; @Nullable private Integer totalTime; @Lob @Column(name = "raw_text", columnDefinition = "TEXT", nullable = false) @Basic(fetch = FetchType.LAZY) private String rawText; @Lob @Column(name = "cached_rendered_text", columnDefinition = "TEXT") @Basic(fetch = FetchType.LAZY) private String cachedRenderedText; @ManyToOne(optional = false) @JoinColumn(name = "owner_id", nullable = false) private UserEntity owner; @OneToMany @JoinColumn(name = "recipeId") private Set stars = new HashSet<>(); @OneToMany(mappedBy = "recipe") private Set comments = new HashSet<>(); @Column(nullable = false) private Boolean isPublic = false; @ManyToMany private Set viewers = new HashSet<>(); @ManyToOne private S3ImageEntity mainImage; @Override public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } @Override public LocalDateTime getCreated() { return this.created; } public void setCreated(LocalDateTime created) { this.created = created; } @Override public @Nullable LocalDateTime getModified() { return this.modified; } public void setModified(@Nullable LocalDateTime modified) { this.modified = modified; } @Override public String getSlug() { return this.slug; } public void setSlug(String slug) { this.slug = slug; } @Override public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } @Override public @Nullable Integer getPreparationTime() { return this.preparationTime; } public void setPreparationTime(@Nullable Integer preparationTime) { this.preparationTime = preparationTime; } @Override public @Nullable Integer getCookingTime() { return this.cookingTime; } public void setCookingTime(@Nullable Integer cookingTime) { this.cookingTime = cookingTime; } @Override public @Nullable Integer getTotalTime() { return this.totalTime; } public void setTotalTime(@Nullable Integer totalTime) { this.totalTime = totalTime; } @Override public String getRawText() { return this.rawText; } public void setRawText(String rawText) { this.rawText = rawText; } public @Nullable String getCachedRenderedText() { return this.cachedRenderedText; } public void setCachedRenderedText(@Nullable String cachedRenderedText) { this.cachedRenderedText = cachedRenderedText; } @Override public UserEntity getOwner() { return this.owner; } public void setOwner(UserEntity owner) { this.owner = owner; } @Override public boolean isPublic() { return this.isPublic; } public void setPublic(Boolean isPublic) { this.isPublic = isPublic; } @Override public Set getViewers() { return Set.copyOf(this.viewers); } public Set getViewerEntities() { return this.viewers; } public void setViewers(Set viewers) { this.viewers = viewers; } @Override public Set getStars() { return Set.copyOf(this.stars); } public Set getStarEntities() { return this.stars; } public void setStarEntities(Set starGazers) { this.stars = starGazers; } @Override public Set getComments() { return Set.copyOf(this.comments); } public Set getCommentEntities() { return this.comments; } public void setComments(Set comments) { this.comments = comments; } @Override public String toString() { return "RecipeEntity(" + this.id + ", " + this.title + ")"; } @Override public @Nullable S3ImageEntity getMainImage() { return this.mainImage; } public void setMainImage(@Nullable S3ImageEntity image) { this.mainImage = image; } }