// Path: src/main/java/co/lilpilot/blog/model/Post.java
// @Entity
// @Data
// @Table(name = "posts")
// public class Post extends BaseModel {
// 
//     @ApiModelProperty(value = "文章标题")
//     @Column(nullable = false)
//     private String title;
// 
//     @ApiModelProperty(value = "文章内容")
//     @Lob
//     @Column(length = 16777216)
//     private String content;
// 
//     @ApiModelProperty(value = "永久链接")
//     private String permalink;
// 
//     @ApiModelProperty(value = "状态 0关闭 1开放 2草稿")
//     private Integer status;
// 
//     @ApiModelProperty(value = "标签列表")
//     //FetchType.EAGER : 默认LAZY会使用代理通过get()去获取 但在session关闭后查询不到
//     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
//     @JoinTable(joinColumns = {@JoinColumn(name = "post_id")},
//             inverseJoinColumns = {@JoinColumn(name = "tag_id")})
//     private List<Tag> tags = new ArrayList<>();
// 
//     //维护多对多关系两端的状态
//     //提供对子实体增加/删除的帮助类是很好的实践
//     public void addTag(Tag tag) {
//         tags.add(tag);
//         tag.getPosts().add(this);
//     }
// 
//     public void removeTag(Tag tag) {
//         tags.remove(tag);
//         tag.getPosts().remove(this);
//     }
// 
//     //toString不包含tags 避免死循环
//     @Override
//     public String toString() {
//         return "Post{" +
//                 "title='" + title + '\'' +
//                 ", content='" + content + '\'' +
//                 ", permalink='" + permalink + '\'' +
//                 "}" + super.toString();
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/model/Tag.java
// @Data
// @Entity
// @Table(name = "tags")
// public class Tag extends BaseModel {
//     @Column(nullable = false, unique = true)
//     private String name;
// 
//     @ManyToMany(mappedBy = "tags")
//     // @JsonIgnore避免response中的json数据产生死循环
//     @JsonIgnore
//     private List<Post> posts = new ArrayList<>();
// 
//     //toString不包含posts 避免死循环
//     @Override
//     public String toString() {
//         return "Tag{" +
//                 "name='" + name + '\'' +
//                 "}" + super.toString();
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/repository/TagRepository.java
// public interface TagRepository extends JpaRepository<Tag, Long> {
//     Tag findByName(String name);
// 
//     Page<Tag> findAll(Pageable pageable);
// }


import co.lilpilot.blog.model.Post;
import co.lilpilot.blog.model.Tag;
import co.lilpilot.blog.repository.TagRepository;
import com.google.common.base.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Iterator;
import java.util.List;
package co.lilpilot.blog.service;



/**
 * Created by lilpilot on 2017/5/3.
 */
@Service
public class TagService {

    @Autowired
    private TagRepository tagRepository;
    @Autowired
    private PostService postService;

    public List<Tag> getAllTags() {
        return tagRepository.findAll();
    }

// Path: src/main/java/co/lilpilot/blog/model/Post.java
// @Entity
// @Data
// @Table(name = "posts")
// public class Post extends BaseModel {
// 
//     @ApiModelProperty(value = "文章标题")
//     @Column(nullable = false)
//     private String title;
// 
//     @ApiModelProperty(value = "文章内容")
//     @Lob
//     @Column(length = 16777216)
//     private String content;
// 
//     @ApiModelProperty(value = "永久链接")
//     private String permalink;
// 
//     @ApiModelProperty(value = "状态 0关闭 1开放 2草稿")
//     private Integer status;
// 
//     @ApiModelProperty(value = "标签列表")
//     //FetchType.EAGER : 默认LAZY会使用代理通过get()去获取 但在session关闭后查询不到
//     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
//     @JoinTable(joinColumns = {@JoinColumn(name = "post_id")},
//             inverseJoinColumns = {@JoinColumn(name = "tag_id")})
//     private List<Tag> tags = new ArrayList<>();
// 
//     //维护多对多关系两端的状态
//     //提供对子实体增加/删除的帮助类是很好的实践
//     public void addTag(Tag tag) {
//         tags.add(tag);
//         tag.getPosts().add(this);
//     }
// 
//     public void removeTag(Tag tag) {
//         tags.remove(tag);
//         tag.getPosts().remove(this);
//     }
// 
//     //toString不包含tags 避免死循环
//     @Override
//     public String toString() {
//         return "Post{" +
//                 "title='" + title + '\'' +
//                 ", content='" + content + '\'' +
//                 ", permalink='" + permalink + '\'' +
//                 "}" + super.toString();
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/model/Tag.java
// @Data
// @Entity
// @Table(name = "tags")
// public class Tag extends BaseModel {
//     @Column(nullable = false, unique = true)
//     private String name;
// 
//     @ManyToMany(mappedBy = "tags")
//     // @JsonIgnore避免response中的json数据产生死循环
//     @JsonIgnore
//     private List<Post> posts = new ArrayList<>();
// 
//     //toString不包含posts 避免死循环
//     @Override
//     public String toString() {
//         return "Tag{" +
//                 "name='" + name + '\'' +
//                 "}" + super.toString();
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/repository/TagRepository.java
// public interface TagRepository extends JpaRepository<Tag, Long> {
//     Tag findByName(String name);
// 
//     Page<Tag> findAll(Pageable pageable);
// }


// Path: src/main/java/co/lilpilot/blog/service/TagService.java
import co.lilpilot.blog.model.Post;
import co.lilpilot.blog.model.Tag;
import co.lilpilot.blog.repository.TagRepository;
import com.google.common.base.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Iterator;
import java.util.List;

package co.lilpilot.blog.service;



/**
 * Created by lilpilot on 2017/5/3.
 */
@Service
public class TagService {

    @Autowired
    private TagRepository tagRepository;
    @Autowired
    private PostService postService;

    public List<Tag> getAllTags() {
        return tagRepository.findAll();
    }

    public Tag getById(Long id) {