package com.raysmond.blog.models;
import com.raysmond.blog.models.support.PostFormat;
import com.raysmond.blog.models.support.PostStatus;
import com.raysmond.blog.models.support.PostType;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Type;
import org.springframework.util.StringUtils;
import javax.persistence.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* @author Raysmond<i@raysmond.com>
*/
@Entity
@Table(name = "posts")
@Getter @Setter
public class Post extends BaseModel{
private static final SimpleDateFormat SLUG_DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd");
@ManyToOne
private User user;
@Column(nullable = false)
private String title;
@Type(type="text")
private String content;
@Type(type = "text")
private String renderedContent;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private PostStatus postStatus = PostStatus.PUBLISHED;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private PostFormat postFormat = PostFormat.MARKDOWN;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private PostType postType = PostType.POST;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "posts_tags",
joinColumns = {@JoinColumn(name = "post_id", nullable = false, updatable = false)},
inverseJoinColumns = {@JoinColumn(name = "tag_id", nullable = false, updatable = false)}
)
private Set<Tag> tags = new HashSet<>();
private String permalink;
public String getRenderedContent() {
if (this.postFormat == PostFormat.MARKDOWN)
return renderedContent;
return getContent();
}
public void setPermalink(String permalink){
String token = permalink.toLowerCase().replace("\n", " ").replaceAll("[^a-z\\d\\s]", " ");
this.permalink = StringUtils.arrayToDelimitedString(StringUtils.tokenizeToStringArray(token, " "), "-");
}
}