// 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/service/TagService.java
// @Service
// public class TagService {
// 
//     @Autowired
//     private TagRepository tagRepository;
//     @Autowired
//     private PostService postService;
// 
//     public List<Tag> getAllTags() {
//         return tagRepository.findAll();
//     }
// 
//     public Tag getById(Long id) {
//         if (id == null) {
//             throw new IllegalArgumentException("id is null");
//         }
//         return tagRepository.findOne(id);
//     }
// 
//     public Tag getByName(String name) {
//         if (Strings.isNullOrEmpty(name)) {
//             throw new IllegalArgumentException("name is null");
//         }
//         return tagRepository.findByName(name);
//     }
// 
//     public Tag saveOrUpdate(Tag tag) {
//         if (tag == null) {
//             throw new IllegalArgumentException("tag is null");
//         }
//         return tagRepository.save(tag);
//     }
// 
//     public Tag delete(Tag tag) {
//         if (tag == null || tag.getId() == null) {
//             throw new IllegalArgumentException("tag is null");
//         }
//         for(Post post : tag.getPosts()) {
//             post.getTags().remove(tag);
//         }
//         tagRepository.delete(tag);
//         return tag;
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/util/Result.java
// @Data
// public class Result<T> {
//     private boolean success = false;
//     private Map<String, T> data = null;
//     private String msg = "";
//     private String code = "500";
// 
//     public static <T> Result<T> success(T data) {
//         Result result = new Result();
//         result.setData(data);
//         result.setCode("200");
//         result.setMsg("success");
//         result.setSuccess(true);
//         return result;
//     }
// 
//     public static <T> Result<T> fail(String code, String msg) {
//         Result result = new Result();
//         result.setSuccess(false);
//         result.setCode(code);
//         result.setMsg(msg);
//         return result;
//     }
// 
//     public Result<T> setData(T data) {
//         Map map = new HashMap();
//         map.put("result", data);
//         this.data = map;
//         return this;
//     }
// 
//     public Result<T> setData(String key, T data) {
//         Map map = new HashMap();
//         map.put(key, data);
//         this.data = map;
//         return this;
//     }
// 
//     //一定要有这个get方法 不然swagger获取不到data信息
//     public T getData() {
//         if(this.data != null && !this.data.isEmpty()) {
//             Iterator iterator = this.data.keySet().iterator();
//             if(iterator.hasNext()) {
//                 String key = (String)iterator.next();
//                 return this.data.get(key);
//             } else {
//                 return null;
//             }
//         } else {
//             return null;
//         }
//     }
// }


import co.lilpilot.blog.model.Tag;
import co.lilpilot.blog.service.TagService;
import co.lilpilot.blog.util.Result;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
package co.lilpilot.blog.controller;



/**
 * Created by lilpilot on 2017/5/23.
 */
@RestController
@RequestMapping("/api/v1")
public class TagController {

    @Autowired
    private TagService tagService;

    @GetMapping("/tags")
    @ApiOperation(value = "获取所有标签")
    public Result<List<Tag>> getAllTags() {
        return Result.success(tagService.getAllTags());
    }

    @GetMapping("/tags/{id}")
    @ApiOperation(value = "获取指定ID的标签")
    @ApiImplicitParam(name = "id", value = "标签ID", required = true, dataType = "Long", paramType = "path")
    public Result<Tag> getTagById(@PathVariable Long id) {
// 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/service/TagService.java
// @Service
// public class TagService {
// 
//     @Autowired
//     private TagRepository tagRepository;
//     @Autowired
//     private PostService postService;
// 
//     public List<Tag> getAllTags() {
//         return tagRepository.findAll();
//     }
// 
//     public Tag getById(Long id) {
//         if (id == null) {
//             throw new IllegalArgumentException("id is null");
//         }
//         return tagRepository.findOne(id);
//     }
// 
//     public Tag getByName(String name) {
//         if (Strings.isNullOrEmpty(name)) {
//             throw new IllegalArgumentException("name is null");
//         }
//         return tagRepository.findByName(name);
//     }
// 
//     public Tag saveOrUpdate(Tag tag) {
//         if (tag == null) {
//             throw new IllegalArgumentException("tag is null");
//         }
//         return tagRepository.save(tag);
//     }
// 
//     public Tag delete(Tag tag) {
//         if (tag == null || tag.getId() == null) {
//             throw new IllegalArgumentException("tag is null");
//         }
//         for(Post post : tag.getPosts()) {
//             post.getTags().remove(tag);
//         }
//         tagRepository.delete(tag);
//         return tag;
//     }
// }
// 
// Path: src/main/java/co/lilpilot/blog/util/Result.java
// @Data
// public class Result<T> {
//     private boolean success = false;
//     private Map<String, T> data = null;
//     private String msg = "";
//     private String code = "500";
// 
//     public static <T> Result<T> success(T data) {
//         Result result = new Result();
//         result.setData(data);
//         result.setCode("200");
//         result.setMsg("success");
//         result.setSuccess(true);
//         return result;
//     }
// 
//     public static <T> Result<T> fail(String code, String msg) {
//         Result result = new Result();
//         result.setSuccess(false);
//         result.setCode(code);
//         result.setMsg(msg);
//         return result;
//     }
// 
//     public Result<T> setData(T data) {
//         Map map = new HashMap();
//         map.put("result", data);
//         this.data = map;
//         return this;
//     }
// 
//     public Result<T> setData(String key, T data) {
//         Map map = new HashMap();
//         map.put(key, data);
//         this.data = map;
//         return this;
//     }
// 
//     //一定要有这个get方法 不然swagger获取不到data信息
//     public T getData() {
//         if(this.data != null && !this.data.isEmpty()) {
//             Iterator iterator = this.data.keySet().iterator();
//             if(iterator.hasNext()) {
//                 String key = (String)iterator.next();
//                 return this.data.get(key);
//             } else {
//                 return null;
//             }
//         } else {
//             return null;
//         }
//     }
// }


// Path: src/main/java/co/lilpilot/blog/controller/TagController.java
import co.lilpilot.blog.model.Tag;
import co.lilpilot.blog.service.TagService;
import co.lilpilot.blog.util.Result;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

package co.lilpilot.blog.controller;



/**
 * Created by lilpilot on 2017/5/23.
 */
@RestController
@RequestMapping("/api/v1")
public class TagController {

    @Autowired
    private TagService tagService;

    @GetMapping("/tags")
    @ApiOperation(value = "获取所有标签")
    public Result<List<Tag>> getAllTags() {
        return Result.success(tagService.getAllTags());
    }

    @GetMapping("/tags/{id}")
    @ApiOperation(value = "获取指定ID的标签")
    @ApiImplicitParam(name = "id", value = "标签ID", required = true, dataType = "Long", paramType = "path")
    public Result<Tag> getTagById(@PathVariable Long id) {
        Tag tag = tagService.getById(id);