// Path: src/main/java/com/yyqian/imagine/dto/PostCreateForm.java
// public class PostCreateForm {
// 
//   @NotEmpty
//   private String title = "";
// 
//   private String url;
// 
//   private String text;
// 
//   public PostCreateForm() {
//   }
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public void setTitle(String title) {
//     this.title = title.trim();
//   }
// 
//   public String getUrl() {
//     return url;
//   }
// 
//   public void setUrl(String url) {
//     this.url = url.trim();
//   }
// 
//   public String getText() {
//     return text;
//   }
// 
//   public void setText(String text) {
//     this.text = text.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/po/Post.java
// @Entity
// @Table(name = "post")
// public class Post extends BaseUGC {
// 
//   @Column(name = "title", nullable = false)
//   private String title;
// 
//   @Enumerated(EnumType.STRING)
//   @Column(name = "kind", nullable = false)
//   private Kind kind;
// 
//   @Enumerated(EnumType.STRING)
//   @Column(name = "category")
//   private Category category;
// 
//   // map to comment, bidirectional
//   // @OneToMany tells the persistence provider this is an association and not an attribute.
//   @OneToMany(mappedBy = "post", fetch = FetchType.EAGER, orphanRemoval = true, cascade =
//       {CascadeType.PERSIST, CascadeType.MERGE})
//   @JsonIgnore
//   private List<Comment> comments = new ArrayList<Comment>();
// 
//   @Column(name = "comment_count", nullable = false)
//   private int commentCount = 0;
// 
//   @Column(name = "site")
//   private String site;
// 
//   // The default constructor only exists for the sake of JPA. You won’t use it directly, so it is
//   // designated as protected.
//   public Post() {
//   }
// 
//   public Post(String title, String content, User user, Kind kind) {
//     super(content, user);
//     this.title = title;
//     this.kind = kind;
//   }
// 
//   @Override
//   public String toString() {
//     return id.toString();
//   }
// 
//   public static enum Kind {PLAIN, LINK}
// 
//   public static enum Category {SHOW, ASK}
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public Kind getKind() {
//     return kind;
//   }
// 
//   public Category getCategory() {
//     return category;
//   }
// 
//   public List<Comment> getComments() {
//     return comments;
//   }
// 
//   public int getCommentCount() {
//     return commentCount;
//   }
// 
//   public void setTitle(String title) {
//     this.title = title;
//   }
// 
//   public void setKind(Kind kind) {
//     this.kind = kind;
//   }
// 
//   public void setCategory(Category category) {
//     this.category = category;
//   }
// 
//   public void setComments(List<Comment> comments) {
//     this.comments = comments;
//   }
// 
//   public void increaseCommentCount() {
//     commentCount = commentCount + 1;
//   }
// 
//   public void decreaseCommentCount() {
//     if (commentCount > 0) {
//       commentCount = commentCount - 1;
//     }
//   }
// 
//   public String getSite() {
//     return site;
//   }
// 
//   public void setSite(String site) {
//     this.site = site;
//   }
// }


import com.yyqian.imagine.dto.PostCreateForm;
import com.yyqian.imagine.po.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.Collection;
import java.util.Optional;
package com.yyqian.imagine.service;



/**
 * Created on 12/15/15.
 *
 * @author Yinyin Qian
 */
public interface PostService {
  Optional<Post> getPostById(long id);

  Page<Post> getPostListByPage(Pageable pageable);

  Collection<Post> getPostListBySite(String site);

  Collection<Post> getPostListByCurrentUser();

  Post create(Post post);

// Path: src/main/java/com/yyqian/imagine/dto/PostCreateForm.java
// public class PostCreateForm {
// 
//   @NotEmpty
//   private String title = "";
// 
//   private String url;
// 
//   private String text;
// 
//   public PostCreateForm() {
//   }
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public void setTitle(String title) {
//     this.title = title.trim();
//   }
// 
//   public String getUrl() {
//     return url;
//   }
// 
//   public void setUrl(String url) {
//     this.url = url.trim();
//   }
// 
//   public String getText() {
//     return text;
//   }
// 
//   public void setText(String text) {
//     this.text = text.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/po/Post.java
// @Entity
// @Table(name = "post")
// public class Post extends BaseUGC {
// 
//   @Column(name = "title", nullable = false)
//   private String title;
// 
//   @Enumerated(EnumType.STRING)
//   @Column(name = "kind", nullable = false)
//   private Kind kind;
// 
//   @Enumerated(EnumType.STRING)
//   @Column(name = "category")
//   private Category category;
// 
//   // map to comment, bidirectional
//   // @OneToMany tells the persistence provider this is an association and not an attribute.
//   @OneToMany(mappedBy = "post", fetch = FetchType.EAGER, orphanRemoval = true, cascade =
//       {CascadeType.PERSIST, CascadeType.MERGE})
//   @JsonIgnore
//   private List<Comment> comments = new ArrayList<Comment>();
// 
//   @Column(name = "comment_count", nullable = false)
//   private int commentCount = 0;
// 
//   @Column(name = "site")
//   private String site;
// 
//   // The default constructor only exists for the sake of JPA. You won’t use it directly, so it is
//   // designated as protected.
//   public Post() {
//   }
// 
//   public Post(String title, String content, User user, Kind kind) {
//     super(content, user);
//     this.title = title;
//     this.kind = kind;
//   }
// 
//   @Override
//   public String toString() {
//     return id.toString();
//   }
// 
//   public static enum Kind {PLAIN, LINK}
// 
//   public static enum Category {SHOW, ASK}
// 
//   public String getTitle() {
//     return title;
//   }
// 
//   public Kind getKind() {
//     return kind;
//   }
// 
//   public Category getCategory() {
//     return category;
//   }
// 
//   public List<Comment> getComments() {
//     return comments;
//   }
// 
//   public int getCommentCount() {
//     return commentCount;
//   }
// 
//   public void setTitle(String title) {
//     this.title = title;
//   }
// 
//   public void setKind(Kind kind) {
//     this.kind = kind;
//   }
// 
//   public void setCategory(Category category) {
//     this.category = category;
//   }
// 
//   public void setComments(List<Comment> comments) {
//     this.comments = comments;
//   }
// 
//   public void increaseCommentCount() {
//     commentCount = commentCount + 1;
//   }
// 
//   public void decreaseCommentCount() {
//     if (commentCount > 0) {
//       commentCount = commentCount - 1;
//     }
//   }
// 
//   public String getSite() {
//     return site;
//   }
// 
//   public void setSite(String site) {
//     this.site = site;
//   }
// }


// Path: src/main/java/com/yyqian/imagine/service/PostService.java
import com.yyqian.imagine.dto.PostCreateForm;
import com.yyqian.imagine.po.Post;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.Collection;
import java.util.Optional;

package com.yyqian.imagine.service;



/**
 * Created on 12/15/15.
 *
 * @author Yinyin Qian
 */
public interface PostService {
  Optional<Post> getPostById(long id);

  Page<Post> getPostListByPage(Pageable pageable);

  Collection<Post> getPostListBySite(String site);

  Collection<Post> getPostListByCurrentUser();

  Post create(Post post);

  Post create(PostCreateForm form);